gpt4 book ai didi

erlang - Erlang 中终止节点的检测是如何工作的? net_ticktime 如何影响 Erlang 中节点活跃度的控制?

转载 作者:行者123 更新时间:2023-12-04 20:07:16 28 4
gpt4 key购买 nike

我将 net_ticktime 值设置为 600 秒。

net_kernel:set_net_ticktime(600)

在 net_ticktime = TickTime 的 Erlang 文档中:

指定 net_kernel 滴答时间。 TickTime 以秒为单位给出。每隔 TickTime/4 秒,所有连接的节点都会被勾选(如果其他任何内容已写入节点),并且如果在最后四 (4) 次勾选时间内没有从另一个节点接收到任何内容,则该节点被视为关闭。这可确保由于硬件错误等原因而未响应的节点被视为已关闭。

检测到未响应节点的时间 T:
MinT < T < MaxT where:

MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4

TickTime 默认为 60(秒)。因此,45 < T < 75 秒。

Note: Normally, a terminating node is detected immediately.



我的问题:
我的 TickTime 是 600(秒)。因此,450(7.5 分钟)< T < 750 秒(12.5 分钟)。虽然,当我将 net_ticktime 在 Erlang 中的所有分布式节点设置为值 600 时,当某个节点出现故障时(例如,当我关闭 Erlang shell 时)然后其他节点立即收到消息而不是根据 ticktime 的定义。

然而,值得注意的是,通常会立即检测到终止节点,但我找不到对分布式 Erlang 中节点终止的这种立即响应原则的解释(既不在 Erlang 文档中,也没有在 Erlang 电子书或其他基于 Erlang 的来源中)。分布式环境中的节点是否以小于 net_ticktime 的间隔定期 ping 通还是终止节点在终止之前向其他节点发送某种消息?如果它确实发送消息,是否有任何情况下终止节点无法发送此消息并且必须ping以调查其活跃度?

Erlang 文档中还指出,对于大于 100 个节点的集群,分布式 Erlang 的可扩展性不是很好,因为每个节点都保持与集群中所有节点的链接。调查节点活跃度(ping、宣布终止)的算法是否随着集群大小的增加而修改?

最佳答案

当两个 Erlang 节点连接时,它们之间会建立 TCP 连接。您引发的故障会导致底层操作系统关闭连接,从而非常快速地有效通知其他节点。

网络滴答用于检测与远程节点的连接,该连接看似已启动但实际上并未通过流量,例如当网络事件隔离节点时可能会发生这种情况。

如果您想模拟需要滴答来检测的故障,请使用防火墙来阻止节点首次 ping 时创建的连接上的流量。

关于erlang - Erlang 中终止节点的检测是如何工作的? net_ticktime 如何影响 Erlang 中节点活跃度的控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24061270/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com