Gossip算法又被稱為反熵(Anti-Entropy),熵是物理學上的一個概念,代表雜亂無章,而反熵就是在雜亂無章中尋求一致,這充分說明了Gossip的特點:
在一個有界網絡中,每個節點都隨機地與其他節點通信,經過一番雜亂無章的通信,最終所有節點的狀態都會達成一致。
每個節點可能知道所有其他節點,也可能僅知道幾個鄰居節點,只要這些節可以通過網絡連通,最終他們的狀態都是一致的,當然這也是疫情傳播的特點。
要注意到的一點是,即使有的節點因宕機而重啟,有新節點加入,但經過一段時間后,這些節點的狀態也會與其他節點達成一致,也就是說,Gossip天然具有分布式容錯的優點。
Gossip是一個帶冗余的容錯算法,更進一步,Gossip是一個最終一致性算法。
雖然無法保證在某個時刻所有節點狀態一致,但可以保證在”最終“所有節點一致,”最終“是一個現實中存在,但理論上無法證明的時間點。
因為Gossip不要求節點知道所有其他節點,因此又具有去中心化的特點,節點之間完全對等,不需要任何的中心節點。
實際上Gossip可以用於眾多能接受“最終一致性”的領域:失敗檢測、路由同步、Pub/Sub、動態負載均衡。
但Gossip的缺點也很明顯,冗余通信會對網路帶寬、CPU資源造成很大的負載,而這些負載又受限於通信頻率,該頻率又影響着算法收斂的速度,后面我們會講在各種場合下的優化方法。
gossip分為兩種
anti-entropy 只要數據不同步,就開始同步數據
rumor mongering 每隔固定的時間同步數據
---------