chapter20 Netty架构剖析

20 篇文章 0 订阅
12 篇文章 0 订阅

chapter20 Netty架构剖析

1. Netty逻辑架构

  1. Reactor通信调度层
    • 一系列辅助类完成,包括Reactor线程NioEventLoop及其父类,NioSocketChannel、NioServerSocketChannel及其父类,ByteBuffer、Buffer、Unsafe等
    • 主要职责是监听网咯的读写和连接操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件到PipeLine中。
  2. 职责链ChannelPipeline
    • 负责事件在职责链中有序传播,同时负责动态地编排职责链。上层业务只需要关心处理业务,不需要感知底层的协议差异和线程模型差异,实现架构层面的分层隔离。
  3. 业务逻辑编排层(service ChannelHandler)
    • 两类:一类是纯粹的业务逻辑编排,还有一类是其他的应用层协议插件,用于特定协议相关的会话和链路管理。

2. 关键架构质量属性

  1. 高性能

    1. 采用异步非阻塞IO,基于Reactor模式实现
    2. TCP接收和发送缓冲区使用直接内存代替堆内存,避免了内存复制,提升IO的读写性能
    3. 支持通过内存池的方式循环利用ByteBuf,避免了创建和销毁ByteBuf带来的性能损耗
    4. 可配置的IO线程数、TCP参数等
    5. 采用环形数组缓冲区实现无锁化并发编程,代替传统的线程安全容器或者锁。
    6. 合理地使用线程安全容器、原子类等
    7. 关键资源的处理使用单线程串行化的方式,避免多线程并发带来的锁竞争和额外的cpu资源消耗问题
    8. 通过引用计数器及时地申请释放不再被引用的对象,细粒度的内存管理降低了GC的频率,减少了频繁GC带来的时延增大和cpu损耗
  2. 可靠性

    1. 链路有效性检测[心跳检测]
      • Netty提供的两种链路空闲检测机制:
      • 读空闲超时机制:当连续周期T没有消息可读时,触发超时Handler,用户可以基于读空闲超时发送心跳消息,进行链路检测;如果连续N个周期仍然没有读取到心跳消息,可主动关闭链路。
      • 写空闲超时机制:同上,在没有发送消息时进行检测
    2. 内存保护机制
      • 通过对象引用计数器对Netty的ByteBuf灯内置对象进行细粒度的内存申请和释放,对非对象引用进行检测和保护
      • 通过内存池来重用ByteBuf,节省内存
      • 可设置的内存容量上限,包括ByteBuf、线程池线程数等
    3. 优雅停机
      • 优雅停机往往需要设置个最大超时时间T,如果达到T后系统仍然没有退出,则通过Kill -9 pid强杀当前的进程
      • Netty所有涉及到资源回收和释放的都提供了接口实现优雅停机
    4. 可定制性
      • 责任链模式,ChannelPipeline基于责任链模式开发
      • 基于接口的开发,关键的类库都提供了接口或者抽象类
      • 提供了大量工厂类,通过重载这些工厂类可以按需创建出用户实现的对象
      • 提供了大量的系统参数供用户按需设置
    5. 可扩展性
      • 扩展协议栈不需要修改Netty源码,直接基于二进制类库即可实现协议的扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值