專利名稱:一種在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法
技術領域:
本發(fā)明涉及一種全局有序的應用層組播方法,屬于一種網(wǎng)絡傳輸技術。
背景技術:
應用層組播在網(wǎng)絡的應用層當中構建組播拓撲,將組成員節(jié)點直接自組織成一個邏輯覆蓋網(wǎng)絡,并在應用層提供組播路由協(xié)議來構建和維護該網(wǎng)絡,為數(shù)據(jù)傳輸提供服務。應用層組播屏蔽了底層物理網(wǎng)絡的拓撲細節(jié),兩個主機之間實際的鏈路是底層的單播IP路徑,組播拓撲的構建、維護和組播數(shù)據(jù)的轉發(fā)是由終端主機的應用層完成。對已有路由器功能不用做任何擴充,而且可以利用現(xiàn)有的TCP或UDP傳輸數(shù)據(jù),便于簡單快速的部署與實施。
在多用戶交互式組播的應用當中,存在多個數(shù)據(jù)源向同一個組播組中發(fā)送不同的操作。由于網(wǎng)絡上數(shù)據(jù)鏈路的帶寬和延遲的不同,有可能造成先發(fā)送出去的操作晚到達端系統(tǒng),后產(chǎn)生的操作先到達,而造成了端系統(tǒng)操作邏輯的錯誤?;贗P層組播模型的全局有序性算法主要分為集中式算法和分布式算法。集中式算法由一個中心站點(或稱服務器)給出操作的執(zhí)行順序。其數(shù)據(jù)的發(fā)送有兩種方式一是數(shù)據(jù)源把操作單播發(fā)送給服務器,服務器給每個操作加一個全局序列號后再組播發(fā)給所有組成員;二是數(shù)據(jù)源把操作直接組播給組內所有成員,服務器對它收到的操作用組播發(fā)確認,同時在確認中給出操作的全局序列號。分布式中算法中節(jié)點是對等的。操作首先在本地執(zhí)行,然后把操作和狀態(tài)信息一起發(fā)送給其它所有組節(jié)點。其它組節(jié)點執(zhí)行統(tǒng)一的排序機制,用接收到的狀態(tài)信息,判斷操作的執(zhí)行順序。
采用集中式算法用戶端相應時間長,中心站點容易形成瓶頸和單一故障點,擴展性能差。并且應用層組播采用中間節(jié)點轉發(fā)數(shù)據(jù),由于所經(jīng)中間節(jié)點和節(jié)點跳數(shù)的不同,帶來轉發(fā)延遲的不同,加劇了數(shù)據(jù)錯序的可能性。另外,應用層組播節(jié)點不如IP組播中的路由器穩(wěn)定,中間組播成員的失效或退出,會造成組播拓撲的分裂,這也進一步的影響了數(shù)據(jù)傳輸?shù)挠行蛐浴?br>
發(fā)明內容
本發(fā)明所要解決的技術問題在于針對現(xiàn)有的應用層組播技術,提供一種在應用層組播上實現(xiàn)全局有序傳輸?shù)姆椒?,該方法考慮到應用層組播延遲大,中間節(jié)點不穩(wěn)定,針對這種情況,提出了一種應用層全局有序的方法,使所有節(jié)點的數(shù)據(jù)保持一致,并且能夠適應應用層節(jié)點的動態(tài)變化。
為此,本發(fā)明提供了一種在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法,包括如下步驟步驟1、新成員加入組播組,從父節(jié)點復制狀態(tài)向量表和緩沖區(qū)內容到本地;步驟2、組播源產(chǎn)生新操作,若狀態(tài)向量表中不包含自己,則將自己加入狀態(tài)向量表中;然后將狀態(tài)向量表中自己所對應的值加一,將發(fā)送狀態(tài)向量表和操作內容組播到網(wǎng)絡;步驟3、接收者將接收到的狀態(tài)向量表整理成本地形式;步驟4、接收者按先后順序將所述狀態(tài)向量表和操作內容插入緩沖區(qū);步驟5、接收者檢查插入位置是否在執(zhí)行位置之前,是則執(zhí)行步驟6;否則執(zhí)行步驟7;步驟6、接收者向前移動執(zhí)行位置指針,撤銷所述指針指向的操作,將本地狀態(tài)向量表中相應操作源的對應向量值減一。繼續(xù)執(zhí)行步驟5;步驟7、接收者檢查執(zhí)行位置指針指向的操作是否滿足因果關系,是則執(zhí)行步驟8;否則結束;步驟8、接收者執(zhí)行所述指針指向的操作,向后移動指針,將本地狀態(tài)向量表中相應操作源的對應向量值加一。繼續(xù)執(zhí)行步驟7;所述步驟3中將接收到的狀態(tài)向量表整理成本地形式,具體步驟為步驟3.1、接收者檢查本地狀態(tài)向量表是否包含該操作源,是則執(zhí)行步驟23;否則,執(zhí)行步驟22;步驟3.2、接收者將該操作源及其初始化值加入本地狀態(tài)向量表和本地緩沖區(qū)中的狀態(tài)向量表當中;步驟3.3、接收者檢查本地狀態(tài)向量表含有而收到的狀態(tài)向量表不含有的數(shù)據(jù)源,將這些數(shù)據(jù)源及其初始化值加入到收到的狀態(tài)向量表當中。
所述步驟1中新成員具體為新加入該組播組的成員,或為從錯誤狀態(tài)中恢復了的原有的組播組成員。
所述步驟4中狀態(tài)向量表的先后順序具體為對向量的所有維度求算術和,其值小者為先;在算術和相同的情況下,比較第一個不同的維度值,其值小者為先。
所述步驟7中因果關系具體為所述狀態(tài)向量表是本地狀態(tài)向量表記錄的相應操作源的下一個操作,且所述狀態(tài)向量表中記錄的其它操作,在本地都已經(jīng)完成。
本發(fā)明通過在應用層組播之上實現(xiàn)的一種全局有序方法,使得應用層組播在沒有中心服務器支持的情況下,也能夠實現(xiàn)全局有序的傳輸。同時,減少了應用層組播中成員節(jié)點頻繁加入與退出對組播有序性傳輸所造成的影響。
下面通過附圖和實施例,對本發(fā)明的技術方案做進一步的詳細描述。
圖1為本發(fā)明第一實施例的流程圖;圖2為本發(fā)明第一實施例中步驟3的具體流程圖;
具體實施例方式
下面首先介紹一下本發(fā)明所涉及的相關術語。
狀態(tài)向量表在分布式算法中,用不同組播源和其操作序號值構成的向量來表示操作發(fā)生的邏輯時刻,該向量叫做狀態(tài)向量表。如表1所示。其中組播源每發(fā)送一個操作或接收者接收到一個操作源發(fā)出的操作,其所對應的向量值加一。狀態(tài)向量表用于比較不同數(shù)據(jù)源之間發(fā)出操作的先后順序。
表1
因果關系先發(fā)生的事件為因,后發(fā)生的為果。假設同一個組播節(jié)點中有兩個操作甲和乙,甲在乙之前發(fā)生,則甲是乙的因,乙是甲的果,甲和乙之間存在因果關系;如果甲是某一個組播節(jié)點發(fā)送的操作,并且另一個組播節(jié)點接收操作甲后產(chǎn)生了操作乙,甲和乙之間存在因果關系;因果關系存在傳遞性,即若甲乙之間是因果關系,乙丙之間是因果關系,則甲丙之間也是因果關系。
執(zhí)行位置指針在緩沖區(qū)中的操作,可能因不滿足因果關系而需要排隊等待。所以用一個執(zhí)行位置指針指向緩沖區(qū)中排隊等候的第一個未執(zhí)行的操作。
實施例1圖1為本發(fā)明第一實施例的流程圖。如圖1所示,本發(fā)明包括如下步驟步驟1、新成員加入組播組,從父節(jié)點復制狀態(tài)向量表和緩沖區(qū)內容到本地;步驟2、組播源產(chǎn)生新操作,若狀態(tài)向量表中不包含自己,則將自己加入狀態(tài)向量表中;然后將狀態(tài)向量表中自己所對應的值加一,將發(fā)送狀態(tài)向量表和操作內容組播到網(wǎng)絡;步驟3、接收者將接收到的狀態(tài)向量表整理成本地形式;
步驟4、接收者按先后順序將所述狀態(tài)向量表和操作內容插入緩沖區(qū);步驟5、接收者檢查插入位置是否在執(zhí)行位置之前,是則執(zhí)行步驟6;否則執(zhí)行步驟7;步驟6、接收者向前移動執(zhí)行位置指針,撤銷所述指針指向的操作,將本地狀態(tài)向量表中相應操作源的對應向量值減一。繼續(xù)執(zhí)行步驟5;步驟7、接收者檢查執(zhí)行位置指針指向的操作是否滿足因果關系,是則執(zhí)行步驟8;否則結束;步驟8、接收者執(zhí)行所述指針指向的操作,向后移動指針,將本地狀態(tài)向量表中相應操作源的對應向量值加一。繼續(xù)執(zhí)行步驟7;實施例2圖2為本發(fā)明第一實施例中步驟3的具體流程圖。本實施例與實施例1的區(qū)別僅在于,將實施例1中的步驟3具體細化,其余步驟同實施例1。如圖2所示,步驟1具體為步驟3.1、接收者檢查本地狀態(tài)向量表是否包含該操作源,是則執(zhí)行步驟23;否則,執(zhí)行步驟22;步驟3.2、接收者將該操作源及其初始化值加入本地狀態(tài)向量表和本地緩沖區(qū)中的狀態(tài)向量表當中;步驟3.3、接收者檢查本地狀態(tài)向量表含有而收到的狀態(tài)向量表不含有的數(shù)據(jù)源,將這些數(shù)據(jù)源及其初始化值加入到收到的狀態(tài)向量表當中。
實施例3本實施例與實施例1的區(qū)別僅在于步驟4中狀態(tài)向量表的先后順序具體為對向量的所有維度求算術和,其值小者為先;在算術和相同的情況下,比較第一個不同的維度值,其值小者為先。
具體操作如下假設有以下三個狀態(tài)向量,其中狀態(tài)一如表2所示,狀態(tài)二如表3所示,狀態(tài)三如表4所示。
表2 表3表4
其中狀態(tài)一所有維度的算術和為9,狀態(tài)二和狀態(tài)三的所有維度的算術和均為8,所以狀態(tài)二和狀態(tài)三都先于狀態(tài)一。而狀態(tài)一和狀態(tài)二的第一個維度值均為3,狀態(tài)二的第二個維度值為3,小于狀態(tài)三的第二個維度值4,所以狀態(tài)二要先于狀態(tài)三。經(jīng)過以上步驟判斷,即可確定上述向量的先后順序為狀態(tài)二,狀態(tài)三,狀態(tài)一。
實施例4本實施例與實施例1的區(qū)別僅在于步驟4中因果關系具體為所述狀態(tài)向量表是本地狀態(tài)向量表記錄的相應操作源的下一個操作,且所述狀態(tài)向量表中記錄的其它操作,在本地都已經(jīng)完成。
具體操作如下假設有以下的本地狀態(tài)向量表,如表5所示,和接收到的組播源2的一個狀態(tài)向量表,如表6所示。
表5 表6
因為本地狀態(tài)向量表記錄的組播源2的操作值為4,所以組播源2的下一個操作值為5,接收到的狀態(tài)向量滿足該條件,且接收到的狀態(tài)向量中組播源1和組播源3的操作值均不大于本地狀態(tài)向量表,所以該狀態(tài)向量表滿足因果條件。
實施例5本實施例與實施例1的區(qū)別僅在于步驟1中的新成員來自于新加入該組播組的成員,或為從錯誤狀態(tài)中恢復了的原有的組播組成員。
最后所應說明的是,以上實施例僅用以說明本發(fā)明的技術方案而非限制,盡管參照較佳實施例對本發(fā)明進行了詳細說明,本領域的普通技術人員應當理解,可以對本發(fā)明的技術方案進行修改或者等同替換,而不脫離本發(fā)明技術方案的精神和范圍。
權利要求
1.一種在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法,其特征在于包括如下步驟步驟1、新成員加入組播組,從父節(jié)點復制狀態(tài)向量表和緩沖區(qū)內容到本地;步驟2、組播源產(chǎn)生新操作,若狀態(tài)向量表中不包含自己,則將自己加入狀態(tài)向量表中;然后將狀態(tài)向量表中自己所對應的值加一,將發(fā)送狀態(tài)向量表和操作內容組播到網(wǎng)絡;步驟3、接收者將接收到的狀態(tài)向量表整理成本地形式;步驟4、接收者按先后順序將所述狀態(tài)向量表和操作內容插入緩沖區(qū);步驟5、接收者檢查插入位置是否在執(zhí)行位置之前,是則執(zhí)行步驟6;否則執(zhí)行步驟7;步驟6、接收者向前移動執(zhí)行位置指針,撤銷所述指針指向的操作,將本地狀態(tài)向量表中相應操作源的對應向量值減一。繼續(xù)執(zhí)行步驟5;步驟7、接收者檢查執(zhí)行位置指針指向的操作是否滿足因果關系,是則執(zhí)行步驟8;否則結束;步驟8、接收者執(zhí)行所述指針指向的操作,向后移動指針,將本地狀態(tài)向量表中相應操作源的對應向量值加一。繼續(xù)執(zhí)行步驟7。
2.根據(jù)權利要求1所述的在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法,其特征在于所述步驟3中將接收到的狀態(tài)向量表整理成本地形式,具體步驟為步驟3.1、接收者檢查本地狀態(tài)向量表是否包含該操作源,是則執(zhí)行步驟23;否則,執(zhí)行步驟22;步驟3.2、接收者將該操作源及其初始化值加入本地狀態(tài)向量表和本地緩沖區(qū)中的狀態(tài)向量表當中;步驟3.3、接收者檢查本地狀態(tài)向量表含有而收到的狀態(tài)向量表不含有的數(shù)據(jù)源,將這些數(shù)據(jù)源及其初始化值加入到收到的狀態(tài)向量表當中。
3.根據(jù)權利要求1所述的在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法,其特征在于所述步驟1中新成員具體為新加入該組播組的成員,或為從錯誤狀態(tài)中恢復了的原有的組播組成員。
4.根據(jù)權利要求1所述的在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法,其特征在于所述步驟4中狀態(tài)向量表的先后順序具體為對向量的所有維度求算術和,其值小者為先;在算術和相同的情況下,比較第一個不同的維度值,其值小者為先。
5.根據(jù)權利要求1所述的在網(wǎng)絡應用層中實現(xiàn)全局有序組播的方法,其特征在于所述步驟7中因果關系具體為所述狀態(tài)向量表是本地狀態(tài)向量表記錄的相應操作源的下一個操作,且所述狀態(tài)向量表中記錄的其它操作,在本地都已經(jīng)完成。
全文摘要
本發(fā)明涉及一種全局有序的應用層組播方法,包括新成員加入組播組,建立自己的狀態(tài)向量表;組播源產(chǎn)生操作,將本地狀態(tài)向量表和操作內容組播到網(wǎng)絡;接收者整理接收到的狀態(tài)向量表;按先后順序將所述狀態(tài)向量表和操作內容插入緩沖區(qū);接收者檢查插入位置是否在執(zhí)行位置之前,是則將操作回退到插入位置;否則接收者判斷是否能執(zhí)行后續(xù)的操作,是則執(zhí)行;否則接收者清除部分緩沖區(qū)。本發(fā)明通過在應用層組播之上實現(xiàn)的一種全局有序方法,使得應用層組播在沒有中心服務器支持的情況下,也能夠實現(xiàn)全局有序的傳輸。
文檔編號H04L12/54GK101035056SQ20071006331
公開日2007年9月12日 申請日期2007年1月9日 優(yōu)先權日2007年1月9日
發(fā)明者陸慧梅, 高建敏, 單永珍, 胡虹雨, 石琳, 閆永航 申請人:北京理工大學