Netty从入门到秃头(一):初识Netty

Netty的起源

     Netty项目起源于2004年,Java社区第一个基于事件驱动的网络应用开发框架。Hadoop、Cassandra、Spark、Dubbo、gRPC、RocketMQ、Zookeeper、Spring5等都在使用Netty,是开发高性能Java服务器的必学框架。

学习Netty的基础知识

  1. 协议知识:TCP的keeplive、粘包/半包现象、封帧等;
  2. 网络编程知识:三种IO、三种Reactor模式;
  3. Java高阶编程知识:对象池、堆外内存、锁等知识

Netty是什么

  1. 本质:网络应用程序框架
  2. 实现:异步、事件驱动
  3. 特性:高性能、可维护、快速开发
  4. 用途:开发服务器和客户端

Netty的架构

Netty从入门到秃头(一):初识Netty_第1张图片

JDK NIO与Netty

  • Netty支持常用应用层协议;解决传输问题:粘包、半包现象;支持流量整形;完善的锻炼、Idle等异常处理;
  • 规避JDK NIO bug:经典的epoll bug:异常唤醒空转导致CPU 100%;IP_TOS参数(IP包的优先级和QoS选项)使用时抛出异常;
  • API更友好更强大:JDK的NIO一些API不友好,功能薄弱,例如ByteBuffer > Netty's ByteBuf;其他的增强:ThreadLocal > Netty's FastThreadLocal;
  • 隔离变化、屏蔽细节:JDK NIO的实现变化:NIO > NIO2(AIO) > .....;屏蔽JDK NIO的实现细节;

为什么只选择Netty

  • Apache Mina:Netty作者本人解答:Netty是Mina的重新打造版本,提高了扩展性并解决了一些已知的问题,Netty使用起来也比Mina简单的更多;
  • Sun Grizzly:三少:用的少、文档少、更新少;
  • Apple SwiftNIO或者ACE:其他语言,Java领域不会考虑;
  • Cindy:生命周期不长;
  • Tomcat、Jetty:与Netty不属于同一个层次,有自己的通信层实现,且专门与Servlet容器实现的,通用性不高。

Netty的前尘往事

  • 4.0之前署于JBOSS,4.0之后独立;
  • 2004年6月发布,第一个基于事件驱动的应用网络框架;2008年10月Netty3发布;2013年7月Netty4发布;2013年12月Netty5.Alpha1发布;2015年11月废弃Netty5(废弃原因:复杂、没有明显的性能优势、维护不过来)

Netty与Mina

  • 同一作者开发,处于维护阶段
  • Alex为Apache Directory开发网络框架,看到Netty2后邀请作者合作开发,结合Netty便有了Mina

Netty的现状与趋势

    应用现状:截至2019年9月,30000+项目在使用,实际使用中远大于30000

  • 使用Netty的典型项目:Cassandra数据库、Spark、Hadoop、RocketMQ、Elasticsearch、gRPC、Spring5、Dubbo等

    未来趋势:

  • 更多流行协议的支持;
  • 紧跟新JDK的步伐;
  • 更多易用性、人性化的支持:IP地址黑白名单、流量整形;
  • 应用越来越多。

你可能感兴趣的:(Netty从入门到秃头)