gossip最终一致性
gossip实现了最终一致性,性能高。
Gossip 的三板斧分别是:直接邮寄(Direct Mail)、反熵(Anti-entropy)和谣言传播(Rumor mongering)。
• 直接邮寄,即写时修复,直接发送更新数据,当数据发送失败时,将数据缓存在失败重试队列,然后重传。这种方式虽然存在丢数据问题,但是实现简单、数据同步及时,不需要校验数据一致性对比,性能消耗低
• 反熵,即异步修复,集群中的节点,每隔段时间就随机选择某个其他节点,然后通过互相交换自己的所有数据来消除两者之间的差异,实现数据的最终一致性。主要有推、拉、推拉三种实现方式。适合集群节点数已知、少量、稳定的场景,主要由于反熵需要节点两两交换和比对自己所有的数据,执行反熵时通讯成本会很高,性能消耗高。需要注意的是实现反熵时一般设计一个闭环的流程,一次修复所有节点的副本数据不一致,因为我们希望能在一个确定的时间范围内实现数据副本的最终一致性,而不是基于随机性的概率,在一个不确定的时间范围内实现数据副本的最终一致性
• 谣言传播,指的是当一个节点有了新数据后,这个节点变成活跃状态,并周期性地联系其他节点向其发送新数据,直到所有的节点都存储了该新数据。由于谣言传播非常具有传染性,它适合动态变化的分布式系统
Gossip 协议
consul中应用。Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。
https://zhuanlan.zhihu.com/p/41228196
Gossip协议是一种基于”流行病传播”方式的计算机点对点通信、去中心化的最终一致性算法。它的基本思想是有界的集群中每个节点都随机不断的和其他节点交换信息,最终确保网络中所有节点的数据一致。consul中的gossip主要用途就是来做集群成员身份确认、故障发现和广播。
缺点:
1是消息的延迟,Gossip 协议中,消息最终需要通过多个轮次的散播而到达全网,不适合用在对实时性要求较高的场景下。
2是冗余通信会对网络、cpu资源造成很大的浪费。