分布式协议系列文章目录
Gossip,流言蜚语传播协议
Gossip协议是一种去中心化思想的分布式协议,解决数据在分布式集群中的传播和一致性。就如其字面意思流言蜚语一样,利用一种随机并带有传染性的方式,在一定时间内将信息传播到整个网络中,使得分布式中所有节点数据一致。
Gossip协议中有直接邮寄(Direct Mail)、反熵(Anti-entropy)和谣言传播(Rumor mongering)三种传播方式。
直接邮寄(Direct Mail)
直接邮寄就是指在接收到消息后立刻发送给其他节点,如果数据发送失败,就将数据缓存下来然后重传。该方式实现起来容易且数据同步及时,但是如其名发送邮件一样,对方不一定能接收到或者处理成功,也会因为缓存队列满了而丢数据,综上直接邮寄是无法实现最终一致性的。
如上图所示,节点A在处理完数据后,直接将此次更新数据的动作邮寄给了节点B和节点C,以便节点B和节点C同步完成更新动作实现一致性。
反熵(Anti-entropy)
何为熵,熵就是指混乱程度,即反熵就是消除混乱程度,分布式领域就是消除不同节点中数据的差异,以达到各个节点间的数据一致性。
反熵是一种通过异步修复实现最终一致性的方法,换言之每隔一段时间就在分布式集群中随机选择节点,然后通过相互交换自己所有数据的方式来消除节点之间的差异,从而实现数据的最终一致性。
反熵有推、拉和推拉三种方式实现方式,
推
所谓推就是节点主动将自己的所有副本数据推给其它节点,修复其它节点副本中的熵,使用推的模式可以提高整个分布式集群中数据的实时性,
拉
所谓拉就是节点主动请求获取其它节点的最新数据副本,以修复自己副本中的熵。虽然拉的模式可以减少一些不必要的网络开销,但是也会造成消息的延迟。
推拉
所谓推拉就是推和拉两种方式相结合,如节点A主动请求获取节点C的最新数据副本,节点C将自己最新的数据副本返回给节点A后,节点A又将自己的最新数据副本推送给节点B。
反熵需要节点两两交换和比对自己所有的数据,且执行反熵时通讯成本极高,从而需要在进行反熵时引入校验和等机制,以降低反熵过程中的数据量和通讯成本。
谣言传播(Rumor mongering)
反熵执行效率很高且实现也简单,如果反熵一旦作用于一个动态变化或者节点数比较多的分布式环境中时,就不在适用了。此时就可以选择谣言传播的方式来实现数据最终一致性。
谣言传播,类似于现实生活中一传十、十传百的网络流言一样。即如果当一个节点有了新数据,这个节点就会变成活跃状态,并周期性地联系其它节点向其发送新数据,直到所有的节点都拥有新数据为止。
节点A接收到数据处理完成之后就会变成活跃状态,然后通知节点B和节点D接收处理数据,此时节点B在处理完数据后也会变成活跃状态,然后通知节点C接收处理数据。