分布式系统心跳协议的设计

分布式系统心跳协议的设计服务器

应用层心跳必不可少:
一、操做系统崩溃致使机器重启, 没有机会发送 FIN 分节
二、服务器硬件故障致使机器重启, 也没有机会发送 FIN 分节
三、并发链接数很高时, 操做系统或进程若是重启, 可能没有机会断开所有链接, FIN 分节可能出现丢包, 但没有机会重试
四、网络故障, 链接双方能得知这一状况的惟一方案是检测心跳超时
网络

为何 TCP keepalive 不能代替应用层心跳?
心跳除了说明进程还在、网络通畅, 更重要的是代表应用程还能正常工做;
TCP keepalive 由操做系统负责探查, 即便进程死锁或阻塞, 操做系统也会如常收发 TCP keepalive 消息, 对方没法得知这一异常.
并发

进程 C 依赖于 S, 则通常 S 为 sender, C 为 receiver.负载均衡

心跳设计关键:(高置信度与低反应时间不可兼得)
一、一般 sender 的发送周期和 receiver 的检查周期相同, T; timeout 时间通常为 2T
二、T 越小, 开销越大; T 越大, receiver 检测到故障的延迟也就越大
三、心跳信息应该包含发送方的标识符; 建议也包含当前负载, 便于客户端作负载均衡
四、若是 sender 和 receiver 之间有其余消息中转进程, 那么还应该加上 sender 的发送时间, 防止消息在传输过程当中堆积而致使假心跳
五、要在工做线程中发送, 不要单独起一个”心跳线程”, 防止伪心跳(防止工做线程死锁或阻塞时还在发送心跳)
六、与业务信息用同一个链接, 不要单独用”心跳链接”, 防止伪心跳(若是验证的不是收发业务数据的 TCP 链接畅通则意义不大)
分布式

相关文章
相关标签/搜索