分布式协议与算法实战——Gossip协议(笔记)

Gossip是实现最终一致性的算法

Gossip 协议:就像流言蜚语一样,利用一种随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。

Gossip 的三板斧

直接邮寄:就是直接发送更新数据,当数据发送失败时,将数据缓存下来,然后重传。虽然实现起来比较容易,数据同步也很及时,但可能会因为缓存队列满了而丢数据。只采用直接邮寄是无法实现最终一致性的,
反熵:指的是集群中的节点,每隔段时间随机选择某个其他节点,然后通过互相交换自己的所有数据来消除两者之间的差异,实现数据的最终一致性。反熵是一种通过异步修复实现最终一致性的方法。在实现反熵的时候,主要有推、拉推拉三种方式。推方式,就是将自己的所有副本数据,推给对方修复对方副本中的熵;拉方式,就是拉取对方的所有副本数据,修复自己副本中的熵;推拉这个方式就是同时修复自己副本和对方副本中的熵。

因为反熵需要节点两两交换和比对自己所有的数据,执行反熵时通讯成本会很,所以不建议在实际场景中频繁执行反熵,并且可以通过引入校验和(Checksum)等机制,降低需要对比数据量和通讯消息等。虽然反熵很实用,但是执行反熵时,相关的节点都是已知的,而且节点数量不能太多,如果是一个动态变化节点数比较多的分布式环境,这时反熵就不适用了。

谣言传播:广泛地散播谣言,指的是当一个节点有了新数据后,这个节点变成活跃状态,并周期性联系其他节点向其发送新数据,直到所有的节点都存储了该新数据。谣言传播非常具有传染性,它适合动态变化的分布式系统

使用 Anti-entropy 实现最终一致

反熵的目标是确保每个 DATA 节点拥有元信息指定的分片,而且不同节点上,同一分片组中的分片都没有差异。数据缺失分为缺失分片:也就是说,在某个节点上整个分片都丢失了;节点之间的分片不一致:也就是说,节点上分片都存在,但里面的数据不一样,有数据
丢失的情况发生。
对于缺失分片修复起来不复杂,只需要将分片数据,通过 RPC 通讯,从其他节点上拷贝过来就可以了;节点之间的分片不一致修复过程为按照一定顺序来修复节点的数据差异,先随机选择一个节点,然后循环修复,每个节点生成自己节点有、下一个节点没有的差异数据,发送给下一个节点,进行修复。
在这里插入图片描述
:因为反熵需要做一致性对比,很消耗系统性能,所以建议你将是否启用反熵功能、执行一致性检测的时间间隔等,做成可配置的,能在不同场景中按需使用

猜你喜欢

转载自blog.csdn.net/weixin_42094659/article/details/107573994