本發(fā)明屬于計(jì)算機(jī)領(lǐng)域,涉及一種微服務(wù)框架,具體涉及跨協(xié)議調(diào)用和異步分布式服務(wù)回調(diào)模式,尤其涉及一種支持異步模式的分布式微服務(wù)框架系統(tǒng);為此,本發(fā)明還涉及該支持異步模式的分布式微服務(wù)框架系統(tǒng)的實(shí)現(xiàn)方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)的發(fā)展,應(yīng)用的規(guī)模不斷擴(kuò)大,常規(guī)的垂直應(yīng)用架構(gòu)已無(wú)法應(yīng)對(duì),分布式服務(wù)架構(gòu)勢(shì)在必行,微服務(wù)架構(gòu)就是其中一種實(shí)踐。微服務(wù)架構(gòu)把單一應(yīng)用拆解到更細(xì)粒度的微服務(wù),每個(gè)服務(wù)都是可獨(dú)立部署、獨(dú)立運(yùn)行、有完整的服務(wù)契約,達(dá)到系統(tǒng)高度解耦的目的。現(xiàn)有微服務(wù)框架(參閱圖1)實(shí)現(xiàn)了服務(wù)發(fā)布和調(diào)用等核心基礎(chǔ)功能,但在面對(duì)長(zhǎng)時(shí)間處理的服務(wù),高頻次服務(wù)調(diào)用,跨平臺(tái)的服務(wù)調(diào)用等場(chǎng)景時(shí),還存在較多問(wèn)題,主要體現(xiàn)在以下幾方面:
1)不支持異步分布式服務(wù)回調(diào):同步處理可以應(yīng)對(duì)常見(jiàn)的“請(qǐng)求-響應(yīng)”模式,但長(zhǎng)時(shí)間的任務(wù)處理服務(wù)必須需要回調(diào)模式來(lái)支撐,避免長(zhǎng)時(shí)間鎖定服務(wù)線程資源,造成調(diào)用端和服務(wù)提供者的堵塞情況?,F(xiàn)有框架實(shí)現(xiàn)了參數(shù)回調(diào)模式,也就是只支持本地處理程序回調(diào),一旦在服務(wù)調(diào)用后本地容器崩潰,服務(wù)提供者回調(diào)后將會(huì)出現(xiàn)找不到回調(diào)程序,丟失服務(wù)數(shù)據(jù)或出現(xiàn)服務(wù)數(shù)據(jù)不一致的情況。這主要是因?yàn)楝F(xiàn)有框架在調(diào)用服務(wù)時(shí)只保存了本地程序回調(diào)的對(duì)象引用,對(duì)于多節(jié)點(diǎn)分布式服務(wù)的情況根本沒(méi)有考慮,這樣無(wú)法滿足需要高穩(wěn)定性的分布式服務(wù)系統(tǒng)需求。
2)不支持跨協(xié)議的微服務(wù)調(diào)用:微服務(wù)的調(diào)用者會(huì)涉及到多平臺(tái)、多通信渠道的情況,如開(kāi)發(fā)移動(dòng)互聯(lián)網(wǎng)應(yīng)用時(shí),移動(dòng)APP端需要調(diào)用微服務(wù),考慮到移動(dòng)網(wǎng)絡(luò)的延遲和不穩(wěn)定等特性,需要使用WEB SOCKET傳輸數(shù)據(jù),而后臺(tái)微服務(wù)提供者是基于隊(duì)列服務(wù)器傳輸數(shù)據(jù)。這就需要框架能支持協(xié)議和傳輸器之間的代理轉(zhuǎn)換和報(bào)文轉(zhuǎn)換,而現(xiàn)有框架要求所有調(diào)用和服務(wù)提供者使用統(tǒng)一的協(xié)議和傳輸器,無(wú)法滿足互聯(lián)網(wǎng)應(yīng)用跨平臺(tái)跨協(xié)議模式的開(kāi)發(fā)。
3)缺乏對(duì)服務(wù)的緩存處理機(jī)制:現(xiàn)有框架緩存機(jī)制實(shí)現(xiàn)較簡(jiǎn)單,只考慮了調(diào)用端的本地緩存處理,在面對(duì)高頻次服務(wù)調(diào)用時(shí)消耗較大,降低服務(wù)處理的效率。
4)缺乏服務(wù)的統(tǒng)一管理:現(xiàn)行框架缺失服務(wù)管理,只在服務(wù)調(diào)用端維護(hù)一份本地服務(wù)列表文件,難以保證服務(wù)的一致性,有效性,無(wú)法對(duì)服務(wù)進(jìn)行統(tǒng)一調(diào)度和管理,整體服務(wù)框架維護(hù)的復(fù)雜度急劇上升。
5)服務(wù)調(diào)用不支持主編程模型的注解模式:現(xiàn)行框架的所有服務(wù)調(diào)用和暴露都需要在配置文件中詳細(xì)定義,包括調(diào)用服務(wù)的接口,方法,回調(diào)說(shuō)明等,無(wú)法實(shí)現(xiàn)在編程過(guò)程中的自述隱喻,和主編程模型無(wú)縫嵌入,等于需要在配置文件中重新描述一遍服務(wù)接口的調(diào)用邏輯,增加了調(diào)用實(shí)現(xiàn)的工作量和維護(hù)的復(fù)雜度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題在于提供一種支持異步模式的分布式微服務(wù)框架系統(tǒng),通過(guò)分解巨大的單體式應(yīng)用為多個(gè)獨(dú)立服務(wù)的方法解決復(fù)雜性問(wèn)題,在功能不變的情況下,應(yīng)用被分解為多個(gè)可管理的服務(wù),每個(gè)服務(wù)都用RPC(Remote Procedure Call Protocol——遠(yuǎn)程過(guò)程調(diào)用協(xié)議)定義出清晰的邊界,增加了服務(wù)的可管理性和調(diào)用的簡(jiǎn)易高效,解決了如下幾方面問(wèn)題:
1)支持異步分布式服務(wù)回調(diào),解決回調(diào)中出現(xiàn)響應(yīng)處理單點(diǎn)故障問(wèn)題;
2)支持不同協(xié)議和傳輸層之間的轉(zhuǎn)換,打通全過(guò)程微服務(wù)調(diào)用;
3)實(shí)現(xiàn)服務(wù)發(fā)布、調(diào)用的主編程模型注解模式,提高實(shí)現(xiàn)效率,降低維護(hù)復(fù)雜度;
4)實(shí)現(xiàn)調(diào)用端和服務(wù)提供端的雙緩存機(jī)制,提高服務(wù)調(diào)用效率;
5)實(shí)現(xiàn)統(tǒng)一服務(wù)注冊(cè)中心,集中化管理所有發(fā)布服務(wù)。
為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種支持異步模式的分布式微服務(wù)框架系統(tǒng),包括服務(wù)網(wǎng)關(guān)代理層、服務(wù)提供端、服務(wù)注冊(cè)中心和服務(wù)調(diào)用端;
所述服務(wù)網(wǎng)關(guān)代理層包括協(xié)議轉(zhuǎn)換器和傳輸器,所述協(xié)議轉(zhuǎn)換器負(fù)責(zé)外部請(qǐng)求的數(shù)據(jù)和內(nèi)部服務(wù)支撐的協(xié)議格式數(shù)據(jù)相互轉(zhuǎn)換,所述傳輸器負(fù)責(zé)請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)的傳輸;
所述服務(wù)提供端負(fù)責(zé)發(fā)布服務(wù)到服務(wù)注冊(cè)中心,收到服務(wù)請(qǐng)求后進(jìn)行業(yè)務(wù)處理;
所述服務(wù)注冊(cè)中心負(fù)責(zé)發(fā)布服務(wù)登記,服務(wù)的查找處理;
所述服務(wù)調(diào)用端根據(jù)指定的服務(wù)調(diào)用信息通過(guò)服務(wù)注冊(cè)中心查找服務(wù)目的地,發(fā)起遠(yuǎn)程服務(wù)的請(qǐng)求并獲取服務(wù)響應(yīng)數(shù)據(jù);
所述傳輸器在接收到遠(yuǎn)程調(diào)用端的請(qǐng)求數(shù)據(jù)后,通過(guò)協(xié)議轉(zhuǎn)換器轉(zhuǎn)換成協(xié)議格式數(shù)據(jù),然后通過(guò)服務(wù)調(diào)用端程序發(fā)送組裝好的服務(wù)請(qǐng)求給服務(wù)提供端,服務(wù)提供端發(fā)布服務(wù)到服務(wù)注冊(cè)中心,服務(wù)調(diào)用端通過(guò)服務(wù)注冊(cè)中心查找服務(wù)目的地并獲取服務(wù)響應(yīng)數(shù)據(jù),所述傳輸器在收到該服務(wù)響應(yīng)數(shù)據(jù)后再轉(zhuǎn)發(fā)給遠(yuǎn)程調(diào)用端。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述協(xié)議轉(zhuǎn)換器主要包括協(xié)議處理器和序列化處理器兩部分,負(fù)責(zé)所有服務(wù)請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)的組裝、序列化和反序列化,翻譯成主編程模型可直接處理的數(shù)據(jù);所述協(xié)議轉(zhuǎn)換器中的協(xié)議處理器、序列化處理器都能自由插拔;所述傳輸器包括WEB SOCKET傳輸器和HTTP傳輸器;所述遠(yuǎn)程調(diào)用端包括IOS遠(yuǎn)程調(diào)用端、Android遠(yuǎn)程調(diào)用端和WEB遠(yuǎn)程調(diào)用端。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述服務(wù)提供端,包括分布式緩存模塊,注解模型,Ti-Lnk協(xié)議,回調(diào)Stub處理模塊以及RabbitMq處理器;所述分布式緩存模塊負(fù)責(zé)根據(jù)服務(wù)提供接口的參數(shù)緩存配置,使用分布式緩存存儲(chǔ)中間件,提供數(shù)據(jù)緩存處理;所述注解模型負(fù)責(zé)使用主編程語(yǔ)言實(shí)現(xiàn)服務(wù)注冊(cè),服務(wù)調(diào)用注入,服務(wù)參數(shù),緩存配置的注解功能;所述回調(diào)Stub處理模塊負(fù)責(zé)存儲(chǔ)異步回調(diào)服務(wù)的描述信息,包括服務(wù)名稱,使用的協(xié)議,服務(wù)的接口描述,方法簽名,使得服務(wù)提供端在異步回調(diào)時(shí)可以查找到目標(biāo)服務(wù)接收地址;所述RabbitMq處理器負(fù)責(zé)RabbitMq消息隊(duì)列的操作,包括在調(diào)用服務(wù)時(shí)把組裝好的協(xié)議數(shù)據(jù)發(fā)送到服務(wù)提供端的監(jiān)聽(tīng)隊(duì)列和服務(wù)調(diào)用端等待響應(yīng)和異步回調(diào)的監(jiān)聽(tīng)隊(duì)列;所述Ti-Lnk協(xié)議負(fù)責(zé)服務(wù)請(qǐng)求和響應(yīng)數(shù)據(jù)的協(xié)議組裝和拆包處理;所述本地緩存模塊負(fù)責(zé)服務(wù)調(diào)用過(guò)程中的本地緩存處理,主要實(shí)現(xiàn)了線程級(jí)別的緩存處理;
所述服務(wù)提供端在業(yè)務(wù)處理前,服務(wù)注冊(cè)中心會(huì)根據(jù)配置的緩存服務(wù)查找命中的緩存數(shù)據(jù),如果命中,則直接返回,否則繼續(xù)后續(xù)業(yè)務(wù)處理;在服務(wù)調(diào)用端需要異步服務(wù)回調(diào)時(shí),將回調(diào)Stub信息存儲(chǔ)到緩存服務(wù)中,當(dāng)服務(wù)請(qǐng)求處理完成后,查找對(duì)應(yīng)的回調(diào)信息,并通過(guò)服務(wù)注冊(cè)中心查找對(duì)應(yīng)的回調(diào)服務(wù)目的地,完成回調(diào)處理;
所有服務(wù)提供端啟動(dòng)后會(huì)把需要對(duì)外發(fā)布的服務(wù)登記到服務(wù)注冊(cè)中心,包括服務(wù)名稱,服務(wù)目的地尋址信息,服務(wù)可調(diào)用的接口名稱,服務(wù)請(qǐng)求的參數(shù)類型和內(nèi)容,服務(wù)的回調(diào)信息;當(dāng)服務(wù)調(diào)用端需要請(qǐng)求時(shí),會(huì)使用服務(wù)名稱查找對(duì)應(yīng)的尋址信息,再進(jìn)行遠(yuǎn)程調(diào)用。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述服務(wù)調(diào)用端包括本地緩存模塊,注解模型,Ti-Lnk協(xié)議以及RabbitMq傳輸器;所述本地緩存模塊負(fù)責(zé)服務(wù)調(diào)用過(guò)程中的本地緩存處理,主要實(shí)現(xiàn)了線程級(jí)別的緩存處理;所述注解模型負(fù)責(zé)使用主編程語(yǔ)言實(shí)現(xiàn)服務(wù)注冊(cè),服務(wù)調(diào)用注入,服務(wù)參數(shù),緩存配置的注解功能;所述RabbitMq處理器負(fù)責(zé)RabbitMq消息隊(duì)列的操作,包括在調(diào)用服務(wù)時(shí)把組裝好的協(xié)議數(shù)據(jù)發(fā)送到服務(wù)提供端的監(jiān)聽(tīng)隊(duì)列和服務(wù)調(diào)用端等待響應(yīng)和異步回調(diào)的監(jiān)聽(tīng)隊(duì)列;所述Ti-Lnk協(xié)議負(fù)責(zé)服務(wù)請(qǐng)求和響應(yīng)數(shù)據(jù)的協(xié)議組裝和拆包處理;所述本地緩存模塊負(fù)責(zé)服務(wù)調(diào)用過(guò)程中的本地緩存處理,主要實(shí)現(xiàn)了線程級(jí)別的緩存處理;
所述服務(wù)調(diào)用端在發(fā)起遠(yuǎn)程服務(wù)的請(qǐng)求前,會(huì)根據(jù)調(diào)用請(qǐng)求信息先查找本地緩存是否存在命中的緩存數(shù)據(jù),如果命中,直接返回緩存數(shù)據(jù),否則繼續(xù)后續(xù)的遠(yuǎn)程服務(wù)請(qǐng)求。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述內(nèi)部服務(wù)支撐的協(xié)議格式為Ti-lnk協(xié)議,所述Ti-Lnk協(xié)議采用幀式報(bào)文結(jié)構(gòu),每幀主要由報(bào)文長(zhǎng)度域和報(bào)文內(nèi)容域構(gòu)成,報(bào)文長(zhǎng)度域使用BIG_ENDIAN編碼,占用4個(gè)字節(jié),報(bào)文內(nèi)容域使用JSON報(bào)文格式,并且在內(nèi)容長(zhǎng)度超過(guò)128k時(shí),進(jìn)行壓縮傳輸處理。
此外,本發(fā)明還提供一種上述系統(tǒng)的實(shí)現(xiàn)方法,該方法包括Ti-Lnk協(xié)議的實(shí)現(xiàn),服務(wù)注冊(cè)中心功能實(shí)現(xiàn),服務(wù)調(diào)用過(guò)程實(shí)現(xiàn)以及服務(wù)網(wǎng)關(guān)實(shí)現(xiàn)。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述Ti-Lnk協(xié)議的實(shí)現(xiàn)包括如下步驟:
a)Ti-Lnk服務(wù)請(qǐng)求報(bào)文:報(bào)文頭包括調(diào)用服務(wù)的標(biāo)識(shí),調(diào)用的服務(wù)接口名稱,調(diào)用的接口參數(shù)簽名,報(bào)文體包括需要調(diào)用服務(wù)傳入的各項(xiàng)參數(shù),每個(gè)參數(shù)是一幀;
b)Ti-Lnk服務(wù)提供端響應(yīng)報(bào)文:報(bào)文頭包括服務(wù)端信息,服務(wù)版本,應(yīng)答類型,服務(wù)會(huì)話標(biāo)識(shí)信息,報(bào)文體內(nèi)容是服務(wù)響應(yīng)結(jié)果。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述服務(wù)注冊(cè)中心功能實(shí)現(xiàn)包括如下步驟:
a)服務(wù)提供端在啟動(dòng)服務(wù)時(shí)會(huì)將服務(wù)信息提交到服務(wù)注冊(cè)中心,包括服務(wù)名稱,服務(wù)接口,接口請(qǐng)求參數(shù)和類型,服務(wù)地址信息;
b)服務(wù)注冊(cè)中心收到服務(wù)注冊(cè)請(qǐng)求后將注冊(cè)服務(wù)納入到心跳監(jiān)測(cè)隊(duì)列中,保持和服務(wù)提供端的聯(lián)系,一旦服務(wù)出現(xiàn)故障,立即更新當(dāng)前服務(wù)注冊(cè)中心的服務(wù)列表,并向所有相關(guān)的服務(wù)訂閱者進(jìn)行服務(wù)信息變更推送;
c)服務(wù)調(diào)用端會(huì)把所有需要調(diào)用的服務(wù)列表向服務(wù)注冊(cè)中心發(fā)送訂閱請(qǐng)求,服務(wù)注冊(cè)中心會(huì)同步返回請(qǐng)求的服務(wù)詳細(xì)調(diào)用信息,同時(shí)和調(diào)用方維系一條長(zhǎng)鏈接來(lái)推送訂閱服務(wù)的變更;
d)服務(wù)調(diào)用端在實(shí)際服務(wù)調(diào)用時(shí),會(huì)從本地服務(wù)列表直接查找對(duì)應(yīng)的目標(biāo)服務(wù)信息,如在程序是動(dòng)態(tài)調(diào)用,沒(méi)有事先訂閱的,會(huì)直接發(fā)起新的服務(wù)查找請(qǐng)求;在查找結(jié)果返回后,更新本地服務(wù)列表。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述服務(wù)調(diào)用過(guò)程實(shí)現(xiàn)包括如下步驟:
a)服務(wù)調(diào)用端發(fā)起調(diào)用后首先會(huì)在本地緩存中查找是否存在有效的擊中數(shù)據(jù),如果命中則直接返回緩存結(jié)果,否則繼續(xù)后續(xù)調(diào)用處理;
b)服務(wù)調(diào)用端根據(jù)調(diào)用服務(wù)名稱在本地服務(wù)列表中查找服務(wù)尋址信息,如沒(méi)有查找到直接向服務(wù)注冊(cè)中心發(fā)起查詢請(qǐng)求,獲取到服務(wù)目標(biāo)地址信息后,先進(jìn)行協(xié)議層數(shù)據(jù)的轉(zhuǎn)換,包括數(shù)據(jù)組裝和序列化操作,完成后選擇對(duì)應(yīng)的傳輸器發(fā)送到目標(biāo)地址,如調(diào)用是異步回調(diào)模式,在確認(rèn)送達(dá)后立即返回;
c)服務(wù)提供端通過(guò)傳輸器收到請(qǐng)求的數(shù)據(jù)后,先根據(jù)對(duì)應(yīng)的協(xié)議進(jìn)行反序列化和數(shù)據(jù)解包操作,然后判定此次調(diào)用的模式,如果是異步服務(wù)回調(diào),會(huì)將回調(diào)服務(wù)的Stub保存在分布式緩存存儲(chǔ)中,然后生成代理對(duì)象進(jìn)入服務(wù)方法調(diào)用;
d)服務(wù)提供端根據(jù)請(qǐng)求數(shù)據(jù)找到對(duì)應(yīng)的服務(wù)程序,同時(shí)根據(jù)服務(wù)對(duì)應(yīng)的緩存配置來(lái)查找緩存數(shù)據(jù);
e)如緩存數(shù)據(jù)沒(méi)有命中,服務(wù)提供端會(huì)繼續(xù)服務(wù)內(nèi)部的邏輯處理,處理完成后,判定調(diào)用模式,如果是異步服務(wù)回調(diào),會(huì)取出當(dāng)時(shí)存儲(chǔ)的回調(diào)Stub,并請(qǐng)求服務(wù)注冊(cè)中心,查詢到有效的服務(wù)目標(biāo)地址,接著根據(jù)對(duì)應(yīng)的協(xié)議和傳輸器,執(zhí)行數(shù)據(jù)組裝,序列化和發(fā)送操作;
f)服務(wù)調(diào)用端收到響應(yīng)數(shù)據(jù)后,按照對(duì)應(yīng)協(xié)議進(jìn)行數(shù)據(jù)解包和反序列化的操作,保存在當(dāng)前線程級(jí)別的緩存存儲(chǔ)中,再進(jìn)行后續(xù)處理,調(diào)用過(guò)程結(jié)束。
作為本發(fā)明優(yōu)選的技術(shù)方案,所述服務(wù)網(wǎng)關(guān)實(shí)現(xiàn)包括如下步驟:
a)遠(yuǎn)程調(diào)用端發(fā)起服務(wù)調(diào)用請(qǐng)求,通過(guò)WEB SOCKET傳輸器發(fā)送請(qǐng)求數(shù)據(jù)到服務(wù)網(wǎng)關(guān)代理層;
b)服務(wù)網(wǎng)關(guān)代理層使用WEB SOCKET傳輸器收到請(qǐng)求數(shù)據(jù)后,先對(duì)請(qǐng)求數(shù)據(jù)的頭信息進(jìn)行解析,拿到請(qǐng)求的服務(wù)信息后,在本地代理服務(wù)列表進(jìn)行映射查找;
c)確定后臺(tái)服務(wù)名稱和接口后,將目標(biāo)服務(wù)請(qǐng)求地址傳入服務(wù)調(diào)用端程序,然后開(kāi)始執(zhí)行服務(wù)調(diào)用;
d)服務(wù)調(diào)用端程序返回結(jié)果后,服務(wù)網(wǎng)關(guān)再次根據(jù)遠(yuǎn)程調(diào)用端使用的協(xié)議組裝響應(yīng)數(shù)據(jù)和對(duì)應(yīng)的WEB SOCKET傳輸器發(fā)送請(qǐng)求響應(yīng)。
根據(jù)以上提供的技術(shù)方案,與現(xiàn)有技術(shù)相比,本發(fā)明提供的支持異步模式的微服務(wù)框架,具有以下有益效果:
1、相對(duì)于現(xiàn)有技術(shù)框架中的服務(wù)回調(diào)技術(shù),本發(fā)明提供的支持異步分布式回調(diào)功能,可以解決長(zhǎng)時(shí)間服務(wù)處理的回調(diào)問(wèn)題,服務(wù)調(diào)用方在請(qǐng)求確認(rèn)送達(dá)后即可結(jié)束調(diào)用,不會(huì)對(duì)服務(wù)調(diào)用者的線程資源有任何多余占用,很大程度提高了調(diào)用效率,減少調(diào)用的資源消耗,保障業(yè)務(wù)數(shù)據(jù)的一致性,提高服務(wù)的可靠性。
2、本發(fā)明提供的服務(wù)網(wǎng)關(guān)代理技術(shù),針對(duì)跨協(xié)議,跨傳輸器的服務(wù)調(diào)用場(chǎng)景,可以打通前后端服務(wù)的調(diào)用,支撐同步、異步調(diào)用,由此降低了前端服務(wù)調(diào)用的復(fù)雜性,把前端服務(wù)調(diào)用從后端協(xié)議層,傳輸層解耦開(kāi),保障了服務(wù)的獨(dú)立性。
3、相對(duì)于現(xiàn)有技術(shù)框架中的緩存技術(shù),本發(fā)明提供的服務(wù)調(diào)用端和服務(wù)提供端的雙緩存技術(shù),可靈活的根據(jù)各種緩存數(shù)據(jù)命中策略,提高高頻次服務(wù)調(diào)用的效率,減少服務(wù)提供端的壓力。
4、相對(duì)于現(xiàn)有技術(shù)框架的服務(wù)調(diào)用實(shí)現(xiàn),本發(fā)明提供的主編程注解模型,可以加快服務(wù)調(diào)用和服務(wù)提供實(shí)現(xiàn),減少配置文件的維護(hù)成本。
5、相對(duì)現(xiàn)有技術(shù)框架的服務(wù)管理,本發(fā)明提供的服務(wù)管理中心,可以實(shí)時(shí)獲取每個(gè)服務(wù)的狀態(tài),并實(shí)時(shí)通知調(diào)用者對(duì)應(yīng)的訂閱服務(wù)狀態(tài),保障服務(wù)的一致性和穩(wěn)定性。
附圖說(shuō)明
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)一步說(shuō)明。
圖1是現(xiàn)有微服務(wù)框架系統(tǒng)結(jié)構(gòu)圖。
圖2是本發(fā)明支持異步模式的分布式微服務(wù)框架系統(tǒng)的結(jié)構(gòu)示意圖。
圖3是本發(fā)明中Ti-Lnk協(xié)議的報(bào)文結(jié)構(gòu)示意圖。
圖4是本發(fā)明中服務(wù)注冊(cè)中心與服務(wù)調(diào)用端及服務(wù)提供端的關(guān)系示意圖。
圖5是本發(fā)明中服務(wù)調(diào)用的流程圖。
圖6是本發(fā)明中網(wǎng)關(guān)服務(wù)處理的流程圖。
具體實(shí)施方式
現(xiàn)在結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。這些附圖均為簡(jiǎn)化的示意圖,僅以示意方式說(shuō)明本發(fā)明的基本結(jié)構(gòu),因此其僅顯示與本發(fā)明有關(guān)的構(gòu)成。
本發(fā)明提供了一種支持異步模式的微服務(wù)框架(Ti-Lnk框架)系統(tǒng),不僅實(shí)現(xiàn)微服務(wù)的基礎(chǔ)同步調(diào)用,服務(wù)注冊(cè)管理,還能實(shí)現(xiàn)異步分布式服務(wù)的回調(diào),以及跨協(xié)議跨傳輸層的調(diào)用。此外,所有的服務(wù)調(diào)用和處理都支持主編程模型的注解方式。
整個(gè)系統(tǒng)主要分為服務(wù)網(wǎng)關(guān)代理層,服務(wù)提供端,服務(wù)調(diào)用端,服務(wù)注冊(cè)中心,整體框架參見(jiàn)圖2。
1)服務(wù)網(wǎng)關(guān)代理層主要由協(xié)議轉(zhuǎn)換器和傳輸器組成,協(xié)議轉(zhuǎn)換器負(fù)責(zé)外部請(qǐng)求的數(shù)據(jù)和內(nèi)部服務(wù)支撐的協(xié)議格式(Ti-lnk協(xié)議)數(shù)據(jù)相互轉(zhuǎn)換,傳輸器(圖2中的WEB SOCKET傳輸器,HTTP傳輸器)負(fù)責(zé)請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)的傳輸,在接收到遠(yuǎn)程調(diào)用端(圖2中的IOS遠(yuǎn)程調(diào)用端、Android遠(yuǎn)程調(diào)用端,WEB遠(yuǎn)程調(diào)用端)的請(qǐng)求數(shù)據(jù)后,通過(guò)協(xié)議轉(zhuǎn)換器轉(zhuǎn)換成通用的Ti-Lnk協(xié)議數(shù)據(jù),然后通過(guò)服務(wù)調(diào)用端程序發(fā)送組裝好的服務(wù)請(qǐng)求給服務(wù)提供端,在收到服務(wù)響應(yīng)后再轉(zhuǎn)發(fā)給遠(yuǎn)程調(diào)用端。
2)服務(wù)提供端,包括分布式緩存模塊,注解模型,Ti-Lnk協(xié)議,回調(diào)Stub處理模塊以及RabbitMq處理器。
2.1)分布式緩存模塊:根據(jù)服務(wù)提供接口的參數(shù)緩存配置,使用分布式緩存存儲(chǔ)中間件,提供數(shù)據(jù)緩存處理
2.2)注解模型:使用主編程語(yǔ)言實(shí)現(xiàn)服務(wù)注冊(cè),服務(wù)調(diào)用注入,服務(wù)參數(shù),緩存配置的注解功能。
2.3)回調(diào)Stub處理模塊:存儲(chǔ)異步回調(diào)服務(wù)的描述信息,包括服務(wù)名稱,使用的協(xié)議,服務(wù)的接口描述,方法簽名等,使得服務(wù)提供端在異步回調(diào)時(shí)可以查找到目標(biāo)服務(wù)接收地址。
2.4)RabbitMq處理器:負(fù)責(zé)RabbitMq消息隊(duì)列的操作,包括在調(diào)用服務(wù)時(shí)把組裝好的協(xié)議數(shù)據(jù)發(fā)送到服務(wù)提供端的監(jiān)聽(tīng)隊(duì)列和服務(wù)調(diào)用端等待響應(yīng)和異步回調(diào)的監(jiān)聽(tīng)隊(duì)列。
2.5)Ti-Lnk協(xié)議:負(fù)責(zé)服務(wù)請(qǐng)求和響應(yīng)數(shù)據(jù)的協(xié)議組裝和拆包處理。
2.6)服務(wù)提供端負(fù)責(zé)發(fā)布服務(wù)到服務(wù)注冊(cè)中心,收到服務(wù)請(qǐng)求后進(jìn)行業(yè)務(wù)處理。在業(yè)務(wù)處理前,服務(wù)注冊(cè)中心會(huì)根據(jù)配置的緩存服務(wù)查找命中的緩存數(shù)據(jù),如果命中,則直接返回,否則繼續(xù)后續(xù)業(yè)務(wù)處理。在服務(wù)調(diào)用端需要異步服務(wù)回調(diào)時(shí),將回調(diào)Stub信息存儲(chǔ)到緩存服務(wù)中,當(dāng)服務(wù)請(qǐng)求處理完成后,查找對(duì)應(yīng)的回調(diào)信息,并通過(guò)服務(wù)注冊(cè)中心查找對(duì)應(yīng)的回調(diào)服務(wù)目的地,完成回調(diào)處理。
3)服務(wù)調(diào)用端包括本地緩存模塊,注解模型,Ti-Lnk協(xié)議以及RabbitMq傳輸器。
3.1)本地緩存模塊:負(fù)責(zé)服務(wù)調(diào)用過(guò)程中的本地緩存處理,主要實(shí)現(xiàn)了線程級(jí)別的緩存處理。
3.2)注解模型:同2.2)
3.3)Ti-Lnk協(xié)議:同2.5)
3.4)RabbitMq傳輸器:同2.4)
3.5)服務(wù)調(diào)用端根據(jù)指定的服務(wù)調(diào)用信息通過(guò)服務(wù)注冊(cè)中心查找服務(wù)目的地,發(fā)起遠(yuǎn)程服務(wù)的請(qǐng)求并獲取服務(wù)響應(yīng)數(shù)據(jù)。在發(fā)起遠(yuǎn)程服務(wù)的請(qǐng)求前,服務(wù)調(diào)用端會(huì)根據(jù)調(diào)用請(qǐng)求信息先查找本地緩存是否存在命中的緩存數(shù)據(jù),如果命中,直接返回緩存數(shù)據(jù),否則繼續(xù)后續(xù)的遠(yuǎn)程服務(wù)請(qǐng)求。
4)服務(wù)注冊(cè)中心負(fù)責(zé)發(fā)布服務(wù)登記,服務(wù)的查找處理。所有服務(wù)提供端啟動(dòng)后會(huì)把需要對(duì)外發(fā)布的服務(wù)登記到服務(wù)注冊(cè)中心,包括服務(wù)名稱,服務(wù)目的地尋址信息,服務(wù)可調(diào)用的接口名稱,服務(wù)請(qǐng)求的參數(shù)類型和內(nèi)容,服務(wù)的回調(diào)信息等。當(dāng)服務(wù)調(diào)用端需要請(qǐng)求時(shí),會(huì)使用服務(wù)名稱查找對(duì)應(yīng)的尋址信息,再進(jìn)行遠(yuǎn)程調(diào)用。
5)協(xié)議轉(zhuǎn)換器主要包括協(xié)議處理器和序列化處理器兩部分,負(fù)責(zé)所有服務(wù)請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)的組裝、序列化和反序列化,翻譯成主編程模型可直接處理的數(shù)據(jù)。模塊中的協(xié)議處理器、序列化處理器都可以自由插拔。
6)服務(wù)調(diào)用端和服務(wù)提供端都會(huì)嵌入主編程注解模型,用來(lái)執(zhí)行服務(wù)調(diào)用,服務(wù)發(fā)布,服務(wù)回調(diào)標(biāo)注等功能,使得整個(gè)處理可以不需要額外的配置文件快速實(shí)現(xiàn)。
本發(fā)明提供的微服務(wù)框架具體實(shí)施主要分成四個(gè)主要部分:Ti-Lnk協(xié)議的實(shí)現(xiàn),服務(wù)注冊(cè)中心功能實(shí)現(xiàn),服務(wù)調(diào)用過(guò)程實(shí)現(xiàn),服務(wù)網(wǎng)關(guān)實(shí)現(xiàn)。
1)Ti-Lnk協(xié)議:Ti-Lnk協(xié)議是為了實(shí)現(xiàn)服務(wù)調(diào)用數(shù)據(jù)的傳輸而設(shè)計(jì)的,協(xié)議的整體結(jié)構(gòu)參見(jiàn)圖3。
a)Ti-Lnk的協(xié)議設(shè)計(jì)采用了幀式報(bào)文結(jié)構(gòu),每幀主要由報(bào)文長(zhǎng)度域和報(bào)文內(nèi)容域構(gòu)成。報(bào)文長(zhǎng)度域使用BIG_ENDIAN編碼,占用4個(gè)字節(jié),報(bào)文內(nèi)容域使用JSON報(bào)文格式,并且在內(nèi)容長(zhǎng)度超過(guò)128k時(shí),進(jìn)行壓縮傳輸處理。
b)Ti-Lnk服務(wù)請(qǐng)求報(bào)文:報(bào)文頭包括調(diào)用服務(wù)的標(biāo)識(shí),調(diào)用的服務(wù)接口名稱,調(diào)用的接口參數(shù)簽名,報(bào)文體包括需要調(diào)用服務(wù)傳入的各項(xiàng)參數(shù),每個(gè)參數(shù)是一幀。
c)Ti-Lnk服務(wù)提供端響應(yīng)報(bào)文:報(bào)文頭包括服務(wù)端信息,服務(wù)版本,應(yīng)答類型(正常響應(yīng)或者異常響應(yīng)),服務(wù)會(huì)話標(biāo)識(shí)信息,報(bào)文體內(nèi)容是服務(wù)響應(yīng)結(jié)果。
2)服務(wù)注冊(cè)中心:服務(wù)注冊(cè)中心主要包含服務(wù)提供端的服務(wù)主動(dòng)注冊(cè),服務(wù)調(diào)用端訂閱的服務(wù)信息通知以及服務(wù)信息的主動(dòng)查找,參閱圖4。
a)服務(wù)提供端在啟動(dòng)服務(wù)時(shí)會(huì)將服務(wù)信息提交到服務(wù)注冊(cè)中心,包括服務(wù)名稱,服務(wù)接口,接口請(qǐng)求參數(shù)和類型,服務(wù)地址信息。
b)服務(wù)注冊(cè)中心收到服務(wù)注冊(cè)請(qǐng)求后將注冊(cè)服務(wù)納入到心跳監(jiān)測(cè)隊(duì)列中,保持和服務(wù)提供端的聯(lián)系,一旦服務(wù)出現(xiàn)故障,立即更新當(dāng)前服務(wù)注冊(cè)中心的服務(wù)列表,并向所有相關(guān)的服務(wù)訂閱者進(jìn)行服務(wù)信息變更推送。
c)服務(wù)調(diào)用端會(huì)把所有需要調(diào)用的服務(wù)列表向服務(wù)注冊(cè)中心發(fā)送訂閱請(qǐng)求,服務(wù)注冊(cè)中心會(huì)同步返回請(qǐng)求的服務(wù)詳細(xì)調(diào)用信息,同時(shí)和調(diào)用方維系一條長(zhǎng)鏈接來(lái)推送訂閱服務(wù)的變更,例如訂閱服務(wù)的接口增加,訂閱服務(wù)的故障等。
d)服務(wù)調(diào)用端在實(shí)際服務(wù)調(diào)用時(shí),會(huì)從本地服務(wù)列表直接查找對(duì)應(yīng)的目標(biāo)服務(wù)信息,如在程序是動(dòng)態(tài)調(diào)用,沒(méi)有事先訂閱的,會(huì)直接發(fā)起新的服務(wù)查找請(qǐng)求。在查找結(jié)果返回后,更新本地服務(wù)列表。
從上述過(guò)程可以看出服務(wù)注冊(cè)中心統(tǒng)一管理服務(wù),保障服務(wù)信息的準(zhǔn)確性和可達(dá)性,為后續(xù)的服務(wù)調(diào)度提供重要支撐。
3)服務(wù)調(diào)用:服務(wù)的調(diào)用實(shí)現(xiàn)是微服務(wù)框架的核心,主要包含服務(wù)的調(diào)用發(fā)起,服務(wù)調(diào)用的緩存處理,服務(wù)的同步調(diào)用處理和服務(wù)的異步回調(diào)處理幾個(gè)重要部分,參閱圖5。以下是服務(wù)調(diào)用的完整過(guò)程:
a)服務(wù)調(diào)用端發(fā)起調(diào)用后首先會(huì)在本地緩存中查找是否存在有效的擊中數(shù)據(jù),如果命中則直接返回緩存結(jié)果,否則繼續(xù)后續(xù)調(diào)用處理。本地緩存的作用范圍僅限于線程級(jí)別,這樣可以減少同一線程的多次發(fā)起遠(yuǎn)程申請(qǐng)?jiān)L問(wèn)同一服務(wù)數(shù)據(jù)的次數(shù),提升訪問(wèn)效率。
b)服務(wù)調(diào)用端根據(jù)調(diào)用服務(wù)名稱在本地服務(wù)列表中查找服務(wù)尋址信息,如沒(méi)有查找到直接向服務(wù)注冊(cè)中心發(fā)起查詢請(qǐng)求。獲取到服務(wù)目標(biāo)地址信息后,先進(jìn)行協(xié)議層數(shù)據(jù)的轉(zhuǎn)換,包括數(shù)據(jù)組裝和序列化操作,完成后選擇對(duì)應(yīng)的傳輸器發(fā)送到目標(biāo)地址。如調(diào)用是異步回調(diào)模式,在確認(rèn)送達(dá)后立即返回。
c)服務(wù)提供端通過(guò)傳輸器收到請(qǐng)求的數(shù)據(jù)后,先根據(jù)對(duì)應(yīng)的協(xié)議進(jìn)行反序列化和數(shù)據(jù)解包操作,然后判定此次調(diào)用的模式,如果是異步服務(wù)回調(diào),會(huì)將回調(diào)服務(wù)的Stub保存在分布式緩存存儲(chǔ)中,然后生成代理對(duì)象進(jìn)入服務(wù)方法調(diào)用。
d)服務(wù)提供端根據(jù)請(qǐng)求數(shù)據(jù)找到對(duì)應(yīng)的服務(wù)程序,同時(shí)根據(jù)服務(wù)對(duì)應(yīng)的緩存配置來(lái)查找緩存數(shù)據(jù)。緩存配置可根據(jù)JXPATH,接口參數(shù)或者組合參數(shù)索引來(lái)命中查找緩存,這樣可以根據(jù)不同數(shù)據(jù)訪問(wèn)場(chǎng)景定義緩存命中策略,提高了高頻次服務(wù)訪問(wèn)效率。
e)如緩存數(shù)據(jù)沒(méi)有命中,服務(wù)提供端會(huì)繼續(xù)服務(wù)內(nèi)部的邏輯處理,處理完成后,判定調(diào)用模式,如果是異步服務(wù)回調(diào),會(huì)取出當(dāng)時(shí)存儲(chǔ)的回調(diào)Stub,并請(qǐng)求服務(wù)注冊(cè)中心,查詢到有效的服務(wù)目標(biāo)地址。接著根據(jù)對(duì)應(yīng)的協(xié)議和傳輸器,執(zhí)行數(shù)據(jù)組裝,序列化和發(fā)送操作。
f)服務(wù)調(diào)用端收到響應(yīng)數(shù)據(jù)后,按照對(duì)應(yīng)協(xié)議進(jìn)行數(shù)據(jù)解包和反序列化的操作,保存在當(dāng)前線程級(jí)別的緩存存儲(chǔ)中,再進(jìn)行后續(xù)處理,調(diào)用過(guò)程結(jié)束。
整個(gè)調(diào)用過(guò)程不僅實(shí)現(xiàn)了基本的同步調(diào)用,同時(shí)結(jié)合調(diào)用端的線程級(jí)本地緩存和服務(wù)提供端的分布式緩存機(jī)制,提高調(diào)用效率。此外異步服務(wù)回調(diào)的模式支撐,解決了長(zhǎng)時(shí)間批量處理服務(wù)的回調(diào)難題,最大程度保障服務(wù)的可靠性和穩(wěn)定性。
4)服務(wù)網(wǎng)關(guān)代理:服務(wù)網(wǎng)關(guān)的實(shí)現(xiàn)目的是針對(duì)外部調(diào)用需要采用不同于內(nèi)部服務(wù)調(diào)用的傳輸器,協(xié)議的情況,可以平滑轉(zhuǎn)接處理服務(wù)調(diào)用請(qǐng)求,達(dá)成統(tǒng)一服務(wù)調(diào)通。網(wǎng)關(guān)主要由傳輸器實(shí)現(xiàn),協(xié)議實(shí)現(xiàn),協(xié)議轉(zhuǎn)換,服務(wù)調(diào)用四個(gè)部分組成,參見(jiàn)圖6。以下是網(wǎng)關(guān)處理的完整交互流程:
a)遠(yuǎn)程調(diào)用端發(fā)起服務(wù)調(diào)用請(qǐng)求,通過(guò)WEB SOCKET傳輸器發(fā)送請(qǐng)求數(shù)據(jù)到服務(wù)網(wǎng)關(guān)代理層;
b)服務(wù)網(wǎng)關(guān)代理層使用WEB SOCKET傳輸器收到請(qǐng)求數(shù)據(jù)后,先對(duì)請(qǐng)求數(shù)據(jù)的頭信息進(jìn)行解析,拿到請(qǐng)求的服務(wù)信息后,在本地代理服務(wù)列表進(jìn)行映射查找;
c)確定后臺(tái)服務(wù)名稱和接口后,將目標(biāo)服務(wù)請(qǐng)求地址傳入服務(wù)調(diào)用端程序,然后開(kāi)始執(zhí)行調(diào)用,后續(xù)的服務(wù)調(diào)用交互參照服務(wù)調(diào)用的具體實(shí)施描述過(guò)程;
d)服務(wù)調(diào)用端程序返回結(jié)果后,服務(wù)網(wǎng)關(guān)再次根據(jù)遠(yuǎn)程調(diào)用端使用的協(xié)議組裝響應(yīng)數(shù)據(jù)和對(duì)應(yīng)的WEB SOCKET傳輸器發(fā)送請(qǐng)求響應(yīng)。
從上述實(shí)現(xiàn)來(lái)看,服務(wù)網(wǎng)關(guān)代理層通過(guò)實(shí)現(xiàn)一系列適合遠(yuǎn)端不同渠道請(qǐng)求的傳輸器和協(xié)議轉(zhuǎn)換器,將所有遠(yuǎn)端的請(qǐng)求進(jìn)行靈活映射和轉(zhuǎn)接,使得遠(yuǎn)端服務(wù)調(diào)用端能夠平滑調(diào)用后端服務(wù),降低了服務(wù)實(shí)現(xiàn)和整合復(fù)雜度。
以上述依據(jù)本發(fā)明的理想實(shí)施例為啟示,通過(guò)上述的說(shuō)明內(nèi)容,相關(guān)工作人員完全可以在不偏離本項(xiàng)發(fā)明技術(shù)思想的范圍內(nèi),進(jìn)行多樣的變更以及修改。本項(xiàng)發(fā)明的技術(shù)性范圍并不局限于說(shuō)明書(shū)上的內(nèi)容,必須要根據(jù)權(quán)利要求范圍來(lái)確定其技術(shù)性范圍。