Gossip演算法原理

2021-10-22 18:43:20 字數 1571 閱讀 7005

gossip演算法如其名,靈感來自辦公室八卦,只要乙個人八卦一下,在有限的時間內所有的人都會知道該八卦的資訊,這種方式也與病毒傳播類似,因此gossip有眾多的別名「閒話演算法」、「疫情傳播演算法」、「病毒感染演算法」、「謠言傳播演算法」。

但gossip並不是乙個新東西,之前的泛洪查詢、路由演算法都歸屬於這個範疇,不同的是gossip給這類演算法提供了明確的語義、具體實施方法及收斂性證明。

gossip演算法又被稱為反熵(anti-entropy),熵是物理學上的乙個概念,代表雜亂無章,而反熵就是在雜亂無章中尋求一致,這充分說明了gossip的特點:在乙個有界網路中,每個節點都隨機地與其他節點通訊,經過一番雜亂無章的通訊,最終所有節點的狀態都會達成一致。每個節點可能知道所有其他節點,也可能僅知道幾個鄰居節點,只要這些節可以通過網路連通,最終他們的狀態都是一致的,當然這也是疫情傳播的特點。

要注意到的一點是,即使有的節點因宕機而重啟,有新節點加入,但經過一段時間後,這些節點的狀態也會與其他節點達成一致,也就是說,gossip天然具有分布式容錯的優點。

gossip是乙個帶冗餘的容錯演算法,更進一步,gossip是乙個最終一致性演算法。雖然無法保證在某個時刻所有節點狀態一致,但可以保證在」最終「所有節點一致,」最終「是乙個現實中存在,但理論上無法證明的時間點。 因為gossip不要求節點知道所有其他節點,因此又具有去中心化的特點,節點之間完全對等,不需要任何的中心節點。實際上gossip可以用於眾多能接受「最終一致性」的領域:失敗檢測、路由同步、pub/sub、動態負載均衡。 但gossip的缺點也很明顯,冗餘通訊會對網路頻寬、cpu資源造成很大的負載,而這些負載又受限於通訊頻率,該頻率又影響著演算法收斂的速度,後面我們會講在各種場合下的優化方法。

根據原**,兩個節點(a、b)之間存在三種通訊方式:

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演算法退化為乙個二分查詢過程,每個週期構成乙個平衡二叉樹,收斂速度為o(n2 ),對應的時間開銷則為o(logn )。這也是gossip理論上最優的收斂速度。但在實際情況中最優收斂速度是很難達到的,假設某個節點在第i個週期被感染的概率為pi ,第i+1個週期被感染的概率為pi+1 ,則pull的方式:

而push為:

顯然pull的收斂速度大於push,而每個節點在每個週期被感染的概率都是固定的p(0

Gossip演算法介紹

gossip演算法因為cassandra而名聲大噪,gossip看似簡單,但要真正弄清楚其本質遠沒看起來那麼容易。為了尋求gossip的本質,下面的內容主要參考gossip的原始 gossip演算法如其名,靈感來自辦公室八卦,只要乙個人八卦一下,在有限的時間內所有的人都會知道該八卦的資訊,這種方式也...

Gossip演算法學習筆記

主要參考了 分布環境下的gossip演算法 這篇 幷包含在網上整理的一些資料。簡介 gossip 演算法又被稱為反熵 anti entropy 熵是物理學上的乙個概念,代表雜亂無章,而反熵就是在雜亂無章中尋求一致.gossip 的特點 在乙個有界網路中,每個節點都隨機地與其他節點通訊,經過一番雜亂無...

gossip協議的原理和實戰應用

先理解一下gossip協議 在乙個有界網路中,每個節點都隨機地與其他節點通訊,經過一番雜亂無章的通訊,最終所有節點的狀態都會達成一致。每個節點可能知道所有其他節點,也可能僅知道幾個鄰居節點,只要這些節可以通過網路連通,最終他們的狀態都是一致的,當然這也是疫情傳播的特點。簡單的描述下這個協議,首先要傳...