亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種分布式的消息轉(zhuǎn)發(fā)方法

文檔序號:9581845閱讀:1071來源:國知局
一種分布式的消息轉(zhuǎn)發(fā)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)交互服務(wù)領(lǐng)域,具體地說是一種分布式的消息轉(zhuǎn)發(fā)方法。
【背景技術(shù)】
[0002]消息隊列是一種系統(tǒng)與系統(tǒng)之間的通信方法。系統(tǒng)通過寫和檢索出列隊的數(shù)據(jù)(消息)來通信,而無需專用連接來鏈接它們。通過消息隊列,系統(tǒng)可獨立地執(zhí)行一它們不需要知道彼此的位置、或在繼續(xù)執(zhí)行前不需要等待接收程序接收此消息。
[0003]消息隊列為構(gòu)造以同步或異步方式實現(xiàn)的分布式應(yīng)用提供了松耦合方法。消息隊列的接口調(diào)用被嵌入到新的或現(xiàn)存的應(yīng)用中,通過消息發(fā)送到內(nèi)存或基于磁盤的隊列或從它讀出而提供信息交換。消息隊列可用在應(yīng)用中以執(zhí)行多種功能,比如要求服務(wù)、交換信息或異步處理等。
[0004]現(xiàn)有技術(shù)中存在的分布式消息隊列,如Kafka、MetaQ,滿足了對吞吐量、高并發(fā)任務(wù)處理的需求,但受限于其開發(fā)語言、應(yīng)用場景等,對部分功能的支持并不完善。Kafka采用Scala進(jìn)行開發(fā),整個Scala社區(qū)的發(fā)展比較緩慢,且不支持事務(wù)、消息異步發(fā)送、消息廣播等處理機制。MetaQ采用Java語言在Kafka基礎(chǔ)上進(jìn)行重新開發(fā),擴展了事務(wù)支持、消息異步發(fā)送、消息廣播等機制,但在消息順序性及優(yōu)先級方面沒有較好的解決方案。

【發(fā)明內(nèi)容】

