什么是Gossip協(xié)議
Gossip protocol 也叫 Epidemic Protocol (流行病協(xié)議)赵讯,實(shí)際上它還有很多別名轴咱,比如:“流言算法”胚膊、“疫情傳播算法”等缭受。
這個(gè)協(xié)議的作用就像其名字表示的意思一樣,非常容易理解,它的方式其實(shí)在我們?nèi)粘I钪幸埠艹R?jiàn)欲低,比如電腦病毒的傳播辕宏,森林大火,細(xì)胞擴(kuò)散等等砾莱。
Gossip protocol 最早是在 1987 年發(fā)表在 ACM 上的論文 《Epidemic Algorithms for Replicated Database Maintenance》中被提出瑞筐。主要用在分布式數(shù)據(jù)庫(kù)系統(tǒng)中各個(gè)副本節(jié)點(diǎn)同步數(shù)據(jù)之用,這種場(chǎng)景的一個(gè)最大特點(diǎn)就是組成的網(wǎng)絡(luò)的節(jié)點(diǎn)都是對(duì)等節(jié)點(diǎn)腊瑟,是非結(jié)構(gòu)化網(wǎng)絡(luò)聚假。
Gossip 過(guò)程是由種子節(jié)點(diǎn)發(fā)起,當(dāng)一個(gè)種子節(jié)點(diǎn)有狀態(tài)需要更新到網(wǎng)絡(luò)中的其他節(jié)點(diǎn)時(shí)闰非,它會(huì)隨機(jī)的選擇周?chē)鷰讉€(gè)節(jié)點(diǎn)散播消息膘格,收到消息的節(jié)點(diǎn)也會(huì)重復(fù)該過(guò)程,直至最終網(wǎng)絡(luò)中所有的節(jié)點(diǎn)都收到了消息财松。這個(gè)過(guò)程可能需要一定的時(shí)間瘪贱,由于不能保證某個(gè)時(shí)刻所有節(jié)點(diǎn)都收到消息,但是理論上最終所有節(jié)點(diǎn)都會(huì)收到消息辆毡,因此它是一個(gè)最終一致性協(xié)議菜秦。
Gossip 演示
現(xiàn)在,我們通過(guò)一個(gè)具體的實(shí)例來(lái)深入體會(huì)一下 Gossip 傳播的完整過(guò)程
為了表述清楚舶掖,我們先做一些前提設(shè)定
1球昨、Gossip 是周期性的散播消息,把周期限定為 1 秒
2眨攘、被感染節(jié)點(diǎn)隨機(jī)選擇 k 個(gè)鄰接節(jié)點(diǎn)(fan-out)散播消息主慰,這里把 fan-out 設(shè)置為 3,每次最多往 3 個(gè)節(jié)點(diǎn)散播期犬。
3河哑、每次散播消息都選擇尚未發(fā)送過(guò)的節(jié)點(diǎn)進(jìn)行散播
4避诽、收到消息的節(jié)點(diǎn)不再往發(fā)送節(jié)點(diǎn)散播龟虎,比如 A -> B,那么 B 進(jìn)行散播的時(shí)候沙庐,不再發(fā)給 A鲤妥。
這里一共有 16 個(gè)節(jié)點(diǎn),節(jié)點(diǎn) 1 為初始被感染節(jié)點(diǎn)拱雏,通過(guò) Gossip 過(guò)程棉安,最終所有節(jié)點(diǎn)都被感染:
Gossip 的特點(diǎn)(優(yōu)勢(shì))
1)擴(kuò)展性
網(wǎng)絡(luò)可以允許節(jié)點(diǎn)的任意增加和減少,新增加的節(jié)點(diǎn)的狀態(tài)最終會(huì)與其他節(jié)點(diǎn)一致铸抑。
2)容錯(cuò)
網(wǎng)絡(luò)中任何節(jié)點(diǎn)的宕機(jī)和重啟都不會(huì)影響 Gossip 消息的傳播贡耽,Gossip 協(xié)議具有天然的分布式系統(tǒng)容錯(cuò)特性。
3)去中心化
Gossip 協(xié)議不要求任何中心節(jié)點(diǎn),所有節(jié)點(diǎn)都可以是對(duì)等的蒲赂,任何一個(gè)節(jié)點(diǎn)無(wú)需知道整個(gè)網(wǎng)絡(luò)狀況阱冶,只要網(wǎng)絡(luò)是連通的,任意一個(gè)節(jié)點(diǎn)就可以把消息散播到全網(wǎng)滥嘴。
4)一致性收斂
Gossip 協(xié)議中的消息會(huì)以一傳十木蹬、十傳百一樣的指數(shù)級(jí)速度在網(wǎng)絡(luò)中快速傳播,因此系統(tǒng)狀態(tài)的不一致可以在很快的時(shí)間內(nèi)收斂到一致若皱。消息傳播速度達(dá)到了 logN镊叁。
5)簡(jiǎn)單
Gossip 協(xié)議的過(guò)程極其簡(jiǎn)單,實(shí)現(xiàn)起來(lái)幾乎沒(méi)有太多復(fù)雜性走触。