一致性算法-Gossip協(xié)議詳解一

起源

Gossip protocol 也叫 Epidemic Protocol (流行病協(xié)議)晦款,是基于流行病傳播方式的節(jié)點或者進程之間信息交換的協(xié)議草则。样傍。Gossip protocol在1987年8月由施樂公司帕洛阿爾托研究中心研究員艾倫·德默斯(Alan Demers)發(fā)表在ACM上的論文《Epidemic Algorithms for Replicated Database Maintenance》中被提出缸榄。

Gossip協(xié)議是基于六度分隔理論(Six Degrees of Separation)哲學(xué)的體現(xiàn),簡單的來說巾乳,一個人通過6個中間人可以認識世界任何人。數(shù)學(xué)公式是:

n表示復(fù)雜度鸟召,N表示人的總數(shù)胆绊,W表示每個人的聯(lián)系寬度。依據(jù)鄧巴數(shù)欧募,即每個人認識150人压状,其六度就是1506 =11,390,625,000,000(約11.4萬億)。

基于六度分隔理論槽片,任何信息的傳播其實非常迅速何缓,而且網(wǎng)絡(luò)交互次數(shù)不會很多。比如Facebook在2016年2月4號做了一個實驗:研究了當(dāng)時已注冊的15.9億使用者資料还栓,發(fā)現(xiàn)這個神奇數(shù)字的“網(wǎng)絡(luò)直徑”是4.57碌廓,翻成白話文意味著每個人與其他人間隔為4.57人。

基礎(chǔ)原理

Gossip協(xié)議在計算機系統(tǒng)通常以隨機的“對等選擇”形式實現(xiàn):以給定的頻率剩盒,每臺計算機隨機選擇另一臺計算機谷婆,并共享任何消息。定義十分簡單,所以實現(xiàn)方式非常多纪挎,可能有幾百種Gossip協(xié)議變種期贫。因為每個使用場景都可能根據(jù)組織的特定需求進行定制,維基百科上這樣寫:

There are probably hundreds of variants of specific Gossip-like protocols because each use-scenario is likely to be customized to the organization's specific needs.

下文解說一種比較原始的Gossip協(xié)議實現(xiàn)的執(zhí)行過程异袄、消息類型通砍、通訊方式,以下為Gossip協(xié)議執(zhí)行過程:

種子節(jié)點周期性的散播消息 【假定把周期限定為 1 秒】烤蜕。

被感染節(jié)點隨機選擇N個鄰接節(jié)點散播消息【假定fan-out(扇出)設(shè)置為6封孙,每次最多往6個節(jié)點散播】。

節(jié)點只接收消息不反饋結(jié)果讽营。

每次散播消息都選擇尚未發(fā)送過的節(jié)點進行散播虎忌。

收到消息的節(jié)點回傳散播:A -> B,那么B進行散播的時候橱鹏,不再發(fā)給 A膜蠢。

Goosip 協(xié)議的信息傳播和擴散通常需要由種子節(jié)點發(fā)起。整個傳播過程可能需要一定的時間莉兰,由于不能保證某個時刻所有節(jié)點都收到消息挑围,但是理論上最終所有節(jié)點都會收到消息,因此它是一個最終一致性協(xié)議贮勃。

Gossip協(xié)議是一個多主協(xié)議贪惹,所有寫操作可以由不同節(jié)點發(fā)起,并且同步給其他副本寂嘉。Gossip內(nèi)組成的網(wǎng)絡(luò)節(jié)點都是對等節(jié)點奏瞬,是非結(jié)構(gòu)化網(wǎng)絡(luò)。

消息類型

Gossip 協(xié)議的消息傳播方式有兩種:Anti-Entropy(反熵傳播)和Rumor-Mongering(謠言傳播)泉孩。

反熵傳播使用“simple epidemics(SI model)”的方式:以固定的概率傳播所有的數(shù)據(jù)硼端。所有參與節(jié)點只有兩種狀態(tài):

Suspective(病原):處于 susceptible 狀態(tài)的節(jié)點代表其并沒有收到來自其他節(jié)點的更新。

Infective(感染):處于 infective 狀態(tài)的節(jié)點代表其有數(shù)據(jù)更新寓搬,并且會將這個數(shù)據(jù)分享給其他節(jié)點珍昨。

