Netty是一个基于事件驱动的异步高吞吐量服务器客户端框架。它的架构具有高性能、高扩展性及可靠性。
架构
- Channel 直接负责I/O的操作的管理,比如: read, write, connect, bind等,这里所有的I/O操作都是异步的
- EventLoop 处理所有I/O事件
- Pipeline 负责事件在链中的传播,且可以动态的调整链的功能。比如:http server的协议部分,可以由协议的handler来进行处理;完成协议处理后,触发业务逻辑handler,来完成业务操作。
高性能
- Netty基于nio, 利用Reactor模式,解决基于传统I/O模式下客户端线性增长带来的线程问题
- 发送和接收数据基于堆外内存,实现零拷贝
- 通过内存池来利于ByteBuf, 避免GC带来的性能消耗
- 使用原子类,环形数组缓冲等提高系统的并发能力
无论是Netty官方还是在业界使用中,Netty框架的性能都是佼佼者, 达到了高吞吐量低延时的目标。
高扩展性
Netty本身实现了常用的协议:
如果是自定义的协议,使用Netty来实现很容易。Netty已经考虑到了该场景,只需要定制私有的handler,来处理私有协议的握手、加密、解密,然后动态的放到到Pipeline中即可。
可靠性
Netty的可靠性体现在几个方面:
- 内存保护机制
- 优雅停机
- 通信链路检测