Netty入门
1. 概述
ᅟᅠᅟᅠNetty是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。值得一提的是Netty的异步特性并不是指的异步IO,底层还是使用多路复用实现的。
ᅟᅠᅟᅠNetty是Trustin Lee(이강원,李康元)在2008年开发的。 其中Netty5.0已经废弃,目前主要使用的仍然还是Ntty4.x,原因是Netty5.0底层自己实现了新的一套AIO满足windows和linux的使用,但是代码实现太过于复杂,而且实际使用起来性能和简洁性并没有提高。考虑后期的维护成本过高,Netty团队2015年决定停止Netty 5.0的开发,将精力集中在维护和改进Netty 4.x版本上。
2. Netty的地位
ᅟᅠᅟᅠNetty在Java网络应用框架中的地位就好比:Spring框架在JavaEE开发中的地位(评价非常高了🦾)。以下的框架都使用了Netty,因为它们有网络通信需求:
- Cassandra - nosql数据库
- Spark - 大数据分布式计算框架
- Flink - 大数据分布式计算框架
- Hadoop - 大数据分布式存储框架
- RocketMQ - 阿里开源的消息队列
- ElasticSearch - 搜索引擎
- gRPC - rpc框架
- Dubbo - rpc框架
- Spring 5.x - flux api完全抛弃了tomcat ,使用netty作为服务器端
- Zookeeper - 分布式协调框架
3. Netty的优势
虽然Netty底层仍然是NIO,那么为何不直接使用Java中的NIO呢?
Netty vs NIO,工作量大,bug多
- 需要自己构建协议
- 解决TCP传输问题,如粘包、半包
- epoll空轮询导致CPU100%
- 对API进行增强,使之更易用,如FastThreadLocal => ThreadLocal,ByteBuf => ByteBuffer
Netty vs 其它网络应用框架
- Mina由apache维护,将来3.x版本可能会有较大重构,破坏API向下兼容性,Netty的开发迭代更迅速,API更简洁、文档更优秀
- 久经考验,21年的发展,Netty版本迭代如下
- 2.x 2004
- 3.x 2008
- 4.x 2013
- 5.x 已废弃(没有明显的性能提升,维护成本高)