GOSSIP论文笔记
最近在学习分布式系统遇到了GOSSIP协议,感觉论文里介绍的不够全面,网上的博客千篇一律,并且没有把协议讲清楚,所以我自己翻了原paper,发现排版有点老旧不适合阅读,所以就决定自己写一篇以便以后回忆。
GOSSIP的研究背景就不介绍了,直接介绍内容。
GOSSIP用途
GOSSIP是用于分布式系统的一致性算法,确保各个主机最终能获得一致消息。
GOSSIP原理
GOSSIP译作流言蜚语,假语村言。是根据流行病传播模型提出的一种算法:一台机器有新消息后会将这条消息传给其它机器。
具体实现读者可以自己试着设计,论文中给出了三种方法:
- Direct Mail:一台机器的数据被更改时,这台机器将消息发送给其它所有已知主机。
- Anti-entroy:每个一段时间,一台机器随机选取另一台机器交换它们的所有数据,如果两台机器同一个数据更新的时间不同,那么数据版本较旧 的机器会把数据更新为较新的版本。
- Rumor mongering:机器收到一个新消息后,周期性地随机传播给其它机器,直到尝试传播的绝大部分机器都已经被传播过。
Direct Mail
Direct Mail最大的优点就是简单,然而却极度依赖发送端机器的缓冲区大小:一旦有大量机器长时间无法访问,那么发送端的缓冲区就会溢出。另外,发送端机器也可能不知道整个网络里的所有主机,导致一部分主机永远收不到消息。
Anti-entroy
Anti-entroy统一数据版本的实现有三种(这三种方法怎么好意思写在论文里):
- Push:如果发现自己的数据比其它主机的数据版本新,更新其它主机的数据。
- Pull:如果发现其它主机的数据比自己的数据版本新,更新自己的数据。
- Push-Pull:如果发现自己的数据和其它主机数不一致后,更新较旧的那个。
Anti-entroy最大的缺点是开销很大:需要传输整个数据库,然后逐一比较。
避免大规模开销的方法是每台机器保存数据库的checksum,和最近一段时间内的修改值列表。执行anti-entroy的两台机器先交换checksum和修改值列表,每台机器先根据修改值列表更新自己的数据库,再算出checksum是否和另一台机器的checksum符合,若不符合则对比全部数据。
Rumor mongering
Rumor mongering方法是一个经典流行病传染算法。假设有一群人,开始时没有人知道任何流言,这时我们让其中一个人知道一个流言,这个人就会随机地和周围人散布这个流言,其它人听到流言后也会向其它人散播这个流言。当散播一段时间后,当一个人发现他随机散布流言的那些人大多数都知道了这个流言,他就停止散播这个流言了。
Rumor mongering方法还有改进方法,比如多次散布流言发现大多数人都知道这个流言后,才停止传播流言。
其它
这篇论文后面的其它内容还是很丰富的,挖坑。

浙公网安备 33010602011771号