專利名稱:一種基于距離的狀態(tài)同步方法
技術領域:
本發(fā)明涉及一種分布式系統(tǒng),尤其涉及一種分布式系統(tǒng)中狀態(tài)同步消息的分發(fā)方法。
背景技術:
在一類基于對等系統(tǒng)的0跳Uero Hop)分布式系統(tǒng)中,每個節(jié)點需要知道整個集 群中所有節(jié)點的狀態(tài),一般采用以下步驟1.當一個節(jié)點加入集群時,發(fā)送一個多播(multicast)或者廣播(broadcast)消息;2.集群中所有節(jié)點接受并更新自己的成員視圖;3.選擇一個種子節(jié)點,并請求該種子節(jié)點將其成員視圖傳遞給新加入的節(jié)點;4.每個節(jié)點對所有其他節(jié)點維持心跳(heartbeat),相互交換成員視圖,如果判斷某節(jié) 點死亡,則將其從成員視圖中刪除。
這種簡單的做法可以實現(xiàn)少量節(jié)點間的狀態(tài)同步,但是當集群中節(jié)點數(shù)目達到幾 百甚至更多,每個節(jié)點都需要維護大量的心跳(heartbeat)連接,定時發(fā)送大量的心跳消 息。整個集群中心跳消息數(shù)量在0(ιΓ2)級別,網(wǎng)絡開銷巨大,幾乎沒有可行性。如果節(jié)點 間采用Gossip協(xié)議進行,定時隨機選擇若干節(jié)點進行通信,發(fā)送心跳消息,交換并更新各 自維護的節(jié)點的狀態(tài)信息;經(jīng)過一定的時間后,最終集群中所有節(jié)點都有最新一致的節(jié)點 狀態(tài)信息。這種方法保證了各節(jié)點之間數(shù)據(jù)的最終一致性,而且占用很少的網(wǎng)絡帶寬。
Gossip是一種分布式協(xié)議,通過Gossip協(xié)議分發(fā)節(jié)點狀態(tài)消息來進行分布式 系統(tǒng)中節(jié)點之間的狀態(tài)同步,是構造對等系統(tǒng)或重疊網(wǎng)絡等拓撲形式的分布式系統(tǒng)時 經(jīng)常采用的方法。Gossip協(xié)議在實踐中已被證明特別適合在節(jié)點規(guī)模較大的分布式系 統(tǒng)中使用,進行消息分發(fā)及狀態(tài)交換,以達到節(jié)點狀態(tài)及數(shù)據(jù)的最終一致性(Eventual Consistency),從而達到系統(tǒng)節(jié)點間狀態(tài)同步的目的。
一般的Gossip協(xié)議實現(xiàn),一個節(jié)點在選取若干節(jié)點并向其發(fā)送同步消息時,通常 是從其所維護的一個節(jié)點列表中隨機地選取一些節(jié)點,發(fā)送狀態(tài)同步消息,進行狀態(tài)同步。
但是這種Gossip協(xié)議實現(xiàn)隨機選擇節(jié)點通信的方法,并沒有考慮到集群的拓撲 結構,如同一機架和不同機架,同一數(shù)據(jù)中心和不同數(shù)據(jù)中心等。圖2為一種數(shù)據(jù)中心的拓 撲結構示意圖,如圖2所示,每個數(shù)據(jù)中心包括若干個集群203,每個集群203包含若干個 服務器機架202,每個服務器機架202還包含若干個服務器節(jié)點201。在這種集群拓撲結構 中,一般采用交換機互聯(lián)構建網(wǎng)絡結構。不同服務器機架的兩個節(jié)點間的帶寬一般比同機 架內的兩個節(jié)點的帶寬緊張,跨數(shù)據(jù)中心的兩個節(jié)點間的帶寬就更緊張了,而且隨著節(jié)點 間所跨交換機和邏輯距離越來越遠,消息傳遞需要的時間也可能越長,使得系統(tǒng)消息同步 收斂的速度很慢,效率較低。發(fā)明內容
為了解決現(xiàn)有實現(xiàn)中存在的不足,本發(fā)明的目的在于提供一種基于距離的狀態(tài)同步消息分發(fā)方法,在分布式系統(tǒng)的各個節(jié)點之間進行消息交換,提高系統(tǒng)節(jié)點狀態(tài)一致性 的收斂速度。
為實現(xiàn)上述目的,本發(fā)明提供了一種基于距離的狀態(tài)同步方法,該方法包括以下 步驟1)構建網(wǎng)絡或集群中某一節(jié)點的種子節(jié)點,并維護活節(jié)點列表和死節(jié)點列表;2)在活節(jié)點列表中,根據(jù)各節(jié)點在網(wǎng)絡中的拓撲位置,賦予各節(jié)點不同的距離參數(shù),并 以與距離的平方成反比的概率,選擇不同距離的節(jié)點,發(fā)送同步消息;3)隨機向不可達節(jié)點發(fā)送同步消息;4)被選擇的節(jié)點不包含種子節(jié)點,則隨機向一個種子節(jié)點發(fā)送同步消息;5)如活節(jié)點列表中的節(jié)點數(shù)少于種子節(jié)點數(shù),隨機向一個種子節(jié)點發(fā)送同步消息。
其中,所述步驟1)構建網(wǎng)絡或集群中某一節(jié)點的種子節(jié)點是將所述網(wǎng)絡或集群中 所有節(jié)點的種子節(jié)點構建成二叉樹的形式。
其中,所述步驟2)中根據(jù)在網(wǎng)絡中的拓撲位置,賦予節(jié)點不同的距離參數(shù)的步驟 進一步包括判斷節(jié)點所處的機架位置和數(shù)據(jù)中心的位置;根據(jù)位置賦予節(jié)點距離參數(shù)。
其中,所述判斷節(jié)點所處的機架位置和數(shù)據(jù)中心的位置包括根據(jù)系統(tǒng)配置判斷、 根據(jù)網(wǎng)絡規(guī)劃時設定的IP地址規(guī)則判斷或根據(jù)動態(tài)統(tǒng)計判斷。
其中,所述根據(jù)位置賦予節(jié)點距離參數(shù)是依據(jù)網(wǎng)絡拓撲的具體形式賦值,同機架 的節(jié)點距離參數(shù)為1,不同機架但相同數(shù)據(jù)中心的節(jié)點距離參數(shù)為2,不同數(shù)據(jù)中心的節(jié)點 距離參數(shù)為3。
本發(fā)明通過考慮節(jié)點在分布式系統(tǒng)網(wǎng)絡中的拓撲位置(如機架、數(shù)據(jù)中心等)信 息,賦予節(jié)點間距離參數(shù),并以與距離的平方成反比的概率,選取不同距離的節(jié)點,發(fā)送同 步消息,進行狀態(tài)同步。這種基于距離的Gossip消息分發(fā)同步狀態(tài)數(shù)據(jù)的機制,能夠加快 系統(tǒng)狀態(tài)一致性的收斂速度,提高通訊效率,降低網(wǎng)絡帶寬和系統(tǒng)負荷的開銷。
本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變 得顯而易見,或者通過實施本發(fā)明而了解。
附圖用來提供對本發(fā)明的進一步理解,并且構成說明書的一部分,并與本發(fā)明的 實施例一起,用于解釋本發(fā)明,并不構成對本發(fā)明的限制。在附圖中圖1為根據(jù)本發(fā)明的基于距離的狀態(tài)同步方法流程圖; 圖2為一種數(shù)據(jù)中心的拓撲結構示意圖; 圖3為根據(jù)本發(fā)明構建的種子節(jié)點關系示意圖。
具體實施方式
以下結合附圖對本發(fā)明的優(yōu)選實施例進行說明,應當理解,此處所描述的優(yōu)選實 施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明的核心內容主要是在使用Gossip協(xié)議進行同步時,需要根據(jù)距離來選擇 同步節(jié)點。
基于距離選擇同步節(jié)點的規(guī)則是系統(tǒng)或集群中的某節(jié)點,對處于不同網(wǎng)絡位置4的其他節(jié)點,賦予不同的距離參數(shù),節(jié)點被選擇的概率與節(jié)點距離參數(shù)的平方成反比。
圖1為根據(jù)本發(fā)明的基于距離的狀態(tài)同步方法流程圖,下面將參考圖1,對本發(fā)明 的基于距離的狀態(tài)同步方法進行詳細描述首先,在步驟101,在使用Gossip協(xié)議構建對等系統(tǒng)或重疊網(wǎng)絡時,一個節(jié)點新加入 到集群中時,向一個或多個節(jié)點發(fā)送第一次消息同步,我們稱這些節(jié)點為種子節(jié)點(Seed Node),同時,每個節(jié)點維護兩個節(jié)點列表一個是當前活節(jié)點列表即可達節(jié)點列表,另外一 個是當前死節(jié)點列表即不可達節(jié)點列表。
圖3為根據(jù)本發(fā)明構建的種子節(jié)點關系示意圖,如圖3所示,我們可以把種子節(jié)點 的關系構建成一棵二叉樹的形式,每個父節(jié)點是其子節(jié)點的種子節(jié)點,節(jié)點A是節(jié)點B和C 的種子節(jié)點,節(jié)點B是節(jié)點D和E的種子節(jié)點。每個節(jié)點在配置種子節(jié)點時,除了按照二叉 樹的形式來指定種子節(jié)點外,還可以指定其他的種子節(jié)點。
在步驟102,系統(tǒng)或集群中的某節(jié)點,對處于不同網(wǎng)絡位置的可達列表中的節(jié)點, 賦予不同的節(jié)點距離參數(shù),例如可以設同機架的節(jié)點距離參數(shù)為1,不同機架但相同數(shù)據(jù)中 心的節(jié)點距離參數(shù)為2,不同數(shù)據(jù)中心的節(jié)點距離參數(shù)為3等。判斷節(jié)點是否處于同一機 架,或同一個數(shù)據(jù)中心,或不同數(shù)據(jù)中心的方法有多種,例如,可以根據(jù)系統(tǒng)配置判斷,也可 以根據(jù)網(wǎng)絡規(guī)劃時設定的IP地址規(guī)則判斷,還可以根據(jù)動態(tài)統(tǒng)計判斷等等。節(jié)點間的距離 參數(shù),也可以依據(jù)對網(wǎng)絡拓撲的具體情形,靈活地賦值,其原則是距離越遠,距離參數(shù)越大。
在步驟103,在當前活節(jié)點列表(可達節(jié)點列表)中根據(jù)節(jié)點被選擇的概率與節(jié)點距離 參數(shù)的平方成反比的規(guī)則,選擇發(fā)送同步消息的目標節(jié)點,并進行狀態(tài)同步,同機架的節(jié)點 被選擇的概率最高,不同數(shù)據(jù)中心的節(jié)點被選擇的概率最低,優(yōu)先讓同機架的節(jié)點之間進 行同步。實際計算時,不同距離的節(jié)點數(shù),可以進行相應的化整處理,例如小于1的節(jié)點數(shù), 視為為1等。
在步驟104,隨機向一些不可達的節(jié)點發(fā)送同步消息,嘗試進行消息同步。在分布 式環(huán)境下,由于網(wǎng)絡變的不可靠,可能出現(xiàn)節(jié)點短暫的不可達,該步驟的目的是為了盡早發(fā) 現(xiàn)不可達的節(jié)點重新可達。
在步驟105,判斷步驟103所選擇的節(jié)點是否為種子節(jié)點,如果是種子節(jié)點,轉到 步驟107處理;如果不是種子節(jié)點,則轉到下一步驟。
在步驟106,隨機向一個種子節(jié)點發(fā)送同步消息,進行同步。在步驟102中所選擇 的節(jié)點可能不包含種子節(jié)點,在這種情況下,則以一定的概率隨機向一個種子節(jié)點發(fā)送同 步消息,并進行同步。因為種子節(jié)點總有比較多的節(jié)點狀態(tài)信息,該步驟可以加快同步的速度。
在步驟107,判斷當前活節(jié)點列表中的節(jié)點數(shù)是否小于種子節(jié)點數(shù),如果小于種子 節(jié)點,則進行下一步驟;如果不小于種子節(jié)點數(shù),轉到步驟109結束本次狀態(tài)同步。
在步驟108,隨機向一個種子節(jié)點發(fā)送同步消息,并進行狀態(tài)同步。如果當前活的 節(jié)點數(shù)少于種子節(jié)點數(shù),以一定概率隨機向一個種子節(jié)點發(fā)送同步請求的目的是為了避免 “孤島”的出現(xiàn)。
如果不進行上述步驟107和步驟108,很容易出現(xiàn)“孤島”,例如假設有4臺機器, 分別為A,B, C,D,并且配置了它們都是種子節(jié)點,即A,B, C,D的種子節(jié)點都包含這4臺機器。如果它們同時啟動,可能會出現(xiàn)這樣的情形a)A節(jié)點起來,發(fā)現(xiàn)沒有活著的節(jié)點,走到步驟106,和任意一個種子節(jié)點同步,假設選 擇了 B;b)B節(jié)點和A完成同步,則認為A活著,它將和A同步,由于A是B的種子節(jié)點,B將不 再和其他種子節(jié)點同步;c)C節(jié)點起來,發(fā)現(xiàn)沒有活著的節(jié)點,同樣走到步驟106,和任意一個種子節(jié)點同步,假 設這次選擇了 D ;d)D節(jié)點和C完成同步,認為C活著,則它將和C同步,由于C是D的種子節(jié)點,所以D 也不再和其他種子節(jié)點同步。
這時就形成了兩個孤島,A和B互相同步,C和D之間互相同步,但是{A,B}和{C,D} 之間將不再互相同步,它們也就不知道對方的存在了。加入步驟107和步驟108后,A和B 同步完成,發(fā)現(xiàn)只有一個節(jié)點活著,但是種子節(jié)點有4個,這時會再和其他任意一個種子節(jié) 點通信,從而打破這個孤島。
本發(fā)明能夠讓同機架的節(jié)點之間快速的進行同步,減少跨機架,跨數(shù)據(jù)中心的通 訊次數(shù),占用更小的網(wǎng)絡帶寬,使跨機架,跨數(shù)據(jù)中心的節(jié)點之間在進行同步時,具有本機 架或本數(shù)據(jù)中心最新的更完整的數(shù)據(jù),加快整個集群網(wǎng)絡狀態(tài)一致性收斂的速度。
另外,合理構建種子節(jié)點,也能在此基礎上更加加快收斂的速度。節(jié)點每次進行同 步時,都以一定概率(與種子節(jié)點進行消息同步,因為種子節(jié)點理論上具有最多節(jié)點的狀態(tài) 信息。而且所有節(jié)點通過種子節(jié)點,形成了一種關聯(lián)關系,與隨機選擇形成了一定的互補。
凡是基于P2P的分布式系統(tǒng)中,利用Gossip或其他協(xié)議進行狀態(tài)同步、信息交換, 或鄰居節(jié)點選擇時,都可以用到本發(fā)明。本發(fā)明包含但不限于下面的兩種使用情況。
1. P2P視頻分享基于P2P的流媒體直播中,每個節(jié)點與附近的節(jié)點之間共享媒體數(shù)據(jù),節(jié)點之間需要 定期的更新各自的狀態(tài)。利用本發(fā)明,通過動態(tài)統(tǒng)計,將距離本節(jié)點較近的一些節(jié)點,歸于 在“同一個機架”中。在選擇節(jié)點進行狀態(tài)同步時,能夠選擇距離自己較近的這些節(jié)點進行 更新,然后根據(jù)數(shù)據(jù)調度算法,選擇合適的“鄰居”,請求得到相應的數(shù)據(jù)。不會出現(xiàn)由于隨 機選擇,將兩個距離很遠、鏈接質量很差的節(jié)點調度成為內容共享,大大影響系統(tǒng)的服務質 量。
2. VoIP通訊里的消息交互基于IP網(wǎng)絡的語音通信(VoIP)是一種全新的網(wǎng)絡電話通信業(yè)務,它和傳統(tǒng)的PSTN電 話業(yè)務相比有著擴展性好、部署方便、價格低廉等明顯的優(yōu)點。在全球范圍內的VoIP應用 中,由于通訊各方可能處于不同的網(wǎng)絡狀況下,采用本發(fā)明,將執(zhí)行話音包中轉的服務器的 狀態(tài)信息,在整個網(wǎng)絡中進行快速的傳播,然后動態(tài)自適應地根據(jù)通訊雙方網(wǎng)絡進行鏈路 通知及消息轉發(fā),提供更高質量的服務。
本領域普通技術人員可以理解以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用 于限制本發(fā)明,盡管參照前述實施例對本發(fā)明進行了詳細的說明,對于本領域的技術人員 來說,其依然可以對前述各實施例記載的技術方案進行修改,或者對其中部分技術特征進 行等同替換。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含 在本發(fā)明的保護范圍之內。
權利要求
1.一種基于距離的狀態(tài)同步方法,該方法包括以下步驟1)構建網(wǎng)絡或集群中某一節(jié)點的種子節(jié)點,并維護活節(jié)點列表和死節(jié)點列表;2)在活節(jié)點列表中,根據(jù)在網(wǎng)絡中的位置,賦予各節(jié)點不同的距離參數(shù),并以與距離的 平方成反比的概率,選擇不同距離的節(jié)點,發(fā)送同步消息;3)隨機向不可達節(jié)點發(fā)送同步消息;4)如被選擇的節(jié)點不包含種子節(jié)點,隨機向一個種子節(jié)點發(fā)送同步消息;5)如活節(jié)點列表中的節(jié)點數(shù)少于種子節(jié)點數(shù),隨機向一個種子節(jié)點發(fā)送同步消息。
2.根據(jù)權利要求1所述的基于距離的狀態(tài)同步方法,其特征在于,所述步驟1)構建網(wǎng) 絡或集群中某一節(jié)點的種子節(jié)點是將所有節(jié)點的種子節(jié)點構成的拓撲結構為二叉樹形式。
3.根據(jù)權利要求1所述的基于距離的狀態(tài)同步方法,其特征在于,所述步驟2)中根據(jù) 在網(wǎng)絡中的位置,賦予各節(jié)點不同的距離參數(shù)的步驟進一步包括判斷節(jié)點所處的機架位 置和數(shù)據(jù)中心的位置;根據(jù)位置賦予節(jié)點距離參數(shù)。
4.根據(jù)權利要求3所述的基于距離的狀態(tài)同步方法,其特征在于,所述判斷節(jié)點所處 的機架位置和數(shù)據(jù)中心的位置包括根據(jù)系統(tǒng)配置判斷、根據(jù)網(wǎng)絡規(guī)劃時設定的IP地址規(guī) 則判斷或根據(jù)動態(tài)統(tǒng)計判斷。
5.根據(jù)權利要求3所述的基于距離的狀態(tài)同步方法,其特征在于,所述根據(jù)位置賦予 節(jié)點距離參數(shù)是依據(jù)網(wǎng)絡拓撲的具體形式賦值;同機架的節(jié)點距離參數(shù)為1,不同機架但 相同數(shù)據(jù)中心的節(jié)點距離參數(shù)為2,不同數(shù)據(jù)中心的節(jié)點距離參數(shù)為3。
全文摘要
一種基于距離的狀態(tài)同步方法,該方法包括以下步驟構建網(wǎng)絡或集群中某一節(jié)點的種子節(jié)點,并維護活節(jié)點列表和死節(jié)點列表;在活節(jié)點列表中,根據(jù)在網(wǎng)絡中的位置,賦予各節(jié)點不同的距離參數(shù),并以與距離的平方成反比的概率,選擇不同距離的節(jié)點,發(fā)送同步消息;以一定概率隨機向不可達節(jié)點發(fā)送同步消息;如被選擇的節(jié)點不包含種子節(jié)點,以一定概率隨機向一個種子節(jié)點發(fā)送同步消息;如活節(jié)點列表中的節(jié)點數(shù)少于種子節(jié)點數(shù),以一定概率隨機向一個種子節(jié)點發(fā)送同步消息,進行狀態(tài)同步。本發(fā)明基于距離的狀態(tài)同步方法,能夠加快系統(tǒng)狀態(tài)一致收斂的速度,提高通訊的效率,降低對帶寬和系統(tǒng)的開銷。
文檔編號H04L29/08GK102035894SQ20101061067
公開日2011年4月27日 申請日期2010年12月29日 優(yōu)先權日2010年12月29日
發(fā)明者劉為懷, 張元豐, 張衛(wèi)平, 張松波, 楊立輝, 饒春平 申請人:北京播思軟件技術有限公司