gossip protocol 也叫 epidemic protocol (流行病協議)。gossip protocol在2023年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在2023年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(感染)。這種節點狀態又叫做****** 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。
本文**於:奈學開發者社群
Gossip 協議詳解
gossip protocol 也叫 epidemic protocol 流行病協議 gossip protocol在1987年8月由施樂 帕洛阿爾托研究中心發表acm上的 epidemic algorithms for replicated database maintenance 中被提出。原本...
協議 5 gossip 協議
gossip是一種去中心化 容錯並保證最終一致性的協議。gossip是為了解決分布式遇到的問題而設計的。由於服務和資料分布在不同的機器上,節點之間的每次互動都伴隨著網路延遲 網路故障等的效能問題。可見,分布式系統會比單機系統遇到更多的難題。如cap理論 所描述的,cap三個因素在分布式的條件下只能滿...
gossip協議的原理和實戰應用
先理解一下gossip協議 在乙個有界網路中,每個節點都隨機地與其他節點通訊,經過一番雜亂無章的通訊,最終所有節點的狀態都會達成一致。每個節點可能知道所有其他節點,也可能僅知道幾個鄰居節點,只要這些節可以通過網路連通,最終他們的狀態都是一致的,當然這也是疫情傳播的特點。簡單的描述下這個協議,首先要傳...