0

我无法理解 Akka 中使用的集群算法。

在 akka Gossip Protocol的描述中,它说:

gossip 状态或 gossip 状态的接收者可以使用 gossip 版本(向量时钟)来确定是否:

  1. 它有一个更新版本的 gossip 状态,在这种情况下,它会将它发送回 gossiper
  2. 它有一个过时的状态版本,在这种情况下,接收者通过发回它的八卦状态版本来向八卦者请求当前状态
  3. 它有相互冲突的八卦版本,在这种情况下,不同的版本被合并并发回

第二步似乎浪费了通信,因为 gossiper 发送了两次它的状态。一次是当它发现它没有最新版本时,再一次是当接收者通过发回自己的过时版本来想要最新版本时。

我认为我对此有误解,因为我对矢量时钟和 CFRD 的理解有限,并且 Akka 文档中给出的描述很短,而维基百科的文章是高级的。就我而言,矢量时钟是 CRDT 的一种实现,但这可能是不正确的。

但最后我不明白为什么八卦节点需要两次传达其状态。请说清楚。

但我想我可能误解了vector Akka Cluster

4

1 回答 1

0

就像文档中所述,Akka 实现:

推拉式 gossip 的一种变体用于减少在集群周围发送的 gossip 信息量。在 push-pull gossip 中,发送的摘要表示当前版本,但不是实际值;然后,八卦的接收者可以发回它具有较新版本的任何值,也可以请求具有过时版本的值。

因此,简化了,在情况 2中,当八卦消息的接收者看到它具有集群状态的过时版本时,它会向八卦消息者询问最后一个状态。因此,从 gossiper 到接收者的第一条消息携带版本,从 gossiper 到接收者的第二条消息携带节点的实际状态。

希望这可以帮助。

于 2017-12-18T21:01:26.137 回答