反熵傳播過程是每個節(jié)點周期性地隨機選擇其他節(jié)點,然后通過互相交換自己的所有數(shù)據(jù)來消除兩者之間的差異句喷。

反熵傳播方法每次節(jié)點兩兩交換自己的所有數(shù)據(jù)會帶來非常大的通信負擔(dān)镣典,因此不會頻繁使用,通常只用于新加入節(jié)點的數(shù)據(jù)初始化唾琼。

謠言傳播使用“complex epidemics”(SIR model)的方式:以固定的概率僅傳播新到達的數(shù)據(jù)兄春。所有參與節(jié)點有三種狀態(tài):Suspective(病原)、Infective(感染)锡溯、Removed(愈除)赶舆。

Removed(愈除):其已經(jīng)接收到來自其他節(jié)點的更新哑姚,但是其并不會將這個更新分享給其他節(jié)點。

謠言傳播過程是消息只包含最新 update芜茵,謠言消息在某個時間點之后會被標記為removed叙量,并且不再被傳播。缺點是系統(tǒng)有一定的概率會不一致九串,通常用于節(jié)點間數(shù)據(jù)增量同步绞佩。

一般來說,為了在通信代價和可靠性之間取得折中猪钮,需要將這兩種方法結(jié)合使用征炼。

通訊方式

Gossip 協(xié)議最終目的是將數(shù)據(jù)分發(fā)到網(wǎng)絡(luò)中的每一個節(jié)點。不管是 Anti-Entropy 還是 Rumor-Mongering 都涉及到節(jié)點間的數(shù)據(jù)交互方式躬贡,Gossip網(wǎng)絡(luò)中兩個節(jié)點之間存在三種通信方式:Push、Pull 以及 Push&Pull:

Push: 發(fā)起信息交換的節(jié)點 A 隨機選擇聯(lián)系節(jié)點 B眼坏,并向其發(fā)送自己的信息拂玻,節(jié)點 B 在收到信息后更新比自己新的數(shù)據(jù),一般擁有新信息的節(jié)點才會作為發(fā)起節(jié)點

Pull:發(fā)起信息交換的節(jié)點 A 隨機選擇聯(lián)系節(jié)點 B宰译,并從對方獲取信息檐蚜。一般無新信息的節(jié)點才會作為發(fā)起節(jié)點

Push/Pull:發(fā)起信息交換的節(jié)點 A 向選擇的節(jié)點 B 發(fā)送信息,同時從對方獲取數(shù)據(jù)沿侈,用于更新自己的本地數(shù)據(jù)闯第。

如果把兩個節(jié)點數(shù)據(jù)同步一次定義為一個周期,則在一個周期內(nèi)缀拭,Push 需通信 1 次咳短,Pull 需 2 次,Push/Pull 則需 3 次蛛淋。雖然消息數(shù)增加了咙好,但從效果上來講,Push/Pull 最好褐荷,理論上一個周期內(nèi)可以使兩個節(jié)點完全一致勾效。直觀上,Push/&Pull 的收斂速度也是最快的叛甫。

總結(jié)

綜上所述层宫,Gossip 協(xié)議是按照流言傳播或流行病傳播的思想實現(xiàn)的,所以其监,Gossip 協(xié)議的實現(xiàn)算法也是很簡單的萌腿,下面分別是 Anti-Entropy 和 Rumor-Mongering 的實現(xiàn)偽代碼:

Gossip是一種去中心化的分布式協(xié)議,數(shù)據(jù)通過節(jié)點像病毒一樣逐個傳播棠赛。因為是指數(shù)級傳播哮奇,整體傳播速度非程鸥快,很像現(xiàn)在美國失控的2019-nCoV(新冠)一樣鼎俘。它具備以下優(yōu)勢:

可擴展性(Scalable):允許節(jié)點的任意增加和減少哲身,新增節(jié)點的狀態(tài)最終會與其他節(jié)點一致。

容錯(Fault-tolerance):網(wǎng)絡(luò)中任何節(jié)點的重啟或者宕機都不會影響 gossip 協(xié)議的運行贸伐,具有天然的分布式系統(tǒng)容錯特性勘天。

