Netty可靠性设计之Netty心跳机制

1、使用心跳机制的原因

    在凌晨等业务低谷期,如果发生网络闪断、连接被Hnag住等网络问题时,由于没有业务消息,应用进程很难发现。等到了白天业务高峰期时,会发生大量的网络通信失败,严重的话还会导致一段时间进程内无法处理业务消息。为了解决这个问题,在网络空闲时采用心跳机制来检测链路的互通性,一旦发现网络故障,立即关闭链路,主动重连。

2、设计思路

(1)当网络处于空闲状态持续时间达到T(连续周期T没有读写消息)时,客户端只懂发送Ping心跳消息给服务端。

(2)如果在下一个周期T到来时客户端没有收到对方发送的Pong心跳应答消息或者读取到服务端发送的其他业务消息,则心跳失败计数器加1.

(3)每当客户端接收到服务的业务消息或者Pong应答消息时,将心跳失败计数器清零,连续N次没有接收到服务端的Pong消息或者业务消息,则关闭链路,间隔INTERVAL时间后发起重连操作。

(4)服务端网络空闲状态持续时间达到T后,服务端将心跳失败计数器加1;只要接收到客户端发送的Ping消息或者其他业务消息,计数器清零。

(5)服务端连续N次没有接收到客户端的Ping消息或者其他业务消息,则关闭链路,释放资源,等待客户端重连。

3、小结

    通过Ping-Pong双向心跳机制,可以保证无论通信哪一方出现网络故障,都能被及时地检测出来,为了防止由于对方短时间内繁忙没有及时返回应答造成的误判,只有连续N次心跳检测都失败才认定链路已经损害,需要关闭链路并重建链路。

    当读或者写心跳消息发生I/O异常的时候,说明线路已经中断,此时需要立即关闭链路,如果时客户端,需要重新发起连接。如果是服务端,需要清空缓存的半包信息,等待客户端重连。

内容来源:

《Netty权威指南》.李林锋

猜你喜欢

转载自blog.csdn.net/qq_41834553/article/details/113826778
今日推荐