Netty在质量上考量的点有哪些?

背景
  1. 高性能
  2. 可靠性
  3. 可定制性
  4. 可扩展性
  5. 易用性
  6. 安全性

过程
  • Netty的高性能体现在哪儿
  1. Reactior模式的使用
  2. 直接内存
  3. 池化内存
  4. 环形数组缓冲区。实现无锁化的并发编程,比如使用轻量级的ThreadLocal,使用轻量级的同步关键字volatile。比如使用Atomic系列类。比如使用CountDownLatch, CyclicBarrerier。比如使用线程安全容器。LinkedBlockingQueue。
  5. 引用计数器及时申请释放不再引用的对象。
  6. 关键资源的处理使用单线程串行化方式,避免多线程并发访问带来的锁竞争和额外的CPU资源消耗问题。
  • Netty是如何做到可靠性
  1. 链路有效性检测
  2. 内存保护机制
  3. 优雅停机(如何理解优雅停机?释放资源,处理未完成的任务,完成数据的持久化),不然后因为系统退出,任务还没有执行完成。资源还占用着。
  • 可定制性
  1. 责任链模式的设计,便于定制业务逻辑。
  2. 基于接口的开发:开发者自定义实现相关接口。
  3. 提供了大量工厂类,通过重载这些工厂类可以按需创建出用户实现的对象。
  4. 提供了大量的系统参数供用户按需设置,增强系统的场景定制性。
  • 可扩展性
  1. 基于Netty的二进制类库即可实现协议的扩展和定制。
  2. 基于Netty的HTTP协议
  3. Dubbo协议
  4. RocketMQ内部私有协议
  • 易用性
  1. Netty屏蔽底层JDK的NIO繁琐的细节。
  2. 使用Reactor理论,提供高层接口,使开发者使用起来十分简单。
  3. 切换I/O模型也十分方便。Oio, Nio。
  4. 不同平台切换也十分方便,比如Linux操作系统。
  • 安全性
  1. 提供黑白名单。
  2. 支持IP过滤。
  3. 支持SSL(SslHandler)。

小结
  1. 模仿Netty在设计的时候考虑到的点。
  2. 环形数组缓冲区:由两个指针,一个指向可读的头(当头被读了后,把数据清除掉,并移动头指针)。一个指向可写的尾,当写了一个数据后,再移动尾指针)。这样做的话,是可以避免内存的浪费的。循环使用内存空间,不浪费。
  3. 如何才能实现无锁化的并发编程?比如使用轻量级的ThreadLocal,使用轻量级的同步关键字volatile。比如使用Atomic系列类。比如使用CountDownLatch, CyclicBarrerier。比如使用线程安全容器。LinkedBlockingQueue。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值