健壯性(Robust):gossip 協(xié)議是去中心化的協(xié)議,所以集群中的所有節(jié)點都是對等的捉邢,沒有特殊的節(jié)點脯丝,所以任何節(jié)點出現(xiàn)問題都不會阻止其他節(jié)點繼續(xù)發(fā)送消息。任何節(jié)點都可以隨時加入或離開伏伐,而不會影響系統(tǒng)的整體服務(wù)質(zhì)量宠进。

最終一致性(Convergent consistency):謠言傳播可以是指數(shù)級的快速傳播,因此新信息傳播時藐翎,消息可以快速地發(fā)送到全局節(jié)點材蹬,在有限的時間內(nèi)能夠做到所有節(jié)點都擁有最新的數(shù)據(jù)。

簡單

同樣也存在以下缺點:

消息延遲:節(jié)點隨機向少數(shù)幾個節(jié)點發(fā)送消息吝镣,消息最終是通過多個輪次的散播而到達全網(wǎng)堤器,不可避免的造成消息延遲。

消息冗余:節(jié)點定期隨機選擇周圍節(jié)點發(fā)送消息末贾,而收到消息的節(jié)點也會重復(fù)該步驟闸溃,因此不可避免地引起同一節(jié)點多次接收同一消息,增加消息處理的壓力拱撵。一次通信會對網(wǎng)路帶寬辉川、CUP資源造成很大的負載,而這些負載又受限于 通信頻率裕膀,該頻率又影響著算法收斂的速度员串。

拜占庭問題:如果有一個惡意傳播消息的節(jié)點,Gossip協(xié)議的分布式系統(tǒng)就會出問題昼扛。

上述優(yōu)缺點的本質(zhì)是因為Gossip是一個帶冗余的容錯算法寸齐,是一個最終一致性算法,雖然無法保證在某個時刻所有節(jié)點狀態(tài)一致抄谐,但可以保證在“最終所有節(jié)點一致”渺鹦,“最終”的時間是一個理論無法明確的時間點。所以適合于AP場景的數(shù)據(jù)一致性處理蛹含,常見應(yīng)用有:P2P網(wǎng)絡(luò)通信毅厚、Apache Cassandra、Redis Cluster浦箱、Consul吸耿。


文章出處:https://mp.weixin.qq.com/s?src=11&timestamp=1598337993&ver=2543&signature=SSNB6V1XKeSIg7*-vNFJEOiSHHZFZvjChH0080gEt0CvGxGRIzKMw9v5TYHrtnMUcX-bbQ-GVZYX6nNUPcQ972bWX950VYC6yeFsI3EmIC6hE15EbkvJCJofvruaUDTv&new=1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祠锣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咽安,更是在濱河造成了極大的恐慌伴网,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妆棒,死亡現(xiàn)場離奇詭異澡腾,居然都是意外死亡,警方通過查閱死者的電腦和手機糕珊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門动分,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人红选,你說我怎么就攤上這事澜公。” “怎么了喇肋?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵玛瘸,是天一觀的道長。 經(jīng)常有香客問我苟蹈,道長,這世上最難降的妖魔是什么右核? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任慧脱,我火速辦了婚禮,結(jié)果婚禮上贺喝,老公的妹妹穿的比我還像新娘菱鸥。我一直安慰自己,他們只是感情好躏鱼,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布氮采。 她就那樣靜靜地躺著,像睡著了一般染苛。 火紅的嫁衣襯著肌膚如雪鹊漠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天茶行,我揣著相機與錄音躯概,去河邊找鬼。 笑死畔师,一個胖子當(dāng)著我的面吹牛娶靡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播看锉,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼姿锭,長吁一口氣:“原來是場噩夢啊……” “哼塔鳍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呻此,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤轮纫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后趾诗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜡感,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年恃泪,在試婚紗的時候發(fā)現(xiàn)自己被綠了郑兴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡贝乎,死狀恐怖情连,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情览效,我是刑警寧澤却舀,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锤灿,受9級特大地震影響挽拔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜但校,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一螃诅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧状囱,春花似錦术裸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叨粘,卻和暖如春猾编,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背升敲。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工袍镀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冻晤。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓苇羡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鼻弧。 傳聞我的和親對象是個殘疾皇子设江,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359