圖解Gossip:可能是最有趣的一致性協(xié)議

Gossip是什么

Gossip協(xié)議是一個(gè)通信協(xié)議疙驾,一種傳播消息的方式杠河,靈感來(lái)自于:瘟疫氢架、社交網(wǎng)絡(luò)等傻咖。使用Gossip協(xié)議的有:Redis Cluster、Consul岖研、Apache Cassandra等没龙。

六度分隔理論

說(shuō)到社交網(wǎng)絡(luò),就不得不提著名的六度分隔理論缎玫。1967年硬纤,哈佛大學(xué)的心理學(xué)教授Stanley Milgram想要描繪一個(gè)連結(jié)人與社區(qū)的人際連系網(wǎng)。做過(guò)一次連鎖信實(shí)驗(yàn)赃磨,結(jié)果發(fā)現(xiàn)了“六度分隔”現(xiàn)象筝家。簡(jiǎn)單地說(shuō):“你和任何一個(gè)陌生人之間所間隔的人不會(huì)超過(guò)六個(gè),也就是說(shuō)邻辉,最多通過(guò)六個(gè)人你就能夠認(rèn)識(shí)任何一個(gè)陌生人溪王。

數(shù)學(xué)解釋該理論:若每個(gè)人平均認(rèn)識(shí)260人,其六度就是260↑6 =1,188,137,600,000值骇。消除一些節(jié)點(diǎn)重復(fù)莹菱,那也幾乎覆蓋了整個(gè)地球人口若干多多倍,這也是Gossip協(xié)議的雛形吱瘩。

原理

Gossip協(xié)議基本思想就是:一個(gè)節(jié)點(diǎn)想要分享一些信息給網(wǎng)絡(luò)中的其他的一些節(jié)點(diǎn)道伟。于是,它周期性隨機(jī)選擇一些節(jié)點(diǎn)使碾,并把信息傳遞給這些節(jié)點(diǎn)蜜徽。這些收到信息的節(jié)點(diǎn)接下來(lái)會(huì)做同樣的事情,即把這些信息傳遞給其他一些隨機(jī)選擇的節(jié)點(diǎn)票摇。一般而言拘鞋,信息會(huì)周期性的傳遞給N個(gè)目標(biāo)節(jié)點(diǎn),而不只是一個(gè)矢门。這個(gè)N被稱(chēng)為fanout(這個(gè)單詞的本意是扇出)盆色。

用途

Gossip協(xié)議的主要用途就是信息傳播和擴(kuò)散:即把一些發(fā)生的事件傳播到全世界灰蛙。它們也被用于數(shù)據(jù)庫(kù)復(fù)制,信息擴(kuò)散隔躲,集群成員身份確認(rèn)缕允,故障探測(cè)等。

基于Gossip協(xié)議的一些有名的系統(tǒng):Apache Cassandra蹭越,Redis(Cluster模式)障本,Consul等。

圖解

接下來(lái)通過(guò)多張圖片剖析Gossip協(xié)議是如何運(yùn)行的响鹃。如下圖所示驾霜,Gossip協(xié)議是周期循環(huán)執(zhí)行的。圖中的公式表示Gossip協(xié)議把信息傳播到每一個(gè)節(jié)點(diǎn)需要多少次循環(huán)動(dòng)作买置,需要說(shuō)明的是粪糙,公式中的20表示整個(gè)集群有20個(gè)節(jié)點(diǎn),4表示某個(gè)節(jié)點(diǎn)會(huì)向4個(gè)目標(biāo)節(jié)點(diǎn)傳播消息:


Gossip Protocol

如下圖所示忿项,紅色的節(jié)點(diǎn)表示其已經(jīng)“受到感染”蓉冈,即接下來(lái)要傳播信息的源頭,連線表示這個(gè)初始化感染的節(jié)點(diǎn)能正常連接的節(jié)點(diǎn)(其不能連接的節(jié)點(diǎn)只能靠接下來(lái)感染的節(jié)點(diǎn)向其傳播消息)轩触。并且N等于4寞酿,我們假設(shè)4根較粗的線路,就是它第一次傳播消息的線路:


first infected node

第一次消息完成傳播后脱柱,新增了4個(gè)節(jié)點(diǎn)會(huì)被“感染”伐弹,即這4個(gè)節(jié)點(diǎn)也收到了消息。這時(shí)候榨为,總計(jì)有5個(gè)節(jié)點(diǎn)變成紅色:


infected nodes

那么在下一次傳播周期時(shí)惨好,總計(jì)有5個(gè)節(jié)點(diǎn),且這5個(gè)節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)都會(huì)向4個(gè)節(jié)點(diǎn)傳播消息随闺。最后日川,經(jīng)過(guò)3次循環(huán),20個(gè)節(jié)點(diǎn)全部被感染(都變成紅色節(jié)點(diǎn))矩乐,即說(shuō)明需要傳播的消息已經(jīng)傳播給了所有節(jié)點(diǎn):


infected all nodes

需要說(shuō)明的是龄句,20個(gè)節(jié)點(diǎn)且設(shè)置fanout=4,公式結(jié)果是2.16绰精,這只是個(gè)近似值撒璧。真實(shí)傳遞時(shí),可能需要3次甚至4次循環(huán)才能讓所有節(jié)點(diǎn)收到消息笨使。這是因?yàn)槊總€(gè)節(jié)點(diǎn)在傳播消息的時(shí)候,是隨機(jī)選擇N個(gè)節(jié)點(diǎn)的僚害,這樣的話(huà)硫椰,就有可能某個(gè)節(jié)點(diǎn)會(huì)被選中2次甚至更多次繁调。

