繼發(fā)布面向量化金融的C++分布式xRPC通訊框架后,數(shù)字動能 再發(fā)布用于分布式服務(wù)框架的智能代理xPort v1.0 。xPort智能代理完全由C++編寫 ,支持 數(shù)字動能的xRPC通訊協(xié)議 ,主要用于實現(xiàn)多應(yīng)用服務(wù)在分布式服務(wù)框架 (如Service Mesh服務(wù)網(wǎng)格)的智能調(diào)度和管理功能 。xPort v1.0智能代理的發(fā)布,標(biāo)志著數(shù)字動能將掌握下一代分布式微服務(wù)架構(gòu)-Service Mesh的核心開發(fā)技術(shù)。利用最新的分布式微服務(wù)架構(gòu),數(shù)字動能可具備搭建多元異構(gòu)業(yè)務(wù)中臺、實現(xiàn)復(fù)雜業(yè)務(wù)解耦和跨業(yè)務(wù)間通訊、滿足多業(yè)務(wù)場景交付的能力。
一、xPort是什么?
智能代理,也叫Side Car,既是新一代分布式微服務(wù)框架-Service Mesh服務(wù)網(wǎng)格架構(gòu)的基石構(gòu)件,也是Service Mesh數(shù)據(jù)平面和控制平面的核心管理組件。
ISTO的Service Mesh通用模型
xPort是數(shù)字動能的Service Mesh核心組件“智能代理”(也叫Side Car)。xPort以分布式通訊框架xRPC為主要通訊協(xié)議,它主要負(fù)責(zé)Service Mesh服務(wù)網(wǎng)格節(jié)點間的數(shù)據(jù)平臺與控制平面的管理。服務(wù)網(wǎng)格-Service Mesh被視為下一代基于分布式思路的微服務(wù)架構(gòu),它提出了利用全新的分布式、輕量級設(shè)計的Sidecar(以下稱智能代理)部署模式替代原來龐大的層級式、堆疊式的集中服務(wù)框架。應(yīng)用服務(wù)間的數(shù)據(jù)通訊將由智能代理接管,不再需要關(guān)注通信和控制細節(jié),信息可在服務(wù)網(wǎng)格間高速通訊。而對于系統(tǒng)級別的功能調(diào)用,應(yīng)用服務(wù)單元也無需再去關(guān)心如何調(diào)度,完全由智能代理負(fù)責(zé)數(shù)據(jù)平臺和控制平面的協(xié)調(diào)。這種改進將把業(yè)務(wù)代碼和技術(shù)實現(xiàn)進一步解耦,技術(shù)架構(gòu)的變動對業(yè)務(wù)代碼的影響也進一步減少。利用智能代理進行應(yīng)用服務(wù)間信息通訊的方式是Service mesh服務(wù)網(wǎng)格設(shè)計的核心思路,數(shù)字動能提出的Direct Exchange Mesh服務(wù)網(wǎng)格架構(gòu)對比ISTO經(jīng)典Service Mesh模型更輕量級,主要針對金融行業(yè)的大數(shù)據(jù)傳輸、復(fù)雜計算和高速傳輸需求進行了場景針對設(shè)計。其智能代理xPort完全自主研發(fā),采用大量創(chuàng)新設(shè)計。
數(shù)字動能的Service Mesh 改進模型
二、智能代理xPort v1.0有什么特點?
1、智能代理通訊不再經(jīng)過通用模型的控制面板而是直接數(shù)據(jù)交換模式
Service Mesh通用模型中,智能節(jié)點(Side Car)區(qū)分了數(shù)據(jù)平面和控制平面。但在面向應(yīng)用服務(wù),以松耦合和高速通訊為首要目標(biāo)的Direct Exchange Mesh服務(wù)網(wǎng)格設(shè)計中,數(shù)字動能利用xPort智能代理大膽把控制平面的部分功能下沉至智能代理內(nèi)部,同時把硬件資源的調(diào)度權(quán)交回給IaaS層,讓整個分布式架構(gòu)設(shè)計更輕量級,以智能節(jié)點直接點對點方式進行數(shù)據(jù)交換(Direct Exchange Model)。在原Service Mesh通用模型中,應(yīng)用服務(wù)的微服務(wù)化看似松耦合,實際上由于控制面板的集中通訊設(shè)計,反而加重了網(wǎng)絡(luò)間節(jié)點傳輸?shù)膲毫?。?shù)字動能的xPort智能代理大膽取舍了原來控制面板的功能,改為智能代理間完全點對點直接通訊,從而避免過多的節(jié)點需要同時經(jīng)過控制平面通訊所產(chǎn)生的原生架構(gòu)性能瓶頸。
2、智能代理xPort允許應(yīng)用(服務(wù))通過進程內(nèi)調(diào)用的方式實現(xiàn)高速點對點通訊
普通Service Mesh的SideCar只是做了消息轉(zhuǎn)發(fā),xPort在滿足該功能的前提下,可以更好的滿足金融業(yè)務(wù)(如投研業(yè)務(wù))間大量數(shù)據(jù)和傳輸。智能代理xPort直接把應(yīng)用服務(wù)加載到自身的進程內(nèi), 這樣應(yīng)用服務(wù)和智能代理xPort的通訊無需再通過網(wǎng)絡(luò)避免了頻繁通訊產(chǎn)生的網(wǎng)絡(luò)高負(fù)載,而是直接通過內(nèi)存交互。如下圖,應(yīng)用服務(wù)A和應(yīng)用服務(wù)B都是加載在xPortA的,通訊流程為:應(yīng)用服務(wù)A -> xPortA -> 應(yīng)用服務(wù)B。即使兩個應(yīng)用服務(wù)加載在不同的xPort,也只需要發(fā)起一次網(wǎng)絡(luò)調(diào)用即可。另外,不同于原來一對一的智能代理->應(yīng)用服務(wù)的單一結(jié)構(gòu),xPort允許多個應(yīng)用服務(wù)同時在進程內(nèi)加載。如圖,應(yīng)用服務(wù)A,B,C可同時通過加載在xPortA中。
利用xPort實現(xiàn)進程內(nèi)多應(yīng)用服務(wù)調(diào)用
3、智能代理xPort內(nèi)置服務(wù)發(fā)現(xiàn)功能,降低對注冊發(fā)現(xiàn)服務(wù)頻繁訪問的網(wǎng)絡(luò)消耗
通用Service Mesh服務(wù)網(wǎng)格模型對服務(wù)注冊中心的依賴度很高,應(yīng)用服務(wù)通過智能代理必須和服務(wù)注冊中心保持連接,以確保服務(wù)注冊中心能觀測到各個節(jié)點的狀態(tài)變化。這種方式在大規(guī)模的分布式應(yīng)用中容易產(chǎn)生單點問題,隨著應(yīng)用服務(wù)節(jié)點的數(shù)量增加,服務(wù)注冊中心的壓力會隨之變大,一旦服務(wù)注冊中心發(fā)生故障,所有的應(yīng)用服務(wù)都將被掛起無法工作。xPort為避免此問題,在智能代理中內(nèi)置了服務(wù)發(fā)現(xiàn)功能。當(dāng)應(yīng)用服務(wù)把消息傳遞給xPort后,智能代理會先查詢內(nèi)置的本地路由表,查看是否有目標(biāo)應(yīng)用服務(wù)的地址,如果沒有才會從服務(wù)注冊中心獲取目標(biāo)服務(wù)(應(yīng)用)的地址。對于首次應(yīng)用服務(wù)注冊,只需要通過智能代理向服務(wù)注冊中心做一次性注冊,后面的所有調(diào)用或應(yīng)用服務(wù)目標(biāo)的狀態(tài)無需再通過服務(wù)注冊中心。如上圖的服務(wù)(應(yīng)用)A發(fā)送消息給應(yīng)用服務(wù)D,當(dāng)xPortA和xPortB通過服務(wù)注冊中心建立連接后, xPortA和xPortB會開始自動相互各自的應(yīng)用服務(wù)信息,不再需要通過服務(wù)注冊中心。
4、xPort具有帶消息隊列的點對點通訊功能
在通用Service Mesh架構(gòu)中,應(yīng)用服務(wù)和智能代理、智能代理自身相互之間均是點對點通訊。點對點通訊在獲得高性能的同時,卻要求被調(diào)用方必須保持在線。在分布式場景中,應(yīng)用服務(wù)可能會出現(xiàn)短時間(或極短時間)的通訊中斷現(xiàn)象。xPort智能代理將會允許這些臨時中斷現(xiàn)象的發(fā)生,并將其視為信息在節(jié)點間傳輸?shù)挠行芷?。xPort通過改進并融入ZeroMQ的技術(shù)達到此目的。應(yīng)用服務(wù)把消息傳給xPort之后,會在本地創(chuàng)建該消息目標(biāo)應(yīng)用服務(wù)的隊列,然后再由該應(yīng)用服務(wù)把消息發(fā)送給目標(biāo)應(yīng)用服務(wù);如果目標(biāo)應(yīng)用服務(wù)不在線,那么在消息的生命周期內(nèi)會存放在這個隊列里面,待目標(biāo)應(yīng)用服務(wù)上線,該隊列會繼續(xù)完成消息傳輸。因此,智能代理間的消息傳輸只要在其生命周期內(nèi)被處理即可,并不要求各個智能代理節(jié)點必須立即響應(yīng)。與原來傳統(tǒng)點對點的即時信息通訊方式不一樣,xPort在與應(yīng)用服務(wù)和智能代理間的相互調(diào)用,并不認(rèn)為只要對方不在線,消息傳輸就是失敗的,而是允許消息只要還在生命周期內(nèi),都可以隊列方式進入等待響應(yīng)狀態(tài)。在點對點通訊效率提升方面,xPort同時借鑒了RabbitMQ一個連接可以創(chuàng)建多個通道(channel)的思路,大大減少了xPort之間的連接數(shù)量。xPort內(nèi)置的節(jié)點智能連接算法,可讓xPort智能代理會根據(jù)服務(wù)節(jié)點間線路情況自動增加連接,在空閑時自動降低連接數(shù)量。
5、xPort同時支持多線程編程模型和Actor編程模型
通用Service Mesh的架構(gòu)中,智能代理(Side Car)只作為消息代理所用,xPort在實現(xiàn)消息代理功能的同時,允許應(yīng)用服務(wù)加載到自身進程,使其具備對應(yīng)用服務(wù)的調(diào)度功能。為滿足高并發(fā)的使用場景,xPort進一步提供了線程池和Actor兩種并發(fā)模型。線程池并發(fā)模型的多個線程間交互是通過共享內(nèi)存的方式進行的,多個線程對共享進行操作,達到同步消息的目的。這種方式極大提升響應(yīng)速度,降低延時,但多線程編程模型難以保證應(yīng)用運行的正確性。該問題需要用到鎖等機制來解決,這將會影響性能,并且容易導(dǎo)致死鎖等問題。因此,xPort同時提供了Actor并發(fā)模型。Actor不是通過共享內(nèi)存來通信,而是通過通信來共享內(nèi)存的。Actor的狀態(tài)由自身來進行維護,其他線程不能直接對Actor發(fā)起調(diào)用,而是要把調(diào)用的消息發(fā)送給Actor,由Actor來執(zhí)行操作,這樣就可以保證Actor內(nèi)部的數(shù)據(jù)只有由它自身進行改變。這種編程模型大大的降低多線程編程的復(fù)雜度,容易編寫出高并發(fā)的應(yīng)用程序。xPort的使用對象可以根據(jù)業(yè)務(wù)選擇不同的編程模型即可。
三、xPort可以解決什么問題?
xPort作為數(shù)字動能分布式微服務(wù)框架DX Mesh的核心組件,主要解決各個應(yīng)用服務(wù)間的數(shù)據(jù)、通訊和控制問題,為多業(yè)務(wù)場景設(shè)計,復(fù)雜系統(tǒng)構(gòu)建和中臺業(yè)務(wù)架構(gòu)方案提供了全新的實現(xiàn)思路。 利用智能代理xPort實現(xiàn)的業(yè)務(wù)間互聯(lián)互通,將對大型業(yè)務(wù)系統(tǒng)構(gòu)建和擁有復(fù)雜業(yè)務(wù)邏輯的核心系統(tǒng)研發(fā)帶來革命性的改變:
1、業(yè)務(wù)架構(gòu)簡單化 – 復(fù)雜業(yè)務(wù)結(jié)構(gòu)通過xPort接入方式進行解耦,快速實現(xiàn)應(yīng)用模塊化。
2、以組織形態(tài)看待業(yè)務(wù),而不是進行龐大臃腫的大架構(gòu)設(shè)計。
3、通過智能代理,業(yè)務(wù)間不再考慮統(tǒng)一設(shè)計,而是分立設(shè)計,甚至進行動態(tài)業(yè)務(wù)邏輯設(shè)計,彼此相互聯(lián)系又各自獨立。
4、智能代理所形成的分布式業(yè)務(wù)群可實現(xiàn)快速部署,快速遷移。
5、通過智能代理,可實現(xiàn)異構(gòu)開發(fā)語言間的相互通訊。
6、系統(tǒng)從集中式設(shè)計變成網(wǎng)絡(luò)化,節(jié)點化的分布式設(shè)計,可無限延申業(yè)務(wù)體系。
7、智能代理的分布式接入架構(gòu)對傳統(tǒng)的PaaS集中接入式架構(gòu)發(fā)起了挑戰(zhàn),但成本更低,新業(yè)務(wù)接入迅速,舊業(yè)務(wù)系統(tǒng)無需推倒重來。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!