一種去中心化的消息服務(wù)系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種去中心化的消息服務(wù)系統(tǒng)。
【背景技術(shù)】
[0002]在分布式系統(tǒng)中,通常由一至多個(gè)獨(dú)立運(yùn)行的服務(wù)節(jié)點(diǎn)來(lái)構(gòu)成一個(gè)有機(jī)整體來(lái)對(duì)外提供完整的功能服務(wù),從而達(dá)到服務(wù)復(fù)用和系統(tǒng)擴(kuò)展的目的。消息服務(wù)系統(tǒng)在分布式系統(tǒng)中的作用是實(shí)現(xiàn)各服務(wù)節(jié)點(diǎn)的通信、集成和整合的目的。
[0003]目前,消息服務(wù)系統(tǒng)主要采用集中式技術(shù),以下兩種架構(gòu)實(shí)現(xiàn):
第一種集中式消息服務(wù)系統(tǒng)(如圖1所示):消息服務(wù)器作為消息中轉(zhuǎn)站,來(lái)實(shí)現(xiàn)服務(wù)節(jié)點(diǎn)之間的通信。服務(wù)節(jié)點(diǎn)之間不存在通信連接,作為消息生產(chǎn)者的源服務(wù)節(jié)點(diǎn)把消息發(fā)往消息服務(wù)器,由消息服務(wù)器再把消息發(fā)往作為消息消費(fèi)者的目的服務(wù)節(jié)點(diǎn)。采用該架構(gòu)的消息服務(wù)系統(tǒng)嚴(yán)重依賴消息服務(wù)器,消息服務(wù)器的穩(wěn)定性和吞吐量影響整個(gè)消息服務(wù)系統(tǒng),如果消息服務(wù)器存在故障,整個(gè)消息服務(wù)系統(tǒng)都會(huì)癱瘓。
[0004]第二種集中式消息服務(wù)系統(tǒng)(如圖2所示):每個(gè)服務(wù)節(jié)點(diǎn)將其基本信息(包括服務(wù)名稱和服務(wù)地址等)向注冊(cè)服務(wù)器注冊(cè),如果某個(gè)服務(wù)節(jié)點(diǎn)依賴其他服務(wù)時(shí),需要向注冊(cè)服務(wù)器獲取所依賴服務(wù)的基本信息,再與所依賴服務(wù)的服務(wù)節(jié)點(diǎn)建立連接來(lái)進(jìn)行交互。采用該架構(gòu)的消息服務(wù)系統(tǒng)不通過(guò)注冊(cè)服務(wù)器實(shí)現(xiàn)消息中轉(zhuǎn),整個(gè)系統(tǒng)的壓力瓶頸不在于注冊(cè)服務(wù)器,但是,如果注冊(cè)服務(wù)器出現(xiàn)故障,也會(huì)導(dǎo)致整個(gè)消息服務(wù)系統(tǒng)無(wú)法正常工作。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種基于去中心化的架構(gòu)來(lái)實(shí)現(xiàn)消息服務(wù)系統(tǒng),克服了集中式消息服務(wù)系統(tǒng)對(duì)中心節(jié)點(diǎn)的依賴所導(dǎo)致的單點(diǎn)故障和性能瓶頸等問(wèn)題,從而實(shí)現(xiàn)一個(gè)高效和可靠的分布式消息服務(wù)系統(tǒng)。
[0006]本發(fā)明是這樣實(shí)現(xiàn)的:
一種去中心化的消息服務(wù)系統(tǒng),所述消息服務(wù)系統(tǒng)為一集群,所述集群內(nèi)包含復(fù)數(shù)個(gè)服務(wù)節(jié)點(diǎn),各服務(wù)節(jié)點(diǎn)間通過(guò)發(fā)送消息進(jìn)行交互。
[0007]進(jìn)一步地,每個(gè)所述服務(wù)節(jié)點(diǎn)由一集群節(jié)點(diǎn)管理模塊、一消息發(fā)送端模塊、一消息路由模塊、一消息編碼模塊、一消息解碼模塊、一消息分發(fā)模塊以及至少一消息處理器模塊組成;
所述集群節(jié)點(diǎn)管理模塊負(fù)責(zé)跟蹤和維護(hù)集群中所有服務(wù)節(jié)點(diǎn)的基本信息和服務(wù)狀態(tài)信息,其及時(shí)偵測(cè)到集群中服務(wù)節(jié)點(diǎn)的添加、刪除或服務(wù)狀態(tài)改變,并且更新其中緩存的數(shù)據(jù),所述集群節(jié)點(diǎn)管理模塊還為消息路由模塊中消息的發(fā)送對(duì)象提供決策數(shù)據(jù);
所述消息發(fā)送端模塊是服務(wù)節(jié)點(diǎn)內(nèi)部向集群中其他服務(wù)節(jié)點(diǎn)發(fā)送消息的統(tǒng)一的接口端,服務(wù)節(jié)點(diǎn)對(duì)外發(fā)出的消息都是通過(guò)調(diào)用消息發(fā)送端模塊來(lái)發(fā)送的;
所述消息路由模塊:在所述消息發(fā)送模塊接收到消息后,由消息路由模塊決定該消息發(fā)往集群中的一個(gè)或多個(gè)服務(wù)節(jié)點(diǎn),消息路由模塊對(duì)消息路由決策依賴所述集群節(jié)點(diǎn)管理模塊提供的數(shù)據(jù);
所述消息編碼模塊:消息編碼模塊對(duì)待發(fā)送的消息進(jìn)行編程成二進(jìn)制數(shù)據(jù)流,通過(guò)傳輸層模塊進(jìn)行傳輸;
所述傳輸層模塊負(fù)責(zé)與其它服務(wù)節(jié)點(diǎn)的連接建立和維護(hù),以及服務(wù)節(jié)點(diǎn)間數(shù)據(jù)發(fā)送和接收;
所述消息解碼模塊對(duì)傳輸層接收到的二進(jìn)制數(shù)據(jù)流進(jìn)行解碼,得到具體的消息;
所述消息分發(fā)模塊對(duì)接收到的消息進(jìn)行判斷,判斷該消息該發(fā)送至服務(wù)節(jié)點(diǎn)內(nèi)的哪一個(gè)消息處理器模塊進(jìn)行處理;
所述消息處理器模塊負(fù)責(zé)對(duì)接收到的消息進(jìn)行處理,各所述消息處理器模塊處理至少一種類型的消息,所述消息處理器模塊將接收到的消息處理完畢后,調(diào)用所述消息發(fā)送端模塊將處理后得到的結(jié)果發(fā)送出去。
[0008]進(jìn)一步地,所述服務(wù)節(jié)點(diǎn)的基本信息包括:集群ID、節(jié)點(diǎn)ID、服務(wù)名稱和服務(wù)地址;
所述集群ID:同一個(gè)消息服務(wù)系統(tǒng)中的每一個(gè)服務(wù)節(jié)點(diǎn)的集群ID相同,用于標(biāo)識(shí)服務(wù)節(jié)點(diǎn)所屬的集群;
所述節(jié)點(diǎn)ID:用于唯一標(biāo)識(shí)集群中的一個(gè)服務(wù)節(jié)點(diǎn),同一個(gè)消息服務(wù)系統(tǒng)中的每一個(gè)服務(wù)節(jié)點(diǎn)的節(jié)點(diǎn)ID必須唯一;
所述服務(wù)名稱用于標(biāo)識(shí)每個(gè)服務(wù)節(jié)點(diǎn)所能提供的服務(wù);每一種服務(wù)至少由一個(gè)服務(wù)節(jié)點(diǎn)提供;
服務(wù)地址:各服務(wù)節(jié)點(diǎn)的服務(wù)地址是對(duì)集群內(nèi)其他服務(wù)節(jié)點(diǎn)提供的訪問(wèn)方式,各服務(wù)節(jié)點(diǎn)間通過(guò)服務(wù)地址相互通信和交互。
[0009]進(jìn)一步地,任意兩所述服務(wù)節(jié)點(diǎn)之間進(jìn)行消息交互,定義其中一服務(wù)節(jié)點(diǎn)為服務(wù)節(jié)點(diǎn)A,另一服務(wù)節(jié)點(diǎn)為服務(wù)節(jié)點(diǎn)B,其交互過(guò)程如下:
步驟1、服務(wù)節(jié)點(diǎn)A通過(guò)所述消息發(fā)送端模塊將消息發(fā)送出去;
步驟2、服務(wù)節(jié)點(diǎn)A的消息路由模塊根據(jù)消息的屬性和集群節(jié)點(diǎn)管理模塊提供的集群內(nèi)所有服務(wù)節(jié)點(diǎn)的基礎(chǔ)信息和服務(wù)狀態(tài)信息,得出結(jié)論該消息應(yīng)該發(fā)往服務(wù)節(jié)點(diǎn)B ;
步驟3、服務(wù)節(jié)點(diǎn)A的消息編碼模塊將待發(fā)送的消息編碼成二進(jìn)制數(shù)據(jù)流,并且通過(guò)傳輸層模塊發(fā)往服務(wù)節(jié)點(diǎn)B。
[0010]步驟4、服務(wù)節(jié)點(diǎn)B的傳輸層模塊接收到來(lái)自服務(wù)節(jié)點(diǎn)A的二進(jìn)制數(shù)據(jù)流;
步驟5、服務(wù)節(jié)點(diǎn)B的消息解碼模塊將接收到的二進(jìn)制數(shù)據(jù)流解碼成消息對(duì)象;
步驟6、服務(wù)節(jié)點(diǎn)B的消息分發(fā)模塊將接收到的消息根據(jù)消息類型決定將消息發(fā)往與該消息類型相匹配的消息處理器模塊進(jìn)行處理;
步驟7、服務(wù)節(jié)點(diǎn)B的消息處理器模塊將接收到的消息處理完畢之后,將處理后的結(jié)果通過(guò)消息發(fā)送端模塊發(fā)出;
步驟8、服務(wù)節(jié)點(diǎn)B將結(jié)果消息發(fā)往服務(wù)節(jié)點(diǎn)A的過(guò)程與消息從服務(wù)節(jié)點(diǎn)A發(fā)往服務(wù)節(jié)點(diǎn)B的步驟同理。
[0011]進(jìn)一步地,所述消息服務(wù)系統(tǒng)中服務(wù)節(jié)點(diǎn)動(dòng)態(tài)添加,具體步驟如下:
步驟10、新添加的服務(wù)節(jié)點(diǎn)在運(yùn)行后,通過(guò)網(wǎng)絡(luò)發(fā)布一條“添加節(jié)點(diǎn)”的廣播消息,該廣播消息包含新添加的服務(wù)節(jié)點(diǎn)的基本信息,包括:集群ID、節(jié)點(diǎn)ID、服務(wù)名稱和服務(wù)地址; 步驟20、消息服務(wù)系統(tǒng)中已經(jīng)存在的每一個(gè)服務(wù)節(jié)點(diǎn)在收到“添加節(jié)點(diǎn)”的廣播消息后,首先判斷新添加的服務(wù)節(jié)點(diǎn)的集群ID與自身的集群ID是否相同,如果集群ID不同,則不再處理;如果集群ID相同,則將新添加的服務(wù)節(jié)點(diǎn)的基本信息記錄到其集群節(jié)點(diǎn)管理模塊中;
步驟30、消息服務(wù)系統(tǒng)中已經(jīng)存在的每一個(gè)服務(wù)節(jié)點(diǎn)根據(jù)新添加的服務(wù)節(jié)點(diǎn)的服務(wù)地址,主動(dòng)與新添加的服務(wù)節(jié)點(diǎn)建立一條通信連接,并且向新添加的服務(wù)節(jié)點(diǎn)發(fā)送一個(gè)握手消息,將該服務(wù)節(jié)點(diǎn)的基本信息發(fā)送給新添加的服務(wù)節(jié)點(diǎn);
步驟40、新添加的服務(wù)節(jié)點(diǎn)將收到的來(lái)自同一集群的其他服務(wù)節(jié)點(diǎn)的基本信息記錄到其集群節(jié)點(diǎn)管理模塊中,從而完成了動(dòng)態(tài)添加過(guò)程。
[0012]進(jìn)一步地,所消息服務(wù)系統(tǒng)中的每?jī)蓚€(gè)服務(wù)節(jié)點(diǎn)之間都維護(hù)著一個(gè)通信連接,兩個(gè)服務(wù)節(jié)點(diǎn)以固定時(shí)間間隔發(fā)送心跳信息,用以告知對(duì)方各自服務(wù)節(jié)點(diǎn)的服務(wù)狀態(tài),包括:服務(wù)節(jié)點(diǎn)是否存活和壓力負(fù)載。
[0013]進(jìn)一步地,所述消息服務(wù)系統(tǒng)中動(dòng)態(tài)刪除一個(gè)服務(wù)節(jié)點(diǎn)的過(guò)程如下:
步驟100、服務(wù)節(jié)點(diǎn)正常退出,在退出前,該服務(wù)節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)發(fā)布一條“刪除節(jié)點(diǎn)”的廣播消息,該廣播消息包含待刪除的服務(wù)節(jié)點(diǎn)的集群ID和節(jié)點(diǎn)ID ;
步驟200、消息服務(wù)系統(tǒng)中的服務(wù)節(jié)點(diǎn)在收到其他服務(wù)節(jié)點(diǎn)的“刪除節(jié)點(diǎn)”的廣播消息后,通過(guò)該廣播消息的集群ID判斷待刪除的服務(wù)節(jié)點(diǎn)是屬于同一集群后,則將待刪除節(jié)點(diǎn)的基本信息從該服務(wù)節(jié)點(diǎn)的集群節(jié)點(diǎn)管理模塊中刪除,并且斷開(kāi)與待刪除節(jié)點(diǎn)的通信連接,后續(xù)則不再往刪除的服務(wù)節(jié)點(diǎn)發(fā)送消息。
[0014]進(jìn)一步地,所述消息服務(wù)系統(tǒng)中服務(wù)節(jié)點(diǎn)異常退出,其處理過(guò)程如下:當(dāng)一個(gè)通信連接的一方在設(shè)定的時(shí)間間隔內(nèi)沒(méi)有收到來(lái)自對(duì)方的心跳消息時(shí),則認(rèn)為對(duì)方已經(jīng)出現(xiàn)異常不能提供服務(wù),將對(duì)方的基本信息從集群節(jié)點(diǎn)管理模塊中刪除,并且斷開(kāi)與對(duì)方的通信連接,后續(xù)則不再向該異常退出的服務(wù)節(jié)點(diǎn)發(fā)送消息。
[0015]本發(fā)明具有如下優(yōu)點(diǎn):
本發(fā)明基于去中心化的架構(gòu)來(lái)實(shí)現(xiàn)消息服務(wù)系統(tǒng),克服了集中式消息服務(wù)系統(tǒng)對(duì)中心節(jié)點(diǎn)的依賴所導(dǎo)致的單點(diǎn)故障和性能瓶頸等問(wèn)題,從而實(shí)現(xiàn)一個(gè)高效和可靠的分布式消息服務(wù)系統(tǒng)。本消息服務(wù)系統(tǒng)提供集群動(dòng)態(tài)感知功能,能夠在不存在中心節(jié)點(diǎn)的情況下,及時(shí)跟蹤集群內(nèi)服務(wù)節(jié)點(diǎn)的添加、刪除和服務(wù)狀態(tài)變化,從而提供了動(dòng)態(tài)負(fù)載均衡