[0005]本發(fā)明的技術(shù)任務(wù)是針對上述現(xiàn)有技術(shù)的不足,提供一種分布式的消息轉(zhuǎn)發(fā)方法。該方法在實現(xiàn)現(xiàn)有技術(shù)相關(guān)產(chǎn)品功能的基礎(chǔ)上,對消息的順序性、優(yōu)先級、高可用、可持久化等方面提供有效的解決方案。
[0006]本發(fā)明的技術(shù)任務(wù)是按以下方式實現(xiàn)的:一種分布式的消息轉(zhuǎn)發(fā)方法,其特點是以分布式管理工具(Zooke印er)實現(xiàn)各轉(zhuǎn)發(fā)服務(wù)器間的配置同步以及狀態(tài)管理,每個轉(zhuǎn)發(fā)服務(wù)器都作為Zookeeper集群中的一個節(jié)點,每個轉(zhuǎn)發(fā)服務(wù)器節(jié)點對其他轉(zhuǎn)發(fā)服務(wù)器的狀態(tài)進(jìn)行監(jiān)控,當(dāng)其他轉(zhuǎn)發(fā)服務(wù)器節(jié)點狀態(tài)發(fā)生變化(新增轉(zhuǎn)發(fā)節(jié)點或者現(xiàn)有轉(zhuǎn)發(fā)節(jié)點崩潰)時,通過負(fù)載均衡算法,對發(fā)生變化的轉(zhuǎn)發(fā)服務(wù)器任務(wù)進(jìn)行重新分配;并且,將分布式消息服務(wù)接口作為Zookeeper集群節(jié)點的一部分,每個接口庫作為Zookeeper集群的一個臨時節(jié)點,接口庫內(nèi)部通過監(jiān)視服務(wù)獲取轉(zhuǎn)發(fā)服務(wù)器地址信息及狀態(tài)信息,以選擇所需的轉(zhuǎn)發(fā)服務(wù)器;所述分布式消息服務(wù)接口包括訂閱端接口和發(fā)布端接口,訂閱端接口用于提交訂閱請求;發(fā)布端接口用于發(fā)布任務(wù)處理數(shù)據(jù)。
[0007]上述方法中,Zooke印er集群對各轉(zhuǎn)發(fā)服務(wù)器信息進(jìn)行統(tǒng)一管理,并進(jìn)行發(fā)布,訂閱端和發(fā)布端節(jié)點可通過訪問轉(zhuǎn)發(fā)服務(wù)器節(jié)點目錄,獲取所有轉(zhuǎn)發(fā)服務(wù)器的地址信息及狀態(tài)信息等。各訂閱端節(jié)點、發(fā)布端節(jié)點通過負(fù)載均衡模式或配置模式選擇可以使用的轉(zhuǎn)發(fā)服務(wù)器進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。
[0008]數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)是實現(xiàn)上述方法的主體模塊,該模塊可以實現(xiàn)的功能包括:獲取服務(wù)轉(zhuǎn)發(fā)地址信息、消息解析、消息分發(fā)(包括訂閱請求的轉(zhuǎn)發(fā)和訂閱數(shù)據(jù)的轉(zhuǎn)發(fā))、相同請求處理、特殊訂閱處理(過濾處理)以及訂閱信息注冊及取消訂閱。
[0009]數(shù)據(jù)轉(zhuǎn)發(fā)任務(wù)到達(dá)某一轉(zhuǎn)發(fā)服務(wù)器后,該轉(zhuǎn)發(fā)服務(wù)器獲取該任務(wù)的哈希碼,根據(jù)哈希碼將該轉(zhuǎn)發(fā)任務(wù)通過系統(tǒng)內(nèi)部高速通道,將其轉(zhuǎn)發(fā)到相應(yīng)的處理服務(wù)器進(jìn)行處理。集群內(nèi)部各轉(zhuǎn)發(fā)服務(wù)器之間優(yōu)選通過socket長連接進(jìn)行通信,保證轉(zhuǎn)發(fā)服務(wù)器間的高速數(shù)據(jù)同步。當(dāng)某一轉(zhuǎn)發(fā)服務(wù)器崩潰時,觸發(fā)系統(tǒng)內(nèi)部的負(fù)載均衡算法,將崩潰轉(zhuǎn)發(fā)服務(wù)器的轉(zhuǎn)發(fā)任務(wù)重新分配給其他轉(zhuǎn)發(fā)服務(wù)器,保證數(shù)據(jù)不丟失及服務(wù)的正常運行。轉(zhuǎn)發(fā)服務(wù)器數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)具體實現(xiàn)流程為:
[0010]一、初始化運行環(huán)境,獲取服務(wù)轉(zhuǎn)發(fā)配置信息,包括服務(wù)類型、服務(wù)提供方地址、采用的通信方式以及服務(wù)自動探測周期,配置信息記錄到服務(wù)轉(zhuǎn)發(fā)表中;
[0011]二、數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)接收消息;
[0012]三、數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)對消息進(jìn)行解析,獲取消息哈希碼,并根據(jù)哈希碼轉(zhuǎn)發(fā)到相應(yīng)的處理服務(wù)器;
[0013]四、數(shù)據(jù)處理服務(wù)器對消息進(jìn)行解析,獲取消息類型以及消息服務(wù)碼,并根據(jù)消息類型及服務(wù)碼進(jìn)行相應(yīng)的處理。
[0014]當(dāng)轉(zhuǎn)發(fā)服務(wù)器對服務(wù)存在內(nèi)存使用限制時,采用序列化技術(shù)對內(nèi)存任務(wù)隊列進(jìn)行優(yōu)化:當(dāng)內(nèi)存中的數(shù)據(jù)量達(dá)到預(yù)設(shè)內(nèi)存大小時,將后續(xù)接收到的消息進(jìn)行序列化處理;當(dāng)內(nèi)存中的任務(wù)處理完畢后者達(dá)到某一規(guī)定的閾值后,將序列化文件中的消息反序列化入內(nèi)存任務(wù)隊列中進(jìn)行處理。序列化格式可采用如下結(jié)構(gòu):
[0015]消息類型(1個字節(jié))+報文頭長度(2個字節(jié))+報文頭內(nèi)容+數(shù)據(jù)塊長度(4個字節(jié))+數(shù)據(jù)塊內(nèi)容+文件名長度(2個字節(jié))+文件名。
[0016]當(dāng)接收到事務(wù)類型轉(zhuǎn)發(fā)任務(wù)時,如果事務(wù)中各子任務(wù)之間沒有順序要求,或者只存在局部順序性要求,則事務(wù)將被拆分為多個小塊任務(wù)進(jìn)行處理,各小塊任務(wù)可能經(jīng)由其他轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)處理;各小塊任務(wù)的處理結(jié)果最終匯集到初始接收任務(wù)轉(zhuǎn)發(fā)服務(wù)器,由該服務(wù)器服務(wù)將各小塊任務(wù)結(jié)果進(jìn)行匯總,并最終反饋給事務(wù)請求提交者。
[0017]相同優(yōu)先級的數(shù)據(jù)轉(zhuǎn)發(fā)任務(wù)按照轉(zhuǎn)發(fā)服務(wù)器接收到的順序進(jìn)行轉(zhuǎn)發(fā),高優(yōu)先級的任務(wù)根據(jù)優(yōu)先等級順序發(fā)送。
[0018]某一訂閱端(或發(fā)布端)發(fā)送到轉(zhuǎn)發(fā)服務(wù)器的多個子任務(wù),如果子任務(wù)之間存在順序要求,則按照順序進(jìn)行轉(zhuǎn)發(fā),某一子任務(wù)失敗,將導(dǎo)致整個任務(wù)的失敗。多個訂閱端(或者發(fā)布端)之間的任務(wù)順序沒有要求。任何一個小塊任務(wù)的失敗將導(dǎo)致整個任務(wù)的失敗。
[0019]數(shù)據(jù)轉(zhuǎn)發(fā)任務(wù)在轉(zhuǎn)發(fā)失敗后,分布式消息隊列將失敗任務(wù)進(jìn)行本地持久化存儲,并在其生命周期內(nèi)進(jìn)行嘗試重發(fā),發(fā)送成功或者生命周期結(jié)束后,再將失效數(shù)據(jù)進(jìn)行清理。
[0020]步驟四中所述基本消息類型包括:請求消息、響應(yīng)消息、取消訂閱消息以及探測消息;
[0021]如果接收到的消息類型是請求消息,并且注冊列表中沒有該類型的請求,或者請求參數(shù)不相同,則根據(jù)服務(wù)轉(zhuǎn)發(fā)表將消息轉(zhuǎn)發(fā)給相應(yīng)的服務(wù)提供方,并將該訂閱信息同步到MASTER服務(wù)器,MASTER觸發(fā)各轉(zhuǎn)發(fā)服務(wù)器之間的訂閱同步功能,將訂閱列表同步;另外,如果已有該類型的請求,但超過某個時間閥值未收到響應(yīng),數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)將重發(fā)該訂閱請求;
[0022]如果是響應(yīng)消息,則根據(jù)服務(wù)碼以及注冊列表將消息返回給相應(yīng)的訂閱者;數(shù)據(jù)回返時根據(jù)注冊列表中的過濾條件選擇回返方式,回返方式可自定義;
[0023]如果是取消訂閱消息,則將該訂閱者從注冊列表中刪除,當(dāng)注冊列表為空時,數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)將向該類型的消息服務(wù)提供方發(fā)送取消訂閱消息;
[0024]如果是探測消息,則提示服務(wù)提供方正常運行,并根據(jù)業(yè)務(wù)需求進(jìn)行相關(guān)處理。
[0025]與現(xiàn)有技術(shù)相比,本發(fā)明的分布式的消息轉(zhuǎn)發(fā)方法具有以下有益效果:
[0026](一 )支持高并發(fā)、大批量數(shù)據(jù)轉(zhuǎn)發(fā)任務(wù),網(wǎng)絡(luò)正常情況下,轉(zhuǎn)發(fā)延遲控制在毫秒級別;
[0027]( 二 )高穩(wěn)定性:各轉(zhuǎn)發(fā)服務(wù)器互為主備,保證在任意一臺轉(zhuǎn)發(fā)服務(wù)器崩潰后,月艮務(wù)能夠正常有效運行。當(dāng)內(nèi)存占用量達(dá)到預(yù)設(shè)閾值時,采用序列化緩存技術(shù)對后續(xù)任務(wù)進(jìn)行序列化處理,避免系統(tǒng)對內(nèi)存的持續(xù)增長性占用,保證服務(wù)的穩(wěn)定運行;
[0028](三)順序性:相同優(yōu)先級情況下,保證轉(zhuǎn)發(fā)任務(wù)按照轉(zhuǎn)發(fā)服務(wù)器的接收順序進(jìn)行轉(zhuǎn)發(fā);高優(yōu)先級的任務(wù)優(yōu)先處理;
[0029](四)高擴展性:分布式消息隊列系統(tǒng)內(nèi)部各轉(zhuǎn)發(fā)服務(wù)器地位相同,可根據(jù)需求任意擴展。提供發(fā)訂閱/發(fā)布標(biāo)準(zhǔn)接口,各服務(wù)能夠按需動態(tài)加載、卸載。
【附圖說明】
[0030]附圖1是本發(fā)明分布式的消息轉(zhuǎn)發(fā)方法的邏輯圖;
[0031]附圖2是實施例一中數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)類圖。
【具體實施方式】
[0032]參照說明書附圖以具體實施例對本發(fā)明的分布式的消息轉(zhuǎn)發(fā)方法作以下詳細(xì)地說明。
[0033]實施例:
[0034]本發(fā)明分布式消息轉(zhuǎn)發(fā)方法的實現(xiàn)包括:分布式消息隊列服務(wù)、分布式消息服務(wù)接口。
[0035](一 )分布式消息隊列服務(wù)
[0036](1)分布式框架
[0037]如附圖1所示,分布式消息隊列借助分布式管理工具Zookeeper實現(xiàn)各轉(zhuǎn)發(fā)服務(wù)器間的配置同步以及狀態(tài)管理,每個轉(zhuǎn)發(fā)服務(wù)器都是Zooke印er集群中的一個節(jié)點(稱為znodeServer),每個轉(zhuǎn)發(fā)服務(wù)器節(jié)點對其他轉(zhuǎn)發(fā)服務(wù)器的狀態(tài)進(jìn)行監(jiān)控,當(dāng)其他轉(zhuǎn)發(fā)服務(wù)器節(jié)點狀態(tài)發(fā)生變化(新增轉(zhuǎn)發(fā)節(jié)點或者現(xiàn)有轉(zhuǎn)發(fā)節(jié)點崩潰)時,觸發(fā)負(fù)載均衡算法,對發(fā)生變化的轉(zhuǎn)發(fā)服務(wù)器任務(wù)進(jìn)行重新分配。
[0038]Zookeeper集群對各轉(zhuǎn)發(fā)服務(wù)器信息進(jìn)行統(tǒng)一管理,并進(jìn)行發(fā)布,訂閱端和發(fā)布端節(jié)點可通過訪問轉(zhuǎn)發(fā)服務(wù)器節(jié)點目錄,獲取所有轉(zhuǎn)發(fā)服務(wù)器的地址信息及狀態(tài)信息等。各訂閱端節(jié)點、發(fā)布端節(jié)點通過負(fù)載均衡算法選擇可以使用的轉(zhuǎn)發(fā)服務(wù)器進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。
[0039](2)數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)
[0040]數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)是消息隊列的主體模塊,該模塊需要實現(xiàn)的功能包括:獲取服務(wù)轉(zhuǎn)發(fā)地址信息、消息解析、消息分發(fā)(包括訂閱請求的轉(zhuǎn)發(fā)和訂閱數(shù)據(jù)的轉(zhuǎn)發(fā))、相同請求處理、特殊訂閱處理(過濾處理)以及訂閱信息注冊及取消訂閱。
[0041 ] 數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)具體實現(xiàn)流程為:
[0042](A)初始化運行環(huán)境,獲取服務(wù)轉(zhuǎn)發(fā)配置信息,包括服務(wù)類型、服務(wù)提供方地址、采用的通信方式以及服務(wù)自動探測周期,配置信息記錄到服務(wù)轉(zhuǎn)發(fā)表中;
[0043](B)數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)接收消息;
[0044](C)數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)對消息進(jìn)行解析,獲取消息哈希碼,并根據(jù)哈希碼轉(zhuǎn)發(fā)到相應(yīng)的處理服務(wù)器。
[0045](D)數(shù)據(jù)處理服務(wù)器對消息進(jìn)行解析,獲取消息類型以及消息服務(wù)碼,并根據(jù)消息類型及服務(wù)碼進(jìn)行相應(yīng)的處理?;鞠㈩愋桶?請求消息、響應(yīng)消息、取消訂閱消息以及探測消息,消息類型可根據(jù)業(yè)務(wù)需要進(jìn)行擴展。如果接收到的消息類型是請求消息,并且注冊列表中沒有該類型的請求,
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1