- 起源 -
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。
-the end-
IT東方會推出專欄作者特輯,來自社群的技術大咖和公眾號大V們,用他們的技術見解與經驗,與你一起認知提升。
如果你也有精彩原創公眾號,歡迎添加小助手微信,加入公眾號互推聯盟,報名加入專欄作家,更有機會參與免費出書活動哦。
▼▼▼
(為保證社群質量,入群需審核哦)
「IT東方會」