心跳机制
在一些C/S结构、分布式程序中可以使用心跳来判断节点的存活状态。
应用中的使用
1. 从节点主动向主节点发送ping
主节点回应pong,这也是一般的使用情况,如hadoop、spark那些系统。
每个从节点上启动一个线程专门发送ping,采用定时器来定时检查是否应该发送下一次的ping以及上一次ping是否超时等。主节点上需要不断更新收到的来自从节点的ping的时间,用来判断是否超时。如果有N个从节点,1个主节点,则需要N+1个线程来发送信息,另外还要考虑如何接收。
2. 主节点主动发送心跳
主节点持有对从节点的连接的引用,可以使用两个队列来保存发送的时间等信息:
-
已发送ping的队列
-
待发送ping的队列
每次在收到pong后将代表从节点的元素从队列1中移出,加入到队列2中。
线程数也并不比上面的方式少。
3. 超时
有时候由于网络阻塞等原因造成心跳超时,这种情况需要考虑设置两个超时时间,一个较短,一个较长。当较长的时间内仍无响应,则可以判定为长久连接已断开,再进行重新连接或直接删除节点连接信息。