心跳机制

概述

在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效。为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息,如果长事件没有收到对方的回复,则断开与对方的连接

因为是每隔固定时间发送一次,类似心跳,所以发送的固定信息称为心跳包。一般而言,应该客户端主动向服务器发送心跳包,因为服务器发送会影响性能


心跳机制的实现方式

基于TCP自带的心跳包

TCP的SO_KEEPLIVE选项可以,系统默认的跳帧频率为2小时,超过2小时后,本地的TCP实现会发送一个数据包给远程的Socket。如果远程Socket没有响应,TCP实现就会持续尝试11分钟直到接收到响应,否则自动断开Socket连接。

但TCP自带的心跳包无法检测比较敏感地知道对方的状态,默认2小时的空闲时间,对于大多数的应用而言太长了。可以手工开启KeepAlive功能并设置合理的KeepAlive参数。


应用层自己进行实现

  1. Client使用定时器发送心跳
  2. Server收到心跳后,回复一个包
  3. Server为每个Client启动超时定时器,如果在指定时间内没有收到Client的心跳包,则Client失效。

Java实现心跳机制 - 苍穹2018 - 博客园 (cnblogs.com)