組通信概述我們僅從應用角度大致介紹下jgroups和spread,因爲這是目前使用較多的兩個組件,而且他們也代表了兩種不同的應用實現.有關其技術設計我們在後面會陸續的重點介紹.
spread以daemon程序(C實現)運行,應用程序通過spread提供的接口函數(spread提供有c,java,perl等)來實現組通信和組維護,當然,如果你已經深入瞭解了spread源碼,你也可以自己封裝消息與spread dameon通信來實現一套調用函數.
jgroups(java實現)則提供了一個jar包,應用程序相當於通過集成源代碼來實現組通信和組維護.當然,其實我們也可以基於jgroups封裝一層,形成類似於spread的daemon程序,這樣,C應用程序也就可以使用它了.
說到這,我們先來看下組通信應用情況有哪些?一般概括有如下幾種情況:
一臺機器上一個應用程序一個組.
一臺機器上一個應用程序多個組,組遵循統一實現流程.
一臺機器上一個應用程序多個組,每個組的實現流程不同.
一臺機器上一個應用程序多個組,幾個組爲單位而其實現流程不同.
一臺機器上多個應用程序一個組.
一臺機器上多個應用程序多個組,各應用程序遵循統一的組的實現流程.
一臺機器上多個應用程序多個組,各應用程序的組的實現流程不同.
一臺機器上多個應用程序多個組,幾個應用程序爲單位而其實現流程不同.
對於一臺機器多個應用程序情況,我們認爲:底層的物理連接或組播地址等應該是可以共享的.對spread而言,每臺機器只有一個spread daemon,這是天然特性.對jgroup而言,以前版本不能做到這點,但最新版本通過設置TP層協議是支持的.
對於一臺機器一個應用程序情況,我們認爲:還要做到在儘量高的層次上資源共享.如Jgroup可基於同一Jchannel支持多個組(虛擬組概念). 而spread則通過每個連接到spread daemon,該連接亦可加入多個不同組.
對於消息發送,spread和jgroups大致相同.
對於消息接收,spread將接收消息放入到某一隊列,然後由接口接收函數阻塞讀取.jgroups前期版本也是如此實現,後期的組播和RPC調用則是函數觸發機制.
組通信內容又有哪些?
概括說,包括兩大模塊:組管理模塊,組消息通信模塊.
每一模塊又包含很多具體的內容.比如組管理模塊,包括成員加組,成員退組,成員錯誤,主的推選等等;組消息通信模塊包括組內部消息傳遞,用戶消息傳遞,以及其上封裝的RPC調用等等.
下面將具體介紹spread,jgroups相關知識.