Gossip協議簡介

分佈式系統中,即使是一個小型的集羣,也須要經過一個機制來維護各個節點或服務的狀態一致性和數據一致性。zab、paxos是使用較早的協議,後來出現了RAFT協議,這些主要經過RPC的機制進行節點鏈接,所以主要用於局域網或數據中心內部。Gossip(意:八卦、流言)支持p2p協議,是可以用於廣域網的一致性維護的協議,已經被不少互聯網系統採用。此外,CRDT也是正在研究的一致性機制,能夠實現即時的多節點數據寫入同步。這裏主要介紹GOSSIP協議。算法

參考:網絡

Gossip是分佈式系統中被普遍使用的協議,其主要用於實現分佈式節點或者進程之間的信息交換。Gossip協議同時知足應用層多播協議所要求的低負載,高可靠和可擴展性的要求。因爲其簡單而易於實現,當前不少系統(例如Amazon S3,Usenet NNTP等)選擇基於Gossip協議以實現應用層多播的功能。分佈式

什麼是Gossip協議

Gossip Protocol利用一種隨機的方式將信息散播到整個網絡中。正如Gossip自己的含義同樣,Gossip協議的工做流程即相似於緋聞的傳播,或者流行病的傳播。具體而言Gossip Protocol能夠分爲Push-based和Pull-based兩種。Push-based Gossip Protocol的具體工做流程以下:ide

  1. 網絡中的某個節點隨機的選擇其餘bb個節點做爲傳輸對象。
  2. 該節點向其選中的bb個節點傳輸相應的信息
  3. 接收到信息的節點重複完成相同的工做

Pull-based Gossip Protol的協議過程恰好相反:性能

  1. 某個節點vv隨機的選擇bb個節點詢問有沒有最新的信息
  2. 收到請求的節點回復節點vv其最近未收到的信息

固然,爲了提升Gossip協議的性能,還有基於Push-Pull的混合協議。同時須要注意的是Gossip協議並不對網絡的質量作出任何要求,也不須要loss-free的網絡協議。Gossip協議通常基於UDP實現,其自身即在應用層保證了協議的robustness。spa

Gossip協議的性能

Gossip協議的分析是基於流行病學(Epidemiology)研究的。所以在分析Gossip的性能以前,須要首先介紹一下流行病學中基本的模型。.net

Epidemiology

流行病傳染最基本的模型僅做以下幾個假設:對象

  1. (n+1)(n+1)我的均勻的分佈在一塊兒
  2. 每一對人羣之間的傳染機率是ββ,顯然0<β<10<β<1.
  3. 任意時刻,某我的要麼處於infected的狀態要麼處於uninfected的狀態.
  4. 一旦某我的從uninfected狀態轉變成爲infected狀態,其一直停留在infected狀態。

有了以上假設,咱們能夠進一步分析流行病的傳染狀況。咱們記tt時刻處於infected狀態的人數爲ytyt,處於uninfected狀態的人爲xtxt,那麼初始狀態 y0=1y0=1, x0=nx0=n,而且在任什麼時候候xt+yt=n+1xt+yt=n+1.blog

考慮連續的時間,可知:進程

dxdt=−βxydxdt=−βxy

解的:

x=n(n+1)n+eβ(n+1)tx=n(n+1)n+eβ(n+1)ty=n+11+ne−β(n+1)ty=n+11+ne−β(n+1)t

明顯,當t→∞t→∞時,x→0,y→(n+1)x→0,y→(n+1),即通過足夠的時間,全部的人都將被傳染。

Gossip的性能

上述流行病傳染模型爲分析Gossip的性能提供了基礎。在Gossip性能中,咱們能夠認爲: β=b/nβ=b/n(由於對每一個節點而言,被其餘節點選中的機率就是b/nb/n)。咱們令t=clog(n)t=clog(n),能夠獲得:

y≈(n+1)−1ncb−2y≈(n+1)−1ncb−2

這代表,僅須要O(log(n))O(log(n))個回合,gossip協議便可將信息傳遞到全部的節點。 根據分析可得,Gossip協議具備如下的特色:

  1. 低延遲。僅僅須要O(log(n))O(log(n))個回合的傳遞時間。
  2. 很是可靠。僅有1ncb−21ncb−2個節點不會收到信息。
  3. 輕量級。每一個節點傳送了cblog(n)cblog(n)次信息。

於此同事,Gossip協議的容錯性比較高,例如,5050的丟包率等價於使用b/2b/2帶代替bb進行分析;5050的節點錯誤等價於使用n/2n/2來代替nn,同時使用b/2b/2來代替bb進行分析,其分析結果不用帶來數量級上的變化。

相關文章
相關標籤/搜索