Gossip

通常以随机的“对等选择”形式实现:以给定的频率,每台计算机随机选择另一台计算机,并共享任何消息。

一种比较原始的执行过程:

  • 种子节点周期性的散播消息;
  • 被感染节点随机选择N个邻接节点散播消息;
  • 节点只接收消息不反馈结果;
  • 每次散播消息都选择尚未发送过的节点进行散播;
  • 收到消息的节点不回传散播;

整个传播过程可能需要一定的时间,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。

消息传播方式

  • Anti-Entropy(反熵传播)
  • Rumor-Mongering(谣言传播)

反熵传播(SI model)

每个节点周期性地随机选择其他节点,然后通过互相交换自己的所有数据来消除两者之间的差异。;所有参与节点只有两种状态:

  • Suspective(病原):处于 susceptible 状态的节点代表其并没有收到来自其他节点的更新。
  • Infective(感染):处于 infective 状态的节点代表其有数据更新,并且会将这个数据分享给其他节点。

缺点:每次节点两两交换带来非常大的通信负担。(因此,通常用于新加入节点的数据初始化)

谣言传播(SIR model)

仅传播新到达的数据,在某个时间点之后会被标记为removed,并且不再被传播。

所有参与节点有三种状态:Suspective(病原)、Infective(感染)、Removed(愈除)。

  • Removed(愈除):其已经接收到来自其他节点的更新,但是其并不会将这个更新分享给其他节点。

通常用于节点间数据增量同步。

通信方式

两个节点之间的通信方式:

  • Push:向A节点推送自己的信息;
  • Pull:从A节点获取信息;
  • PushAndPull:向A节点推送自己的信息,并从A节点获取信息;

优缺点

优点:

  • 节点对等;
  • 可扩展性:允许扩缩节点;
  • 容错&故障检测
  • 最终一致性

缺点:

  • 消息延迟
  • 消息冗余
  • 拜占庭问题

QA

1.在一个庞大的集群中,对某个数据修改后,如何同步到其他节点?

  • 谣言传播。

2.在一个去中心化的集群中,各节点都是对等节点。如何同步数据,使保证各节点数据达到一致?

  • 新节点上线时,通过反熵拉取数据。数据更新时,通过谣言传播同步数据。

3.每次反熵都需要传输所有数据才能对比,有什么方案优化?

  • 每次对比只传输增量数据进行对比;
  • 对数据进行hash,先传输hash判断是否一致,再决定要不要传数据;

4.谣言传播何时停止?

  • 提供一个概率或某个阈值。

results matching ""

    No results matching ""