GOSSIP论文笔记

  最近在学习分布式系统遇到了GOSSIP协议,感觉论文里介绍的不够全面,网上的博客千篇一律,并且没有把协议讲清楚,所以我自己翻了原paper,发现排版有点老旧不适合阅读,所以就决定自己写一篇以便以后回忆。

  GOSSIP的研究背景就不介绍了,直接介绍内容。

GOSSIP用途

  GOSSIP是用于分布式系统的一致性算法,确保各个主机最终能获得一致消息。

GOSSIP原理

  GOSSIP译作流言蜚语,假语村言。是根据流行病传播模型提出的一种算法:一台机器有新消息后会将这条消息传给其它机器。

  具体实现读者可以自己试着设计,论文中给出了三种方法:

  1. Direct Mail:一台机器的数据被更改时,这台机器将消息发送给其它所有已知主机。
  2. Anti-entroy:每个一段时间,一台机器随机选取另一台机器交换它们的所有数据,如果两台机器同一个数据更新的时间不同,那么数据版本较旧 的机器会把数据更新为较新的版本。
  3. Rumor mongering:机器收到一个新消息后,周期性地随机传播给其它机器,直到尝试传播的绝大部分机器都已经被传播过。

Direct Mail

  Direct Mail最大的优点就是简单,然而却极度依赖发送端机器的缓冲区大小:一旦有大量机器长时间无法访问,那么发送端的缓冲区就会溢出。另外,发送端机器也可能不知道整个网络里的所有主机,导致一部分主机永远收不到消息。

Anti-entroy

  Anti-entroy统一数据版本的实现有三种(这三种方法怎么好意思写在论文里):

  1. Push:如果发现自己的数据比其它主机的数据版本新,更新其它主机的数据。
  2. Pull:如果发现其它主机的数据比自己的数据版本新,更新自己的数据。
  3. Push-Pull:如果发现自己的数据和其它主机数不一致后,更新较旧的那个。

  Anti-entroy最大的缺点是开销很大:需要传输整个数据库,然后逐一比较。

  避免大规模开销的方法是每台机器保存数据库的checksum,和最近一段时间内的修改值列表。执行anti-entroy的两台机器先交换checksum和修改值列表,每台机器先根据修改值列表更新自己的数据库,再算出checksum是否和另一台机器的checksum符合,若不符合则对比全部数据。

Rumor mongering

  Rumor mongering方法是一个经典流行病传染算法。假设有一群人,开始时没有人知道任何流言,这时我们让其中一个人知道一个流言,这个人就会随机地和周围人散布这个流言,其它人听到流言后也会向其它人散播这个流言。当散播一段时间后,当一个人发现他随机散布流言的那些人大多数都知道了这个流言,他就停止散播这个流言了。

  Rumor mongering方法还有改进方法,比如多次散布流言发现大多数人都知道这个流言后,才停止传播流言。

其它

  这篇论文后面的其它内容还是很丰富的,挖坑。

 

posted @ 2020-12-01 19:38  Nanachi  阅读(371)  评论(0)    收藏  举报