分布式之gossip共识算法分析

文章探讨了在高可用性系统需求下,当raft协议不再适用时如何转向使用gossip协议。gossip协议通过直接邮寄、反熵和谣言传播三种方式确保数据的一致性。直接邮寄用于同步更新,反熵实现数据并集达到最终一致性,谣言传播则适用于节点数多或动态变化的场景。这种去中心化的集群设计能保证即使只剩一个节点也能维持服务。
摘要由CSDN通过智能技术生成

写在前面

假如你的业务对系统的可用性要求非常高,就算集群只剩下一个节点,也要能够正常对外提供服务(虽然此时系统能力已经骤降,但至少还在!),因为raft 要求大多数节点可用所以就没有用武之地了。此时,我们就可以考虑使用gossip协议了,使用该协议来实现一种去中心化的集群,从而实现只有一个节点集群依然坚挺

1:gossip都有哪些内容

gossip有如下3部分内容:

直接邮寄:收到更新的节点直接随机选择若干个节点,将更新同步到这些节点上
反熵:异步的以对比的方式来同步数据,实现数据最终一致性
谣言传播:异步的随机选择若干个节点,传播数据,然后收到数据的节点,再随机选择若干个节点,随机传播数据,重复这个过程,直到所有节点都收到了数据

分别来看下这3种方式。

2:直接邮寄

这种方式比较简单,先将需要同步的更新缓存到队列中,然后随机选择若干个节点,同步更新,如下图节点A随机选择了节点B和节点D来同步数据:

在这里插入图片描述

但是这种方式只能实现数据的安全性(因为同步到多个副本了),无法实现最终一致性,所以还需要反熵以及谣言传播机制。

3:反熵

这种方式是集群中的节点定时选择一个其他节点来并对比二者数据,达到最终一致性,其实就是一个取数据并集的过程,如下节点A同步数据到节点D:

在这里插入图片描述

具体的同步方式有三种,,即上图的方式。

在这里插入图片描述

推拉

在这里插入图片描述

在工程上,为了加快同步的速度,以及对比的次数我们可以使用推拉方式的环状复制,假设有A,B,C,D 4个节点,则这个过程可能如下图:

在这里插入图片描述

假设A的数据是1,B的数据是2,C的数据是3,D的数据是4,则达到最终一致性的同步过程如下:

1:A对B推拉数据 
    A数据为12,B数据为12
2:B对C推拉数据
    A数据为12,B数据为123,C数据为123
3:C对D推拉数据
    A数据为12,B数据为123,C数据为1234,D数据为1234
4:D对A推拉数据(注意这里如果没有5,A重新推拉B,则B将缺失数据4)
    A数据为1234,B数据为123,C数据为1234,D数据为1234
5:A对B推拉数据(各节点就达到了最终数据一致性)
    A数据为1234,B数据为1234,C数据为1234,D数据为1234

这种方式适合于节点已知稳定不变,且节点数较少的场景中,如果是节点比较多或者是节点数动态变化时就需要使用谣言传播来达到最终一致性了,接着也来看下。

4:谣言传播

这是一种类似于谣言传播的数据同步方式,一传十,十传百,具体是一个节点随机的选择一批节点同步更新,然后收到更新的节点重复这个过程,直到所有的节点都收到了更新为止,如下:

在这里插入图片描述

如上图就是节点A首先同步给节点B和节点D,然后节点B同步给节点C和节点E,这样所有的节点就都有了来自节点A的更新,达到了最终一致性。

写在后面

小结

本文分析了基于raft算法的中心化架构存在的问题,基于此引出了适用于非中心化架构的gossip协议,并一起看了其直邮,反熵,谣言传播三种更新同步的方式。希望本文能够帮助到你,如果你有什么问题,就留言我们一起讨论吧!

参考文章列表

分布式理论之共识算法gossip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值