Gossip 協議詳解

奈學教育發表於2020-07-22
Gossip protocol 也叫 Epidemic Protocol (流行病協議)。Gossip protocol在1987年8月由施樂-帕洛阿爾託研究中心發表ACM上的論文
《Epidemic Algorithms for Replicated Database Maintenance》
中被提出。原本用於分散式資料庫中節點同步資料使用,後被廣泛用於資料庫複製、資訊擴散、叢集成員身份確認、故障探測等。
Gossip協議是基於六度分隔理論(Six Degrees of Separation)哲學的體現,簡單的來說,一個人透過6箇中間人可以認識世界任何人。數學公式是:
n表示複雜度,N表示人的總數,W表示每個人的聯絡寬度。依據鄧巴數,即每個人認識150人,其六度就是1506 =11,390,625,000,000(約11.4萬億)。
基於六度分隔理論,任何資訊的傳播其實非常迅速,而且網路互動次數不會很多。比如Facebook在2016年2月4號做了一個實驗:研究了當時已註冊的15.9億使用者資料,發現這個神奇數字的“網路直徑”是4.57,翻成白話文意味著每個人與其他人間隔為4.57人。
-     原理     -
Gossip協議執行過程:
  • 種子節點週期性的散播訊息 【假定把週期限定為 1 秒】。
  • 被感染節點隨機選擇N個鄰接節點散播訊息【假定fan-out(扇出)設定為6,每次最多往6個節點散播】。
  • 節點只接收訊息不反饋結果。
  • 每次散播訊息都選擇尚未傳送過的節點進行散播。
  • 收到訊息的節點不再往傳送節點散播:A -> B,那麼B進行散播的時候,不再發給 A。
Goosip 協議的資訊傳播和擴散通常需要由種子節點發起。整個傳播過程可能需要一定的時間,由於不能保證某個時刻所有節點都收到訊息,但是理論上最終所有節點都會收到訊息,因此它是一個最終一致性協議。
Gossip協議是一個多主協議,所有寫操作可以由不同節點發起,並且同步給其他副本。Gossip內組成的網路節點都是對等節點,是非結構化網路。
-     訊息型別     -
Gossip 協議的訊息傳播方式有兩種:Anti-Entropy(反熵傳播)和Rumor-Mongering(謠言傳播)。
反熵傳播是以固定的機率傳播所有的資料。所有參與節點只有兩種狀態:Suspective(病原)、Infective(感染)。這種節點狀態又叫做simple epidemics(SI model)。過程是種子節點會把所有的資料都跟其他節點共享,以便消除節點之間資料的任何不一致,它可以保證最終、完全的一致。缺點是訊息數量非常龐大,且無限制;通常只用於新加入節點的資料初始化。
謠言傳播是以固定的機率僅傳播新到達的資料。所有參與節點有三種狀態:Suspective(病原)、Infective(感染)、Removed(愈除)。這種節點狀態又叫做complex epidemics(SIR model)。過程是訊息只包含最新 update,謠言訊息在某個時間點之後會被標記為 removed,並且不再被傳播。缺點是系統有一定的機率會不一致,通常用於節點間資料增量同步。
-     通訊方式     -
Gossip 協議最終目的是將資料分發到網路中的每一個節點。根據不同的具體應用場景,網路中兩個節點之間存在三種通訊方式:推送模式、拉取模式、Push/Pull。
  • Push: 節點 A 將資料 (key,value,version) 及對應的版本號推送給 B 節點,B 節點更新 A 中比自己新的資料
  • Pull:A 僅將資料 key, version 推送給 B,B 將本地比 A 新的資料(Key, value, version)推送給 A,A 更新本地
  • Push/Pull:與 Pull 類似,只是多了一步,A 再將本地比 B 新的資料推送給 B,B 則更新本地
如果把兩個節點資料同步一次定義為一個週期,則在一個週期內,Push 需通訊 1 次,Pull 需 2 次,Push/Pull 則需 3 次。雖然訊息數增加了,但從效果上來講,Push/Pull 最好,理論上一個週期內可以使兩個節點完全一致。直觀上,Push/Pull 的收斂速度也是最快的。
-     總結     -
綜上所述,我們可以得出Gossip是一種去中心化的分散式協議,資料透過節點像病毒一樣逐個傳播。因為是指數級傳播,整體傳播速度非常快,很像現在美國失控的2019-nCoV(新冠)一樣。它具備以下優勢:
  • 擴充套件性:允許節點的任意增加和減少,新增節點的狀態 最終會與其他節點一致。
  • 容錯:任意節點的當機和重啟都不會影響 Gossip 訊息的傳播,具有天然的分散式系統容錯特性。
  • 去中心化:無需中心節點,所有節點都是對等的,任意節點無需知道整個網路狀況,只要網路連通,任意節點可把訊息散播到全網。
  • 一致性收斂:訊息會以“一傳十的指數級速度”在網路中傳播,因此係統狀態的不一致可以在很快的時間內收斂到一致。訊息傳播速度達到了 logN。
  • 簡單
同樣也存在以下缺點:
  • 訊息延遲:節點隨機向少數幾個節點傳送訊息,訊息最終是透過多個輪次的散播而到達全網;不可避免的造成訊息延遲。
  • 訊息冗餘:節點定期隨機選擇周圍節點傳送訊息,而收到訊息的節點也會重複該步驟;不可避免的引起同一節點訊息多次接收,增加訊息處理壓力。
Gossip協議由於以上的優缺點,所以適合於AP場景的資料一致性處理,常見應用有:P2P網路通訊、Apache Cassandra、Redis Cluster、Consul。
本文來源於:奈學開發者社群


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2706327/,如需轉載,請註明出處,否則將追究法律責任。

相關文章