Netty逻辑架构
Netty采用了典型的三层网络架构进行设计与开发。逻辑架构如下:
Reactor通信调度层
主要职责:监听网络的读写和连接操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事件、写事件等,将这些事件触发到Pipeline中,由Pipeline管理的职责链进行后续处理。
由一系列的辅助类完成,包括Reactor线程NioeventLoop以及父类、NioSocketChannel、ButeBuffer等。职责链ChannelPipeline
负责事件在职责链中有序传播,同时负责动态地编排职责链。职责链可以选择监听和处理自己关心的事件,可以拦截处理和向后/向前传播事件。
业务逻辑编排层(service ChannelHandler)
分为两类,一类是纯粹的业务逻辑编排,一类是其他的应用层协议插件。
关键架构质量属性
- 高性能
- 异步非阻塞I/O类库,基于Reactor模式
- TCP接受和发送缓冲区使用直接内存代替堆内存,避免了内存复制,提升了I/O读取和写入的性能。
- 支持通过内存池的方式循环利用ByteBuf,提升性能。
- 可配置的I/O线程数、TCP参数,为不同用户提供定制化参数,满足不同的性能场景。
- 采用环形数组缓冲区实现无锁化并发编程,代替传统的线程安全容器。
- 合理使用线程安全容器、原子类,提升并发处理能力。
- 可靠性
- 链路有效性检测
- 内存保护机制
- 优雅停机
- 可定制性
- 可扩展性