開(kāi)篇:
- gossip是傳播協(xié)議,在很多地方都有用到痹愚,比如在Redis集群中用于節(jié)點(diǎn)間消息通知,上下線蛔糯,角色修改等消息傳播等拯腮。
- gossip顧名思義類(lèi)似于病毒傳播的場(chǎng)景,一傳十蚁飒,十傳百动壤。
流程:
- gossip集群中每個(gè)節(jié)點(diǎn)都有其他n個(gè)或全部節(jié)點(diǎn)的通訊方式。
- 開(kāi)始時(shí)一個(gè)節(jié)點(diǎn)被感染淮逻,會(huì)從n個(gè)節(jié)點(diǎn)中選出規(guī)定節(jié)點(diǎn)數(shù)(比如10個(gè))進(jìn)行傳播琼懊,傳播后被感染一共11個(gè)節(jié)點(diǎn)再執(zhí)行這個(gè)步驟阁簸,就會(huì)有新的110個(gè)節(jié)點(diǎn)被感染,以此類(lèi)推哼丈,直到所有節(jié)點(diǎn)都被感染启妹。
- 當(dāng)然在傳播過(guò)程中會(huì)出現(xiàn)重復(fù)傳播,不過(guò)經(jīng)過(guò)一定次數(shù)傳播后所有節(jié)點(diǎn)必定會(huì)都被傳染削祈,周期是O(logN) 翅溺。
- 單個(gè)節(jié)點(diǎn)會(huì)多次傳播,但不會(huì)重復(fù)傳播髓抑,如果之前已經(jīng)傳染過(guò)鄰居A咙崎,那下次就不會(huì)再傳染了。
其他:
- 傳播過(guò)程中吨拍,傳播節(jié)點(diǎn)不會(huì)管消息是否被接收到褪猛。
- raft:gossip和raft有一些共性,都可以解決分布式一致性的問(wèn)題羹饰,但raft有Leader伊滋、強(qiáng)一致,gossip是對(duì)等模式?jīng)]有Leader队秩、最終一致笑旺,可能這個(gè)對(duì)比不太貼切,raft一般會(huì)和paxos等強(qiáng)一致性算法作對(duì)比馍资。