RPC心跳机制设计
- 1.概述
- 2.设计
- 2.1.心跳机制流程设计
- 2.1.1.常规RPC心跳机制设计
- 2.1.2.Dolphinscheduler的RPC心跳机制设计
- 2.2.心跳机制数据模型设计
- 2.3.心跳机制动态配置
- 3.实现
- 3.1.心跳机制数据模型
- 3.1.1.HeartBeat接口
- 3.1.2.基础实现类BaseHeartBeat
- 3.1.3.Master服务中的心跳消息MasterHeartBeat
- 3.1.4.Worker服务中的心跳消息WorkerHeartBeat
- 3.2.系统资源监控服务`dolphinscheduler-meter`
- 3.2.1.系统监控服务配置类MeterAutoConfiguration
- 3.2.2.资源监控数据提供者服务类DefaultMetricsProvider
- 3.2.3.判断服务节点是否负载BaseServerLoadProtection
- 3.2.4.对外提供资源监控数据的类SystemMetrics
- 3.3.心跳检测任务模型
- 3.3.1.心跳检测任务基础类BaseHeartBeatTask
- 3.3.2.Master服务心跳检测任务类MasterHeartBeatTask
- 3.3.3.Worker服务心跳检测任务类WorkerHeartBeatTask
- 3.4.心跳检测任务启动的时机
- 3.4.1.WorkerRegistryClient
- 3.4.2.MasterRegistryClient
- 3.5.RPC消费者如何接收心跳消息
- .3.5.1.心跳消息的订阅处理核心类ServerNodeManager
- 4.总结
1.概述
在分布式系统中,RPC(远程过程调用)框架需要设计心跳机制的主要原因是为了保持系统的稳定性和高可用性。心跳机制通常用于检测服务端与客户端之间的连接是否仍然有效,并及时处理因网络故障、服务器宕机、长时间无响应等原因导致的连接中断。
- 1.检测连接是否正常
网络不稳定:在分布式系统中,网络可能出现瞬时的波动或断开。如果没有心跳机制,客户端和服务端无法知道对方是否仍然在线,可能会误认为连接仍然有效,导致请求发送失败。
服务器宕机:服务器可能由于崩溃、重启等原因失去响应。如果没有心跳机制,客户端无法及时知道服务端的故障,从而可能会继续发送请求,导致请求失败。
心跳机制通过定期发送心跳包(简单的空消息或固定格式的消息)来验证连接的有效性。一旦心跳包未能在指定时间内得到响应,客户端或服务端可以知道对方的连接已断开,并采取适当的恢复措施。
- 2.故障恢复和负载均衡
在分布式系统中,服务端或客户端可能会由于各种原因失去连接。如果没有心跳机制,客户端无法得知服务端已经不可用,从而无法快速切换到其他可用的服务节点。通过心跳机制,客户端可以在