节点如何知道哪些节点已经看到集群当前状态?

2024-03-01

我正在阅读 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(使用前将#替换为@)

节点如何知道哪些节点已经看到集群当前状态? 的相关文章

随机推荐

  • 在 testthat 中测试确切的字符串

    我想测试我的函数之一是否给出特定消息 或警告或错误 good lt function message Hello bad lt function message Hello 我希望第一个期望成功 第二个期望失败 library testth
  • NHibernate QueryOver:在子查询中使用 group by 获取行计数

    我试图从带有 group by 的查询中获取计数 但不知道如何将我想要的 SQL 转换为 NHibernate 的 QueryOver 语法 这是 SQL select count from select Email from Entry
  • REGEX - PHP 仅获取字符串中的粗体部分

    我是正则表达式的新手 我有一个像这样的字符串 Hello b ABCD b World or b ABCD b Hello World 我基本上想保留粗体标签内的文本 但删除字符串中的所有其他字符 我找到了删除字符串中粗体部分的代码 str
  • 使用值转换器时如何查询实体框架核心中的实际值?

    我们有一个相当简单的情况 其中 EF Core 实体包含一个我们映射到字符串的值对象 builder Property gt Nummer HasConversion i gt i ToString i gt ZijdeNummer Fro
  • Java获取Referer URI?

    我想要与完全相同的方法获取请求URI http docs oracle com javaee 6 api javax servlet http HttpServletRequest html getRequestURI 28 29 但我想在
  • 有没有什么方法可以让javascript循环休眠?

    例如 有一个 for 循环 我想休眠几秒钟 each para res function index item Sleep 100 我知道我可以使用 setTimeout 或 setInterval 但它们都是异步的 循环将继续 如果我这样
  • 套接字 Python 3.5:套接字服务器在文件接收时永远挂起

    我正在尝试编写一个Python程序 如果客户端连接到服务器 它可以浏览目录并通过套接字抓取文件 浏览部分工作正常 它打印出客户端的所有目录 这是代码的一部分 with clientsocket print Connected to addr
  • 可安装的触发器因测试附加组件而失败

    几天来我一直在努力解决可安装的触发器问题 我的所有研究表明 附加组件应该允许在电子表格中安装可安装的 onEdit 触发器 但我的尝试不断出错 我稍微简化了我的项目代码来举例说明我的问题 错误信息 执行失败 测试加载项尝试执行不允许的操作
  • jQuery UI DatePicker 仅显示年份

    我正在使用 jQuery datepicker 来显示日历 我想知道是否可以使用它来仅显示 Year 而不是完整的日历 NOTE 如果有人反对 为什么我现在回答这个问题 因为我尝试了这篇文章的所有答案 但没有得到任何解决方案 所以我尝试了自
  • Hibernate 和 JDBC 性能? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 对于 Pandas 数据框中的每一行,确定另一列中是否存在列值

    我有一个像这样的熊猫数据框 df pd DataFrame category A B C A category pred A B D A B C D print df category category pred 0 A A 1 B B D
  • 在 Cocoa 应用程序中使用异常处理与 NSError

    大家好 我一直在阅读苹果关于何时 何地 如何使用 NSError 与 try catch finally 的建议 本质上 我的印象是苹果认为最好避免使用异常处理语言结构 除非作为在意外错误情况下停止程序执行的机制 也许有人可以举一个这种情况
  • ggplot2:如果位置=“填充”,则在条形图上添加标签

    我想在a上添加 数字filled条形图 这是标签位于错误位置的图 这是数据框 x0 lt expand grid grp c G1 G2 treat c T1 T2 out c out1 out2 out3 out4 set seed 12
  • Facebook-passport 与 JWT

    我一直在使用Passport在我的服务器上进行用户身份验证 当用户在本地登录 使用用户名和密码 时 服务器会向他们发送JWT它存储在 localstorage 中 并在每次需要用户身份验证的 api 调用时发送回服务器 现在我想支持Face
  • Python zipfile.extract() 不会提取所有文件

    我正在尝试使用此处找到的代码提取压缩文件夹 def unzip source filename dest dir with zipfile ZipFile source filename as zf for member in zf inf
  • Java 中的向上转型/向下转型

    我试图理解 Java 中的向上转型和向下转型 但我对以下场景感到困惑 关于我的代码 如下 首先 为什么当我包含该行时代码无法编译myAnimal bark 第二个 假设我注释掉myAnimal bark 为什么调用myAnimal move
  • PostgreSQL 中带有字符串的 For 循环

    这里我试图连接一个字符串 CREATE FUNCTION looping RETURNS TABLE round text DECLARE i RECORD BEGIN FOR i IN select regexp split to tab
  • 我可以在一个 MTLRenderCommandEncoder 中使用多个 MTLRenderPipelineStates 吗?

    我目前正在为游戏制作简单的 UI 为了绘制每个按钮 我需要使用 2 个管道状态 每个按钮使用相同的顶点着色器 一种是使用静态颜色片段着色器绘制边框线带 另一种是使用波纹渐变绘制按钮的内部 我想知道是否需要两个不同的渲染命令编码器 每个管道一
  • 如何在平面列表中交替颜色(React Native)

    尝试交替颜色React Natives Flatlist 我相信我需要 rowID 或类似的东西来做到这一点 这是我到目前为止所得到的 let colors 123456 654321 fdecba abcdef
  • 节点如何知道哪些节点已经看到集群当前状态?

    我正在阅读 akka 文档 并在理解他们的实现方式时遇到了一些麻烦Gossip 文档在这里 http doc akka io docs akka 2 4 common cluster html Gossip Protocol 让我困惑的部分