国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

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

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

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