言简意赅--聊聊分布式Gossip协议

139 阅读3分钟

前言

大伙要先 对 分布式一致性共识 搞清楚概念:

一致性是节点之间的数据差异,而共识是实现一致性的过程和方法。千万别觉得高深莫测!!!

上篇讲到(言简意赅--聊聊Raft协议 - 掘金 (juejin.cn)),Raft协议是一种强一致性的分布式共识算法

与强一致性相对应的当然是最终一致性算法,常见的最终一致性分布式系统便是DNS系统,域名服务器缓存的旧IP,必须要等缓存时间结束后才能去远端域名服务器拿到最新IP。

Gossip(流行病传播)也是一种分布式最终一致性算法。

正篇

Gossip的工作原理非常简单,正如其名流行病传播。节点之间数据信息的传播就像流行病扩散一样,一传十,十传百。只不过这个过程需要一定的耗时,而这也是最终一致性的根本原因。

下面看看具体步骤:

  1. 如果一个消息需要在分布式各个节点传播。在周期内,消息源节点随机选取相邻的N个节点进行消息传播
  2. 其他节点收到消息,如果之前未收到此消息。则在下一个周期开始,每次随机选择相邻的N个节点传播消息。

如上步骤,重复。直至所有节点全部收到该消息。

按照上面的流程设想,Gossip协议的优势和特点一目了然

  • 完全去中心化,不像Raft等一致性协议必须要有主节点。Gossip节点人人平等,任何节点都可以是消息源
  • 可用性极强,不像Raft等一致性协议必须要大多数节点正常 才可以工作。
  • 节点可以随意地扩容,缩容
  • 达到消息一致性的时间极快。(就和流行病一样,呈指数级传播)想想新冠的传播速度😥😥😥

缺点也明显

  • 消息冗余:因为对于同一消息,A > C,B > C;C就会收到两份相同消息,所以第二次收到消息是多余的
  • 延迟:消息的发送是随机选择少量节点发送,耗费时间久。

为了解决以上两个缺点,Gossip设置了两种不同的消息传播方式

消息传播方式

反熵

熵代表混乱,反熵就是尽量保持相同,消除数据差异。具体过程如下:

集群中每个节点周期内都会主动随机选择N个节点,两两之间互相交换全部数据。使得节点之间数据维持相同。下图步骤都用红色数字标记

image-20230827223105469.png 优点:达到一致性的时间更快一点。缺点:消息数量庞大,占用带宽大

谣言传播

当一个节点有了新数据后,这个节点变成活跃状态,并周期性地联系其他节点向其发送新数据,其他节点又向其他节点发送新数据,直到所有的节点都存储了该新数据。(就像一条重磅新闻 大伙一传十,十传百。同时具有随机性)。

一段时间后,该消息标记为Reomved,不再进行传递

优点:网络传输开销相对反熵小;更符合Gossip协议的初衷

缺点:由于传播具有随机性,可能会导致某些节点收不到消息,造成和整个系统不一致。消息冗余问题

最后

好了,上面所讲的是Gossip协议的规范标准。具体落地各大组件可能有所不同,以后我们可以结合Redis Cluster的Gossip协议彻底搞透。