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