發(fā)送消息

由前面對(duì)Gossip協(xié)議圖解分析可知,節(jié)點(diǎn)傳播消息是周期性的靶草,并且每個(gè)節(jié)點(diǎn)有它自己的周期蹄胰。另外,節(jié)點(diǎn)發(fā)送消息時(shí)的目標(biāo)節(jié)點(diǎn)數(shù)由參數(shù)fanout決定奕翔。至于往哪些目標(biāo)節(jié)點(diǎn)發(fā)送裕寨,則是隨機(jī)的。

一旦消息被發(fā)送到目標(biāo)節(jié)點(diǎn)派继,那么目標(biāo)節(jié)點(diǎn)也會(huì)被感染宾袜。一旦某個(gè)節(jié)點(diǎn)被感染,那么它也會(huì)向其他節(jié)點(diǎn)傳播消息驾窟,試圖感染更多的節(jié)點(diǎn)庆猫。最終,每一個(gè)節(jié)點(diǎn)都會(huì)被感染绅络,即消息被同步給了所有節(jié)點(diǎn):


infected

可擴(kuò)展性

Gossip協(xié)議是可擴(kuò)展的月培,因?yàn)樗恍枰狾(logN) 個(gè)周期就能把消息傳播給所有節(jié)點(diǎn)。某個(gè)節(jié)點(diǎn)在往固定數(shù)量節(jié)點(diǎn)傳播消息過(guò)程中恩急,并不需要等待確認(rèn)(ack)杉畜,并且,即使某條消息傳播過(guò)程中丟失衷恭,它也不需要做任何補(bǔ)償措施寻行。大哥比方,某個(gè)節(jié)點(diǎn)本來(lái)需要將消息傳播給4個(gè)節(jié)點(diǎn)匾荆,但是由于網(wǎng)絡(luò)或者其他原因拌蜘,只有3個(gè)消息接收到消息,即使這樣牙丽,這對(duì)最終所有節(jié)點(diǎn)接收到消息是沒(méi)有任何影響的简卧。

如下表格所示,假定fanout=4烤芦,那么在節(jié)點(diǎn)數(shù)分別是20举娩、40、80构罗、160時(shí)铜涉,消息傳播到所有節(jié)點(diǎn)需要的循環(huán)次數(shù)對(duì)比,在節(jié)點(diǎn)成倍擴(kuò)大的情況下遂唧,循環(huán)次數(shù)并沒(méi)有增加很多芙代。所以,Gossip協(xié)議具備可擴(kuò)展性:

可擴(kuò)展性

失敗容錯(cuò)

Gossip也具備失敗容錯(cuò)的能力盖彭,即使網(wǎng)絡(luò)故障等一些問(wèn)題纹烹,Gossip協(xié)議依然能很好的運(yùn)行页滚。因?yàn)橐粋€(gè)節(jié)點(diǎn)會(huì)多次分享某個(gè)需要傳播的信息,即使不能連通某個(gè)節(jié)點(diǎn)铺呵,其他被感染的節(jié)點(diǎn)也會(huì)嘗試向這個(gè)節(jié)點(diǎn)傳播信息裹驰。

健壯性

Gossip協(xié)議下,沒(méi)有任何扮演特殊角色的節(jié)點(diǎn)(比如leader等)片挂。任何一個(gè)節(jié)點(diǎn)無(wú)論什么時(shí)候下線或者加入幻林,并不會(huì)破壞整個(gè)系統(tǒng)的服務(wù)質(zhì)量。

然而音念,Gossip協(xié)議也有不完美的地方沪饺,例如,拜占庭問(wèn)題(Byzantine)症昏。即随闽,如果有一個(gè)惡意傳播消息的節(jié)點(diǎn),Gossip協(xié)議的分布式系統(tǒng)就會(huì)出問(wèn)題肝谭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掘宪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子攘烛,更是在濱河造成了極大的恐慌魏滚,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坟漱,死亡現(xiàn)場(chǎng)離奇詭異鼠次,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)芋齿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)腥寇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人觅捆,你說(shuō)我怎么就攤上這事赦役。” “怎么了栅炒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵掂摔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赢赊,道長(zhǎng)乙漓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任释移,我火速辦了婚禮叭披,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秀鞭。我一直安慰自己趋观,他們只是感情好扛禽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布锋边。 她就那樣靜靜地躺著皱坛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豆巨。 梳的紋絲不亂的頭發(fā)上剩辟,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音往扔,去河邊找鬼贩猎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萍膛,可吹牛的內(nèi)容都是我干的吭服。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蝗罗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼艇棕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起串塑,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沼琉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后桩匪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體打瘪,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年傻昙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闺骚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妆档,死狀恐怖僻爽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情过吻,我是刑警寧澤进泼,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站纤虽,受9級(jí)特大地震影響乳绕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逼纸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一洋措、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杰刽,春花似錦菠发、人聲如沸王滤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雁乡。三九已至,卻和暖如春糜俗,著一層夾襖步出監(jiān)牢的瞬間踱稍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工悠抹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珠月,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓楔敌,卻偏偏與公主長(zhǎng)得像啤挎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卵凑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容