概况
Gossip 协议,利用一种随机带有传染性的方式将信息传播到整个网络中,并在一定的时间内使得所有节点数据一致。
一些定义
直接邮寄
直接将更新数据发送到对应节点,发送失败将数据缓存下来然后重传
反熵
每隔一段时间随机选择某个其他节点相互交换自己的所有数据消除两者之间的数据差异,实现数据最终一致。
实现方式有:推、拉、推拉
每次反熵都需要对比所有的数据,所以很消耗性能和通信,可以通过校验和等机制减少通信数据量
谣言传播
当一个节点有了新的数据后,这个节点变成活跃状态,周期地联系其他节点发送新数据,直到所有节点都有了新的数据。
因为传递到别的节点后,别的节点也会变成活跃节点去传播这个数据,所以就像谣言一样广泛被传播。
这个和网络中的泛洪更新时类似的。
过程
其实 gossip 协议的过程非常简单
- 收到新数据的节点将数据直接邮递给别人
- 通过谣言不断传播
- 最终所有节点数据一致
- 过程中如果出现意外进行重传
- 定期进行反熵保证数据最终一致
总结
其实 gossip 就是一个不断传播更新的过程,只是在过程中添加了协调让节点的数据竟可能去往最终一致上靠。很显然,虽然数据最终一致,但是过程中肯定会有不一致的情况存在,虽然更新收敛速度很快,但是还是存在,并且网络中的通信会很频繁也是一个问题。
设计合理的反熵策略,利用一个闭环的更新或者是一个快速比较器或许能更加快速的得到同步的信息。