【Java高级工程师蜕变之路】061 分布式系统设计策略之心跳检测
本文阐述了分布式系统中常见的设计策略。
分布式系统设计策略
2022/03/01 校对完成
文章更新历史
2022/03/01 初稿。
分布式系统中需要解决的问题
- 如何检测当前节点是否存活?
- 如何保障高可用
- 容错处理
- 负载均衡
心跳检测
检测节点故障的通用手段:心跳检测
心跳,就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为一个节点和现在的网络是良好的。
心跳汇报时,一般会携带附加状态、元数据信息等,便于管理。
若Sever没有收到Node3的心跳时,Server认为Node3失联。
但是失联只是Node3失去联系,不代表Node3存在故障,有可能是Node3处于繁忙状态,导致调用检测超时,也有可能Server与Node3直接出现网络闪断或者链路故障。
因此,心跳不是万能的。收到心跳可以确认正常,但是收不到心跳,不能认定该节点已经死亡。这时候,可以通过一些方法帮助Server做决定:
周期性心跳检测机制、累计失效检测机制。
-
周期性心跳检测机制
Server每隔t秒向Node集群发送检测请求,设定超时时间,如果超过超时时间,则判断死亡,可以把该节点踢出集群。
-
累计失效检测机制
在周期心跳检测机制的基础上,统计一定周期内节点的返回情况(包括超时和正确返回),用来计算此节点的死亡概率。
对于宣告濒临死亡的节点,可以发起有限次的重试,以做进一步判断,如果超过次数,可以把该节点踢出集群。