專利名稱:組通信方法與組通信系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式系統(tǒng),尤其涉及分布式系統(tǒng)中的一種組通信方法及對應(yīng)的組通信系統(tǒng)。
背景技術(shù):
分布式系統(tǒng)是由許多通過網(wǎng)絡(luò)連接起來的同構(gòu)或異構(gòu)的計算機(jī)系統(tǒng)組成的系統(tǒng)。在分布式系統(tǒng)中,成員節(jié)點之間通過信息交換來相互協(xié)作共同完成某個特定的功能,這些成員的集合稱為組。組通信是指組中某個成員節(jié)點將消息發(fā)送到組中所有成員節(jié)員的操作。但是簡單的組通信并不能為當(dāng)前的應(yīng)用程序提供滿足質(zhì)量要求的服務(wù)。因此,組通信必須提供一些特殊的消息遞送的質(zhì)量保證,例如可靠性、有序性和自適應(yīng)性等??煽啃允侵附M內(nèi)發(fā)送的每條消息必須能被組中的所有成員節(jié)點接收到;有序性是指消息必須能夠按照某種特定的順序遞送給組中的所有成員節(jié)點,也就是說組中所有成員節(jié)點接收到消息的順序都是一致的;自適應(yīng)性指的是組通信能夠?qū)τ诮M中成員節(jié)點的變化作出自適應(yīng)的改變,且這個過程并不影響組通信的性能。
隨著并行分布式系統(tǒng)的不斷發(fā)展,許多應(yīng)用服務(wù)需要組中有大量的成員節(jié)點相互協(xié)作,且組內(nèi)的成員節(jié)點個數(shù)是動態(tài)變化的,這就對組通信系統(tǒng)提出了挑戰(zhàn),要求組通信系統(tǒng)必須能夠?qū)M中的成員個數(shù)變化做自適應(yīng)的改變。傳統(tǒng)的組通信系統(tǒng)中所有的組成員處于同一層中,在響應(yīng)成員節(jié)點變化時需要將成員節(jié)點變化的消息通知組內(nèi)所有成員節(jié)點,并執(zhí)行一定的失效處理過程。若組的規(guī)模較大,則該過程的開銷將非常巨大。這就是現(xiàn)有的很多組通信系統(tǒng)不支持大規(guī)模分布式系統(tǒng)的主要原因。為了保證組通信中的有序消息遞送,必須使用同步機(jī)制,常用的同步機(jī)制就是使用向量時鐘,然而向量時鐘卻并不適用于組中成員節(jié)點不斷變化的情況。
發(fā)明內(nèi)容
本發(fā)明提供一種組通信方法及系統(tǒng),用以解決現(xiàn)有技術(shù)中由于所有的組成員處于同一層中,成員節(jié)點變化時需要通知組內(nèi)所有成員節(jié)點,當(dāng)組規(guī)模較大時導(dǎo)致通信開銷非常巨大,從而使得組通信系統(tǒng)不能支持大規(guī)模分布式系統(tǒng)的問題。
一種組通信方法,包括將組中的成員節(jié)點分成若干個環(huán)狀本地子組,每個本地子組具有一個子組代表節(jié)點;將子組代表節(jié)點組成一個環(huán)狀全局子組;每一個子組代表節(jié)點接收其所在本地子組的成員節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其它本地子組的子組代表節(jié)點;并接收其它本地子組的子組代表節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其所在本地子組的成員節(jié)點。
一種組通信系統(tǒng),包括多個成員節(jié)點,系統(tǒng)中的多個成員節(jié)點分屬于若干個不同的環(huán)狀本地子組,由每個本地子組確定出一個子組代表節(jié)點組成一個環(huán)狀全局子組;每一個子組代表節(jié)點用于接收其所在本地子組的成員節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其它本地子組的子組代表節(jié)點;并接收其它本地子組的子組代表節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其所在本地子組的成員節(jié)點。
本發(fā)明實施例有益效果如下本發(fā)明將組中的成員節(jié)點分成若干個環(huán)狀本地子組,每個本地子組具有一個子組代表節(jié)點;將子組代表節(jié)點再組成一個環(huán)狀全局子組。這樣,本發(fā)明將現(xiàn)有技術(shù)中都處于同一層的組成員,分成了兩級結(jié)構(gòu),僅由組中的一部分成員組成一個個本地子組,再在若干個本地子組的基礎(chǔ)上,由每一個本地子組的代表節(jié)點再組成一個上一層級的全局子組。在進(jìn)行組通信時,由每一個子組代表節(jié)點接收其所在本地子組的成員節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其它本地子組的子組代表節(jié)點,并接收其它本地子組的子組代表節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其所在本地子組的成員節(jié)點。因此,當(dāng)組內(nèi)成員節(jié)點變化時,只需要通知其所在本地子組的成員節(jié)點,其通信量相對現(xiàn)有技術(shù)大大減少,從而使得組通信系統(tǒng)能夠支持大規(guī)模分布式系統(tǒng)。
圖1為本發(fā)明實施例方法采用的分級結(jié)構(gòu)示意圖;圖2為本發(fā)明實施例子組代表節(jié)點接收本地子組的普通成員節(jié)點發(fā)送的消息,并在獲雙全局令牌后轉(zhuǎn)發(fā)的流程圖;圖3為本發(fā)明實施例子組代表節(jié)點接收全局子組中其它子組代表節(jié)點發(fā)送的消息,并在獲得子組令牌后轉(zhuǎn)發(fā)的流程圖;圖4為本發(fā)明實施例本地子組中的普通成員節(jié)點收到子組代表節(jié)點發(fā)送的消息后的處理流程圖;圖5為本發(fā)明實施例組通信系統(tǒng)中子組代表節(jié)點所包括的功能模塊結(jié)構(gòu)示意圖;圖6為本發(fā)明實施例組通信系統(tǒng)中本地子組中的普通成員節(jié)點所包括的功能模塊結(jié)構(gòu)示意圖。
具體實施例方式
本發(fā)明實施例將組的成員節(jié)點分成若干個環(huán)狀本地子組中,每個本地子組確定出一個子組代表節(jié)點并設(shè)置一個子組令牌;由各子組代表節(jié)點組成一個環(huán)狀全局子組,并設(shè)置一個全局令牌;組成分級結(jié)構(gòu)的組通信系統(tǒng)。每個子組令牌維護(hù)本地消息號,全局令牌維護(hù)全局消息號。
如圖1所示,一個組G被分成了多個子組G0,G1,G2,......,Gk,其中G1,G2,...,Gk是本地子組,G0是全局子組。
每個本地子組都可以包含許多的成員節(jié)點(至少兩個或以上),這些成員節(jié)點通過局域網(wǎng)互聯(lián)成一個環(huán),并產(chǎn)生出一個子組代表節(jié)點,例如通過選舉算法產(chǎn)生。這樣,本地子組中成員節(jié)點分為兩種其中一個節(jié)點為本地子組的子組代表節(jié)點;其余本地子組成員節(jié)點為普通成員節(jié)點。
將每個本地子組中的子組代表節(jié)點通過環(huán)的形式組成一個全局子組G0。因此,在全局子組G0中每個成員在整個組結(jié)構(gòu)內(nèi)將會有兩種角色1、作為本地子組中的成員參與本地子組中子組令牌的傳遞,接收本地子組中的普通成員節(jié)點產(chǎn)生的多播消息,并保證該消息在本地子組中的完整性和有效性,當(dāng)消息檢查無誤時,將該消息緩存到本地第一發(fā)送緩沖區(qū)中。當(dāng)獲得本地子組的子組令牌后,將緩存在本地第二發(fā)送緩沖區(qū)中的消息發(fā)送到本地子組的普通成員節(jié)點。
2、作為全局子組中的成員參與全局子組中全局令牌的傳遞,獲得全局子組的全局令牌后,向全局子組中其他子組代表節(jié)點發(fā)送本地子組中產(chǎn)生的多播消息(從第一發(fā)送緩沖區(qū)中取出待發(fā)送的消息);同時從其他子組代表節(jié)點中接收其他子組產(chǎn)生的組播消息,存儲到本地第二發(fā)送緩沖區(qū)中。
本發(fā)明正是通過子組代表節(jié)點兩種角色的重疊,才能夠?qū)⒉煌谋镜刈咏M連接起來,采用分級結(jié)構(gòu)有效的增大了組的規(guī)模,從而形成分級可擴(kuò)放組。
下面結(jié)合附圖,對本發(fā)明方法加以詳細(xì)描述。
參見圖2,為本發(fā)明實施例子組代表節(jié)點接收本地子組的普通成員節(jié)點發(fā)送的消息,并在獲得全局令牌后轉(zhuǎn)發(fā)的流程圖,包括如下具體步驟步驟S11、本地子組中的普通成員節(jié)點獲得子組令牌后,將子組令牌中的本地消息號添加到需要發(fā)送的消息頭部,發(fā)送消息給所在本地子組的子組代表節(jié)點,且每發(fā)送一條消息,使本地消息號加“1”,在消息發(fā)送完畢或達(dá)到消息發(fā)送的最大值時,產(chǎn)生一新的子組令牌,在新的子組令牌中攜帶當(dāng)前的本地消息號;步驟S12、子組代表節(jié)點將接收的消息緩存到本地第一發(fā)送緩沖區(qū)中;步驟S13、子組代表節(jié)點獲取全局令牌;
步驟S14、子組代表節(jié)點判斷本地第一發(fā)送緩沖區(qū)中是否有待發(fā)送的消息,如果沒有,則轉(zhuǎn)至步驟S17;否則,繼續(xù)下列步驟;步驟S15、從本地第一發(fā)送緩沖區(qū)中取出待發(fā)送的消息,用全局令牌中的全局消息號替換消息中的本地消息號,轉(zhuǎn)發(fā)消息給全局子組中的其它子組代表節(jié)點和本地第二發(fā)送緩沖區(qū)中,且每發(fā)送一條消息,使全局消息號加“1”,直到消息發(fā)送完畢或達(dá)到消息發(fā)送的最大值;在該步驟中,如果其本地第一發(fā)送緩沖區(qū)中存儲有多條待發(fā)送消息,則按照本地消息號從小到大的順序依次發(fā)送;步驟S16、子組代表節(jié)點發(fā)送消息完畢后,產(chǎn)生一個新的全局令牌,攜帶當(dāng)前全局消息號;步驟S17、根據(jù)令牌輪轉(zhuǎn)方式傳遞全局令牌給全局子組中的后繼成員節(jié)點。
當(dāng)子組代表節(jié)點自身有消息需要發(fā)送時,獲取其所在本地子組的子組令牌后,將消息發(fā)送到本地第一發(fā)送緩沖區(qū)中,其余步驟與上述步驟S13~S17相同。
參見圖3,為本發(fā)明實施例子組代表節(jié)點接收全局子組中其它子組代表節(jié)點發(fā)送的消息,并在獲得本地令牌后轉(zhuǎn)發(fā)消息的流程圖,包括如下具體步驟步驟S21、一個子組代表節(jié)點接收到其它子組代表節(jié)點發(fā)送的消息,將按照全局消息號將接收的消息緩存到本地第二發(fā)送緩沖區(qū)中;步驟S22、子組代表節(jié)點獲取到其所在本地子組的子組令牌;步驟S23、子組代表節(jié)點判斷本地第二發(fā)送緩沖區(qū)中是否有待發(fā)送的消息,如果沒有,則轉(zhuǎn)至步驟S26;否則,繼續(xù)下列步驟;步驟S24、從本地第二發(fā)送緩沖區(qū)中取出待發(fā)送的消息,轉(zhuǎn)發(fā)消息給所在本地子組的普通成員節(jié)點;在該步驟中,如果其本地第二發(fā)送緩沖區(qū)中存儲有多條待發(fā)送消息,則按照全局消息號的從小到大的順序依次發(fā)送;步驟S25、子組代表節(jié)點每發(fā)送一條消息,使本地消息號加“1”,直到消息發(fā)送完畢或達(dá)到消息發(fā)送的最大值后,產(chǎn)生一個新的子組令牌,攜帶當(dāng)前本地消息號;步驟S26、根據(jù)令牌輪轉(zhuǎn)方式傳遞子組令牌給本地子組中的后繼成員節(jié)點。
圖4為本發(fā)明實施例本地子組中的普通成員節(jié)點收到子組代表節(jié)點發(fā)送的消息后的處理流程圖,包括如下具體步驟步驟S31、本地子組中的普通成員節(jié)接收到子組代表節(jié)點發(fā)送的消息;步驟S32、判斷全局消息號比接收到的消息的全局消息號小的消息是否已全部接收到;若是,則執(zhí)行步驟S33;否則,執(zhí)行步驟S34;步驟S33、直接將接收到的消息遞送給上層服務(wù);因為組通信服務(wù)為檢查點服務(wù)、消息服務(wù)和事件服務(wù)等服務(wù)提供了全序可靠組通信,因此上層服務(wù)是指檢查點服務(wù)、消息服務(wù)和事件服務(wù)等所有使用組通信來組播消息的服務(wù);步驟S34、將接收到的消息緩存到本地遞送緩沖區(qū)中,并請求重發(fā)未接收到的消息,并按照全局消息號從小到大的順序依次遞送本地緩沖區(qū)中存儲的消息給上層服務(wù)。
對于子組代表節(jié)點,則按照全局消息號從小到大的順序依次遞送本地第二發(fā)送緩沖區(qū)中存儲的消息給上層服務(wù)。
為了實現(xiàn)組中成員節(jié)點變化時的自適應(yīng)調(diào)整,本發(fā)明在本地子組的每一個成員節(jié)點中(包括子組代表節(jié)點)保存“當(dāng)前本地子組成員節(jié)點列表”;當(dāng)本地子組中有新成員節(jié)點加入時,由該新加入的成員節(jié)點向該本地子組中的其它成員節(jié)點發(fā)送“成員加入”消息,接收到“成員加入”消息的成員節(jié)點將要加入到本地子組的成員節(jié)點添加到本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中;當(dāng)本地子組中有成員節(jié)點準(zhǔn)備離開時,由該準(zhǔn)備離開的成員節(jié)點向該本地子組中的其它成員節(jié)點發(fā)送“成員離開”消息,接收到“成員離開”消息的成員節(jié)點將要離開的成員節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
所述新成員節(jié)點加入到所述本地子組后,從所述本地子組的子組代表節(jié)點處獲取所述“當(dāng)前本地子組成員節(jié)點列表”存儲到本地。
而對于“成員失效”消息,由子組代表節(jié)點發(fā)出。子組代表節(jié)點通過“心跳”機(jī)制來檢測本地子組的普通成員節(jié)點是否已失效,具體方法為子組代表節(jié)點按設(shè)定的間隔時長向其所在本地子組的普通成員節(jié)點發(fā)送“心跳”信息;當(dāng)本地子組的普通成員節(jié)點收到“心跳”消息時,返回一個“心跳”確認(rèn)消息。
如果一個或多個普通成員節(jié)點沒有返回“心跳”確認(rèn)信息,則判定該節(jié)點已失效,該子組代表節(jié)點向本地子組中的其它已返回“心跳”確認(rèn)信息的未失效節(jié)點發(fā)送“成員失效”消息,該“成員失效”消息包含未返回“心跳”確認(rèn)消息的本地子組的成員節(jié)點;收到“成員失效”消息的成員節(jié)點和該子組代表節(jié)點將已失效節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
如果本地子組中的普通成員節(jié)點在設(shè)定的間隔時長內(nèi)沒有收到本地子組的子組代表節(jié)點發(fā)送的“心跳”信息,則判定該代表節(jié)點已失效;由該發(fā)現(xiàn)子組代表節(jié)點失效的普通成員節(jié)點啟動選舉算法,確定出本地子組的新的本地子組代表節(jié)點;該本地子組中的各成員節(jié)點將原來的本地子組代表節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
根據(jù)本發(fā)明的上述組通信方法,本發(fā)明提供一種組通信系統(tǒng),其基本分級組結(jié)構(gòu)如圖1所示。其中,子組代表節(jié)點和本地子組中的普通成員節(jié)點設(shè)置有完成對應(yīng)功能的相關(guān)功能模塊,下面結(jié)合圖5和圖6,進(jìn)行詳細(xì)說明。
參見圖5,為本發(fā)明實施例組通信系統(tǒng)中子組代表節(jié)點100所包括的功能模塊結(jié)構(gòu)示意圖,具體包括第一發(fā)送/接收模塊101接收其所在本地子組的普通成員節(jié)點發(fā)送的消息并存儲到本地第一發(fā)送緩沖區(qū)102中;獲取全局令牌,從本地第一發(fā)送緩沖區(qū)102中選擇緩存的本地消息號最小的消息,將該消息中的本地消息號替換成全局消息號后發(fā)送給全局子組中的其它子組代表節(jié)點和第二發(fā)送緩沖區(qū)105中。
第一發(fā)送緩沖區(qū)102存儲第一發(fā)送/接收模塊101接收的消息。
全局令牌產(chǎn)生模塊103當(dāng)?shù)谝话l(fā)送/接收模塊101獲取全局令牌發(fā)送一次消息后,由該全局令牌產(chǎn)生模塊103將全局消息號加1,當(dāng)所有的消息都發(fā)送完畢或者發(fā)送消息的個數(shù)達(dá)到了消息發(fā)送的最大值,則產(chǎn)生一個新的全局令牌,并將其傳遞給全局子組中的后繼成員節(jié)點。
第二發(fā)送/接收模塊104接收全局子組中的其它子組代表節(jié)點發(fā)送的消息,存儲到本地第二發(fā)送緩沖區(qū)105中;獲取其所在本地子組的子組令牌,從本地第二發(fā)送緩沖區(qū)105中選擇全局消息號最小的消息發(fā)送給本地子組中的普通成員節(jié)點。
第二發(fā)送緩沖區(qū)105存儲第一發(fā)送/接收模塊101發(fā)送的消息和第二發(fā)送/接收模塊104接收的消息。
第一子組令牌產(chǎn)生模塊106當(dāng)?shù)诙l(fā)送/接收模塊104獲取子組令牌發(fā)送一次消息后,由該第一子組令牌產(chǎn)生模塊106將本地消息號加1,當(dāng)所有的消息都發(fā)送完畢或者發(fā)送消息的個數(shù)達(dá)到了消息發(fā)送的最大值,則產(chǎn)生一個新的全局令牌,并將其傳遞給本地子組中的后繼成員節(jié)點。
第一消息遞送模塊107按照全局消息號從小到大的順序依次遞送本地第二發(fā)送緩沖區(qū)105中存儲的消息給上層服務(wù)。
第一成員改變執(zhí)行模塊108發(fā)送/接收“成員加入”消息和“成員離開”消息,將要加入到本地子組的成員節(jié)點添加到本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中;或?qū)⒁x開的成員節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
第一存儲模塊109存儲“當(dāng)前本地子組成員節(jié)點列表”,在該“當(dāng)前本地子組成員節(jié)點列表”中記錄當(dāng)前有效的成員節(jié)點信息。
第一失效執(zhí)行模塊110按設(shè)定的間隔時長向其所在本地子組的普通成員節(jié)點發(fā)送“心跳”信息;并接收返回的“心跳”確認(rèn)信息;如果一個或多個普通成員節(jié)點沒有返回“心跳”確認(rèn)信息,向本地子組中的其它已返回“心跳”確認(rèn)信息的未失效節(jié)點發(fā)送“成員失效”消息,該“成員失效”消息包含未返回“心跳”確認(rèn)消息的本地子組的成員節(jié)點,并將已失效節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
圖6為本發(fā)明實施例組通信系統(tǒng)中本地子組中的普通成員節(jié)點200所包括的功能模塊結(jié)構(gòu)示意圖,具體包括消息發(fā)送/接收模塊201獲取本地子組的子組令牌,將所述子組令牌中的本地消息號添加到需要發(fā)送的消息頭部,發(fā)送消息給所在本地子組的子組代表節(jié)點;接收子組代表節(jié)點發(fā)送的消息。
第二子組令牌產(chǎn)生模塊202當(dāng)消息發(fā)送/接收模塊201獲取子組令牌發(fā)送一次消息后,由該第二子組令牌產(chǎn)生模塊202將本地消息號加1,當(dāng)所有的消息都發(fā)送完畢或者發(fā)送消息的個數(shù)達(dá)到了消息發(fā)送的最大值,則產(chǎn)生一個新的全局令牌,并將其傳遞給本地子組中的后繼成員節(jié)點。
本地遞送緩沖區(qū)203,存儲消息發(fā)送/接收模塊201接收的消息。
第二消息遞送模塊204,按照全局消息號從小到大的順序依次遞送本地遞送緩沖區(qū)203中存儲的消息給上層服務(wù)。
第二成員改變執(zhí)行模塊205與子組代表節(jié)點中的第一成員改變執(zhí)行模塊108功能相同,發(fā)送/接收“成員加入”消息和“成員離開”消息,將要加入到本地子組的成員節(jié)點添加到本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中;或?qū)⒁x開的成員節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
第二存儲模塊206與子組代表節(jié)點中的第一存儲模塊109功能相同,存儲“當(dāng)前本地子組成員節(jié)點列表”。
第二失效執(zhí)行模塊207接收子組代表節(jié)點發(fā)送的“心跳”信息,并返回“心跳”確認(rèn)信息;當(dāng)接收到子組代表節(jié)點發(fā)送的“成員失效”消息后,將已失效節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
第三失效執(zhí)行模塊208用于檢測在設(shè)定的間隔時長內(nèi)是否收到本地子組的子組代表節(jié)點發(fā)送的“心跳”信息;當(dāng)在設(shè)定的間隔時長內(nèi)沒有收到“心跳”信息,則啟動選舉算法確定出該本地子組的新的本地子組代表節(jié)點。
由于并行分布式系統(tǒng)需要大量成員通過組通信系統(tǒng)協(xié)作完成某些特定的功能。當(dāng)組中成員個數(shù)不斷增加時,傳統(tǒng)組通信系統(tǒng)將會造成很多不必要的通信開銷,特別是在組中的成員關(guān)系不斷變化時,這種通信開銷將會極大影響組通信的性能。而采用本發(fā)明的上述基于令牌環(huán)的分級組通信方式,支持全序消息遞送和組成員的動態(tài)變化。當(dāng)組成員變化時,僅需要在本地子組中遞送成員改變消息,大大減少了成員改變消息遞送的次數(shù),降低了組成員關(guān)系改變時的通信開銷,增加了通信可靠性;同時,本發(fā)明通過使用令牌環(huán)來管理組,實現(xiàn)了消息的全序遞送。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種組通信方法,其特征在于,包括將組中的成員節(jié)點分成若干個環(huán)狀本地子組,每個本地子組具有一個子組代表節(jié)點;將子組代表節(jié)點組成一個環(huán)狀全局子組;每一個子組代表節(jié)點接收其所在本地子組的成員節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其它本地子組的子組代表節(jié)點;并接收其它本地子組的子組代表節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其所在本地子組的成員節(jié)點。
2.如權(quán)利要求1所述的方法,其特征在于,每個本地子組設(shè)置一個子組令牌,維護(hù)本地消息號;所述全局子組設(shè)置一個全局令牌,維護(hù)全局消息號;當(dāng)所述本地子組中的成員節(jié)點有消息發(fā)送時,獲取其所在本地子組的子組令牌,取得子組令牌中的本地消息號,給待發(fā)送的消息添加本地消息號,并發(fā)送給本地子組的代表節(jié)點;所述子組代表節(jié)點接收到本地子組的成員節(jié)點發(fā)送的消息后,存儲到本地第一發(fā)送緩沖區(qū)中;所述子組代表節(jié)點在獲取所述全局令牌后,取出本地第一發(fā)送緩沖區(qū)中存儲的消息,用全局令牌中的全局消息號替換該消息中的本地消息號,轉(zhuǎn)發(fā)給其它子組的子組代表節(jié)點,并發(fā)送到本地第二發(fā)送緩沖區(qū)中;所述子組代表節(jié)點接收到其它子組的子組代表節(jié)點發(fā)送的消息后,存儲到本地第二發(fā)送緩沖區(qū)中;所述子組代表節(jié)點在獲取其所在本地子組的子組令牌后,將本地第二發(fā)送緩沖區(qū)中存儲的消息轉(zhuǎn)發(fā)給所在本地子組的普通成員節(jié)點。
3.如權(quán)利要求2所述的方法,其特征在于,當(dāng)子組代表節(jié)點自身有消息需要發(fā)送時,獲取其所在本地子組的子組令牌后,將消息發(fā)送到本地第一發(fā)送緩沖區(qū)中。
4.如權(quán)利要求2所述的方法,其特征在于,本地子組的成員節(jié)點每發(fā)送一次消息后,使本地消息號加1,當(dāng)發(fā)送完全部消息或者達(dá)到本次能夠發(fā)送消息的最大值時,產(chǎn)生一個新的本地令牌,攜帶當(dāng)前的本地消息號,發(fā)送給下一個本地子組的成員節(jié)點;全局子組的成員節(jié)點每發(fā)送一次消息后,使全局消息號加1,當(dāng)發(fā)送完本節(jié)點緩存的所有消息或者達(dá)到本次能夠發(fā)送消息的最大值時,產(chǎn)生一個新的全局令牌,攜帶當(dāng)前的全局消息號,發(fā)送給下一個全局子組的成員節(jié)點。
5.如權(quán)利要求4所述的方法,其特征在于,當(dāng)子組代表節(jié)點獲取全局令牌后,如果其本地第一發(fā)送緩沖區(qū)中存儲有多條待發(fā)送消息,則按照本地消息號從低到高的順序依次發(fā)送;當(dāng)子組代表節(jié)點獲取其所在本地子組的子組令牌后,如果其本地第二發(fā)送緩沖區(qū)中存儲有多條待發(fā)送消息,則按照全局消息號從低到高的順序依次發(fā)送。
6.如權(quán)利要求5所述的方法,其特征在于,還包括本地子組的普通成員節(jié)點接收到本地子組代表節(jié)點發(fā)送的消息后,判斷比當(dāng)前接收到的消息的攜帶的全局消息號小的消息是否已全部接收到;若是,則直接將接收到的消息遞送給上層服務(wù);否則,將當(dāng)前接收到的消息緩存到本地遞送緩沖區(qū)中,并請求重發(fā)未收到的消息。
7.如權(quán)利要求6所述的方法,其特征在于,所述本地子組的普通成員節(jié)點按照全局消息號從小到大的順序依次遞送本地遞送緩沖區(qū)中存儲的消息給上層服務(wù);所述子組代表節(jié)點按照全局消息號從小到大的順序依次遞送本地第二發(fā)送緩沖區(qū)中存儲的消息給上層服務(wù)。
8.如權(quán)利要求1-7任意權(quán)項所述的方法,其特征在于,在所述本地子組的每一個成員節(jié)點中保存有“當(dāng)前本地子組成員節(jié)點列表”;當(dāng)本地子組中有新成員節(jié)點加入時,由該新加入的節(jié)點向該本地子組中的其它成員節(jié)點發(fā)送“成員加入”消息,接收到“成員加入”消息的本地成員節(jié)點將要加入到本地子組的成員節(jié)點添加到本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中;當(dāng)本地子組中有成員節(jié)點準(zhǔn)備離開時,由該準(zhǔn)備離開的成員節(jié)點向該本地子組中的其它成員節(jié)點發(fā)送“成員離開”消息,接收到“成員離開”消息的成員節(jié)點將要離開的成員節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
9.如權(quán)利要求8所述的方法,其特征在于,所述新成員節(jié)點加入到所述本地子組后,從所述本地子組的子組代表節(jié)點處獲取所述“當(dāng)前本地子組成員節(jié)點列表”存儲到本地。
10.如權(quán)利要求1-7任意權(quán)項所述的方法,其特征在于,還包括所述子組代表節(jié)點按設(shè)定的間隔時長向其所在本地子組的普通成員節(jié)點發(fā)送“心跳”信息;如果一個或多個普通成員節(jié)點沒有返回“心跳”確認(rèn)信息,則判定該節(jié)點已失效,所述子組代表節(jié)點向本地子組中的其它已返回“心跳”確認(rèn)信息的未失效節(jié)點發(fā)送“成員失效”消息,所述的“成員失效”消息包含未返回“心跳”確認(rèn)消息的本地子組成員的列表;收到“成員失效”消息的成員節(jié)點和該子組代表節(jié)點將已失效的本地子組節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
11.如權(quán)利要求10所述的方法,其特征在于,如果本地子組中的普通成員節(jié)點在設(shè)定的間隔時長內(nèi)沒有收到本地子組的子組代表節(jié)點發(fā)送的“心跳”信息,則判定該代表節(jié)點已失效;啟動代表選舉算法確定出該本地子組的新的本地子組代表節(jié)點;該本地子組中的各成員節(jié)點將原來的本地子組代表節(jié)點從本地存儲的“當(dāng)前本地子組成員節(jié)點列表”中刪除。
12.一種組通信系統(tǒng),包括多個成員節(jié)點,其特征在于,系統(tǒng)中的多個成員節(jié)點分屬于若干個不同的環(huán)狀本地子組,由每個本地子組確定出一個子組代表節(jié)點組成一個環(huán)狀全局子組;每一個子組代表節(jié)點用于接收其所在本地子組的成員節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其它本地子組的子組代表節(jié)點;并接收其它本地子組的子組代表節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其所在本地子組的成員節(jié)點。
13.如權(quán)利要求12所述的組通信系統(tǒng),其特征在于,每一個本地子組中設(shè)置一個子組令牌,維護(hù)本地消息號;所述全局子組中設(shè)置一個全局令牌,維護(hù)全局消息號;所述本地子組的普通成員節(jié)點包括有消息發(fā)送/接收模塊,用于獲取本地子組的子組令牌,將所述子組令牌中的本地消息號添加到待發(fā)送的消息中,發(fā)送消息給所在本地子組的子組代表節(jié)點;并接收子組代表節(jié)點發(fā)送的消息;每一個子組代表節(jié)點包括第一發(fā)送緩沖區(qū)、第二發(fā)送緩沖區(qū)、第一接收/發(fā)送模塊和第二接收/發(fā)送模塊;所述第一接收/發(fā)送模塊用于接收子組代表節(jié)點所在本地子組的普通成員節(jié)點發(fā)送的消息并存儲到本地第一發(fā)送緩沖區(qū)中,并獲取全局令牌,從本地第一發(fā)送緩沖區(qū)中取出緩存的消息,將該消息中的本地消息號替換成全局令牌中的全局消息號后發(fā)送給其它子組的子組代表節(jié)點,并將其存儲到本地第二發(fā)送緩沖區(qū)中;所述第二接收/發(fā)送模塊,用于接收其它子組的子組代表節(jié)點發(fā)送的消息存儲到本地第二發(fā)送緩沖區(qū)中,并獲取其所在本地子組的子組令牌,從本地第二發(fā)送緩沖區(qū)中取出緩存的消息,發(fā)送給本地子組中的普通成員節(jié)點。
14.如權(quán)利要求13所述的組通信系統(tǒng),其特征在于,每一個本地子組成員節(jié)點還包括有子組令牌產(chǎn)生模塊,用于當(dāng)本地子組的成員節(jié)點獲取子組令牌每發(fā)送一次消息后,將本地消息號加1,直到消息被全部發(fā)送完畢或者達(dá)到了發(fā)送消息的最大值時,產(chǎn)生一個攜帶當(dāng)前本地消息號的新的子組令牌,傳遞給本地子組中的后繼成員節(jié)點;每一個全局子組成員節(jié)點包括有全局令牌產(chǎn)生模塊,用于當(dāng)全局子組的成員節(jié)點獲取全局令牌每發(fā)送一次消息后,將全局消息號加1,直到消息被全部發(fā)送完畢或者達(dá)到了發(fā)送消息的最大值時,產(chǎn)生一個攜帶當(dāng)前全局消息號的新的全局令牌,傳遞給全局子組中的后繼成員節(jié)點。
15.如權(quán)利要求14所述的組通信系統(tǒng),其特征在于,本地子組中的普通成員節(jié)點還設(shè)置有本地遞送緩沖區(qū),用于存儲消息發(fā)送/接收模塊接收的由子組代表節(jié)點發(fā)送過來的消息。
16.如權(quán)利要求15所述的組通信系統(tǒng),其特征在于,每一個本地子組中的普通成員節(jié)點還包括消息遞送模塊,用于按照全局消息號從小到大的順序依次遞送本地遞送緩沖區(qū)中存儲的消息給上層服務(wù);所述子組代表節(jié)點還包括消息遞送模塊,用于按照全局消息號從小到大的順序依次遞送本地第二發(fā)送緩沖區(qū)中存儲的消息給上層服務(wù)。
17.如權(quán)利要求12-16任意權(quán)項所述的組通信系統(tǒng),其特征在于,每一個本地子組中的成員節(jié)點還包括有成員改變執(zhí)行模塊和存儲模塊;所述存儲模塊用于存儲當(dāng)前本地子組成員節(jié)點列表;所述成員改變執(zhí)行模塊用于向本地子組中的其它成員節(jié)點發(fā)送成員加入消息或成員離開消息,并接收本地子組中其它成員節(jié)點發(fā)送的成員加入消息或成員離開消息,更新存儲的當(dāng)前本地子組成員節(jié)點列表。
18.如權(quán)利要求17所述的組通信系統(tǒng),其特征在于,所述子組代表節(jié)點還包括第一成員失效執(zhí)行模塊,所述本地子組的普通成員節(jié)點還包括第二失效執(zhí)行模塊;所述子組代表節(jié)點中的第一成員失效執(zhí)行模塊,用于按設(shè)定的間隔時長向其所在本地子組的普通成員節(jié)點發(fā)送心跳信息;并接收返回的心跳確認(rèn)信息;如果一個或多個普通成員節(jié)點沒有返回心跳確認(rèn)信息,則向本地子組中的其它已返回心跳確認(rèn)信息的未失效節(jié)點發(fā)送成員失效消息,在所述成員失效消息中包含未返回心跳確認(rèn)消息的本地子組成員的列表,并將已失效節(jié)點從本地存儲的當(dāng)前本地子組成員節(jié)點列表中刪除;所述本地子組的普通成員節(jié)點中的第二失效執(zhí)行模塊,用于接收子組代表節(jié)點發(fā)送的心跳信息,并返回心跳確認(rèn)信息;當(dāng)接收到子組代表節(jié)點發(fā)送的成員失效消息后,將已失效節(jié)點從本地存儲的當(dāng)前本地子組成員節(jié)點列表中刪除。
19.如權(quán)利要求18所述的組通信系統(tǒng),其特征在于,所述本地子組的普通成員節(jié)點中還包括第三失效執(zhí)行模塊,用于檢測在設(shè)定的間隔時長內(nèi)是否收到本地子組的子組代表節(jié)點發(fā)送的心跳信息;當(dāng)在設(shè)定的間隔時長內(nèi)沒有收到本地子組的代表節(jié)點發(fā)送的心跳信息時,則認(rèn)為所述代表節(jié)點已經(jīng)失效,啟動選舉算法重新選舉出該本地子組的新的本地子組代表節(jié)點。
全文摘要
本發(fā)明公開了一種組通信方法,包括將組中的成員節(jié)點分成若干個環(huán)狀本地子組,每個本地子組具有一個子組代表節(jié)點;將子組代表節(jié)點組成一個環(huán)狀全局子組;每一個子組代表節(jié)點接收其所在本地子組的成員節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其它本地子組的子組代表節(jié)點;并接收其它本地子組的子組代表節(jié)點發(fā)送的消息,轉(zhuǎn)發(fā)給其所在本地子組的成員節(jié)點。本發(fā)明還公開了一種相對應(yīng)的組通信系統(tǒng)。采用本發(fā)明,當(dāng)組成員變化時,僅需要在本地子組中遞送成員改變消息,大大減少了成員改變消息遞送的次數(shù),降低了組成員關(guān)系改變時的通信開銷,從而使得組通信系統(tǒng)能夠支持大規(guī)模分布式系統(tǒng)。
文檔編號H04L12/433GK1949733SQ200610145128
公開日2007年4月18日 申請日期2006年11月13日 優(yōu)先權(quán)日2006年11月13日
發(fā)明者張少林, 吳俊敏 申請人:華為技術(shù)有限公司, 中國科學(xué)技術(shù)大學(xué)