在Fabric的論文中提到:
需要一種通信方式來(lái)保證各個(gè)節(jié)點(diǎn)之間的傳播可信、可擴(kuò)展,并且可以支持拜占庭容錯(cuò)。Fabric在其框架中使用的就是gossip協(xié)議。
Gossip協(xié)議
那么鼎鼎大名的gossip到底是何方神圣呢?
gossip protocol主要是在分布式數(shù)據(jù)庫(kù)中各個(gè)副本節(jié)點(diǎn)之間同步數(shù)據(jù)時(shí)使用,這就和區(qū)塊鏈本身的去中心化特點(diǎn)十分相似,而且,這種場(chǎng)景的一個(gè)最大特點(diǎn)就是組成的網(wǎng)絡(luò)的節(jié)點(diǎn)都是想對(duì)等的(這個(gè)fabric中的peer節(jié)點(diǎn)是基本一致的),屬于一種非結(jié)構(gòu)化的網(wǎng)絡(luò)。
使用gossip協(xié)議的最有名的區(qū)塊鏈項(xiàng)目就是Bitcoin了(但Ethereum則使用的是機(jī)構(gòu)化網(wǎng)絡(luò)中的DHT算法)。
gossip 過(guò)程是由種子節(jié)點(diǎn)發(fā)起,當(dāng)一個(gè)種子節(jié)點(diǎn)有狀態(tài)需要更新到網(wǎng)絡(luò)中的其他節(jié)點(diǎn)時(shí),它會(huì)隨機(jī)的選擇周圍幾個(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é)議。
正如協(xié)議的名字一樣,在傳播的過(guò)程中,整個(gè)信心就像是人們口中的八卦一樣,一傳十,十傳百,而gossip正是擁有這樣的能力。
gossip具體實(shí)施過(guò)程中需要注意的幾點(diǎn)如下:
1.gossip是周期性的傳播消息,我們可以對(duì)傳播周期進(jìn)行設(shè)定
2.被傳染的節(jié)點(diǎn)要隨機(jī)選擇k個(gè)臨近點(diǎn)進(jìn)行傳播,當(dāng)然這個(gè)k值也是需要我們自己來(lái)進(jìn)行設(shè)定的
3.在傳播過(guò)程中,一定要注意是往未發(fā)送過(guò)的節(jié)點(diǎn)***傳播的
4.收到消息的節(jié)點(diǎn)將不會(huì)再繼續(xù)往發(fā)送節(jié)點(diǎn)傳播,也就是說(shuō)消息傳播都是單向的
gossip具有很多的優(yōu)點(diǎn):
1)擴(kuò)展性
在網(wǎng)絡(luò)中可以很容易的進(jìn)行擴(kuò)展,節(jié)點(diǎn)可以任意的增加和減少
2)容錯(cuò)
任何一個(gè)節(jié)點(diǎn)宕機(jī)都不會(huì)影響到gossip的傳播,這對(duì)分布式系統(tǒng)來(lái)說(shuō)是一個(gè)很好的特性
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)一致性收斂
傳播的方式是一傳十,十傳百的,速度會(huì)越來(lái)越快,可以保證在一定時(shí)間內(nèi)實(shí)現(xiàn)所有節(jié)點(diǎn)的消息都收斂到一致,傳播速度也達(dá)到了
5)簡(jiǎn)單
正如名字所說(shuō),整個(gè)系統(tǒng)實(shí)施起來(lái)就和傳播流言沒(méi)有任何區(qū)別

gossip類型:
Anti-Entropy
這一種稱為反熵模式,即以固定的概率傳播所有的數(shù)據(jù)。
Anti-Entropy 是 SI model,節(jié)點(diǎn)只有兩種狀態(tài),Suspective 和 Infective,叫做 simple epidemics。
反熵這個(gè)次聽起來(lái)很奇怪,但我們通過(guò)他的具體模式介紹就可以很清楚的明白,反熵的含義就是要降低節(jié)點(diǎn)之間的混亂程度,而實(shí)現(xiàn)節(jié)點(diǎn)間的高度相似。
在 SI model 下,一個(gè)節(jié)點(diǎn)會(huì)把所有的數(shù)據(jù)都跟其他節(jié)點(diǎn)共享,以便消除節(jié)點(diǎn)之間數(shù)據(jù)的任何不一致,它可以保證最終、完全的一致。
由于在 SI model 下消息會(huì)不斷反復(fù)的交換,因此消息數(shù)量是非常龐大的,無(wú)限制的(unbounded),這對(duì)一個(gè)系統(tǒng)來(lái)說(shuō)是一個(gè)巨大的開銷。
Rumor-Mongering
這一種稱為謠言傳播,它僅傳播新到達(dá)的數(shù)據(jù)
Rumor-Mongering 是 SIR model,節(jié)點(diǎn)有三種狀態(tài),Suspective,Infective 和 Removed,叫做 complex epidemics。
但是在 Rumor Mongering (SIR Model) 模型下,消息可以發(fā)送得更頻繁,因?yàn)橄⒅话钚?update,體積更小。而且,一個(gè) Rumor 消息在某個(gè)時(shí)間點(diǎn)之后會(huì)被標(biāo)記為 removed,并且不再被傳播,因此,SIR model 下,系統(tǒng)有一定的概率會(huì)不一致。
而由于,SIR Model 下某個(gè)時(shí)間點(diǎn)之后消息不再傳播,因此消息是有限的,系統(tǒng)開銷小。
因此,對(duì)于每種方法該如何進(jìn)行選擇是需要經(jīng)過(guò)長(zhǎng)時(shí)間考慮的。
gossip中的通信模式
在 Gossip 協(xié)議下,網(wǎng)絡(luò)中兩個(gè)節(jié)點(diǎn)之間有三種通信方式:
- Push: 節(jié)點(diǎn) A 將數(shù)據(jù) (
key,value,version) 及對(duì)應(yīng)的版本號(hào)推送給 B 節(jié)點(diǎn),B 節(jié)點(diǎn)更新 A 中比自己新的數(shù)據(jù),在Fabric的論文中對(duì)于這個(gè)一點(diǎn)也有較為詳細(xì)的論述 - Pull: A 僅將數(shù)據(jù)
key,version推送給 B,B 將本地比 A 新的數(shù)據(jù)(Key, value, version)推送給 A,A 更新本地 - Push/Pull: 與
Pull類似,只是多了一步,A 再將本地比 B 新的數(shù)據(jù)推送給 B,B 則更新本地