Netty实现高可靠性的三个方面
链路有效性检测:虽然长连接相对于短连接的性能更高,但是长连接的连接是否存活至关重要。
为了知道长连接是否断开,往往需要通过心跳机制周期性地进行链路检测,避免在系统空闲时因网络闪断而断开连接,之后又遇到流量洪峰,大量的通信请求冲击导致请求的消息积压无法处理。通过心跳机制周期性地进行检测,当发现问题时,可以及时关闭链路,重建TCP 连接,避免发生灾难性问题。Netty 提供了两种链路空闲检测机制:
- 读空闲超时机制:读空闲超时机制是指在连续N个周期没有消息可读时发送心跳闲检测机制。检测链路是否正常,心跳包发送会持续 M个周期,如果连续M个周期都没有读取到心跳包回包消息,则可以主动关闭链路,重建连接。
- 写空闲超时机制:写空闲超时机制是指连续N个周期没有消息需要发送时发送心跳包,检测链路是否正常,心跳包发送会持续M个周期,如果连续M个周期都0没有读取到心跳包回包消息,则可以主动关闭链路,重建连接。
- 内存保护机制:Netty 可设置内存容量上限,提供各类可配置的设计,包括ByteBuf的大小配置、线程池线程数配置等,避免异常请求耗光内存。
- 优雅停机:优雅停机指的是当系统退出时,系统进程不会直接强制退出,如果强制退出,缓冲区中的请求消息没有处理完,则会导致这部分请求失败。如果客户端是阻寒等待请求结果的,还会导致整个客户端阻塞,影响客户端正常的运行。所以当系统退出时需要等待所有请求处理完成JVM通过注册的SutdownHook拦截退出信号量然后执行退出操作,比如释放相关模块的资源,不再接收新的请求。当缓冲区的请求消息处理完成或清空等操作完成后,进程才会完全退出。