Gossip 協議詳解
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一萬字詳解 Redis Cluster Gossip 協議RedisGo協議
- 啥是Gossip協議?Go協議
- Gossip協議和Grpc協議的區別Go協議RPC
- Gossip協議也叫Epidemic協議(流行病協議)Go協議IDE
- Cassandra Gossip協議的二三事兒Go協議
- FTP協議詳解FTP協議
- raft協議詳解Raft協議
- TCP協議詳解TCP協議
- Kraft協議詳解Raft協議
- VxLAN協議詳解協議
- HTTPS協議詳解HTTP協議
- USB協議詳解協議
- SPI協議詳解協議
- HTTP協議詳解HTTP協議
- QUIC協議詳解UI協議
- WebSocket 協議詳解Web協議
- UDP協議詳解UDP協議
- 10.redis cluster介紹與gossip協議RedisGo協議
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- 網路通訊協議-ICMP協議詳解!協議
- 網路通訊協議-TCP協議詳解!協議TCP
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 網路通訊協議-SMTP協議詳解!協議
- 組播協議詳解協議
- HTTP 3協議詳解HTTP協議
- tcp/ip協議和opc協議對比詳解TCP協議
- TCP傳輸協議詳解TCP協議
- IMAP協議之BODYSTRUCTURE詳解協議Struct
- V-By-One協議詳解協議
- python 多型 協議詳解Python多型協議
- OSPF 路由協議詳解(一)路由協議
- MQTT 協議 Keep Alive 詳解MQQT協議
- 網路協議之:socket協議詳解之Datagram Socket協議
- 常見協議埠號對應 + 重要協議詳解協議
- 網路協議之:socket協議詳解之Unix domain Socket協議AI
- WiFi協議技術詳解概述WiFi協議
- 常見開源協議詳解協議
- 詳解Tomcat核心配置、http協議TomcatHTTP協議