我正在阅读 akka 文档,并在理解他们的实现方式时遇到了一些麻烦Gossip. (文档在这里 http://doc.akka.io/docs/akka/2.4/common/cluster.html#Gossip_Protocol)。让我困惑的部分(强调我的):
周期性,默认是每1秒,每个节点选择另一个
随机节点发起一轮八卦。如果少于 1/2
节点驻留在已见集合中(已经看到新状态),则
集群八卦 3 次,而不是每秒一次。此次调整
gossip 间隔是一种加速收敛过程的方法
状态改变后的早期传播阶段。
因此,如果八卦轮处于开始阶段(少于 1/2 个节点已看到当前状态),则已见集合中的节点开始每秒发送 3 个八卦,而不是 1 个。但如果八卦聚合发生了,他们怎么知道这一点(他们仍然每秒发送 3 次八卦)。或者,也许收敛就像任何其他“集群事件”一样在整个集群中传播?
正如您可能知道的,当所有节点都被看到时(即所有成员节点都在 Gossip 事件的可见列表中),八卦收敛就会发生。如果集群未聚合,ClusterDeamon 会加速八卦。
def gossipTick(): Unit = {
gossip()
if (isGossipSpeedupNeeded) {
scheduler.scheduleOnce(GossipInterval / 3, self, GossipSpeedupTick)
scheduler.scheduleOnce(GossipInterval * 2 / 3, self, GossipSpeedupTick)
}
}
def isGossipSpeedupNeeded: Boolean =
(latestGossip.overview.seen.size < latestGossip.members.size / 2)
一旦集群收敛,它就会使用配置的八卦间隔回退到正常计划的八卦滴答声。看一下source https://github.com/akka/akka/blob/caa98c0110f3c8ceb7383e745707ed6820841aeb/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala and 测试规格 https://github.com/akka/akka/blob/78b88c419d26caf62e4a91bc1d4f2837a12c543a/akka-cluster/src/test/scala/akka/cluster/GossipSpec.scala的这个功能。希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)