前言
在现在的工作中第一次接触到了 Netty, 也是当前非常流行的 NIO框架, Netty在互联网领域, 游戏行业, 通信IM行业, 大数据分布式计算等领域都获得了广泛的应用
介绍
Netty介绍:
- Netty是由JBOOS提供的一个开源框架
- Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可用的网络IO程序
- Netty主要针对在TCP协议下, 面向Clients端的高并发应用, 或者在Peer-to-Peer场景下的大量数据持续传输的应用
- Netty本质上是一个NIO框架, 适用于服务器通讯相关的多种应用场景
Netty的优势
Netty对自带的 JDK NIO进行了封装, 解决了直接使用 NIO的一些问题:
- NIO的类库和API太过繁杂
- 使用原生 NIO需要熟悉多线程编程, 因为 NIO编程涉及到 Reactor模式, 必须对多线程和网络编程非常熟悉, 才能写出高质量的 NIO程序
- 原生 NIO开发难, 工作量大
- JDK NIO中存在 Epoll bug, 会导致 Selector空轮询, CPU直接 100%
易上手使用:
- 没有其他的依赖
- 文档丰富的 Javadoc, 文档和示例
- 网上众多 Netty实现的 Demo和项目可以很好的借鉴学习
性能:
- 高性能 吞吐量更高
- 延迟更低
- 减少资源消耗 最小化内存复制(零拷贝)
对各种协议的全面支持:
- TCP、UDP、SCTP、UDT
Netty的常见使用场景
1)互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。
典型的应用有:Hadoop的RPC框架Avro、RocketMQ以及主流的分布式通信框架Dubbox等等。
后续等 Netty系列结束之后有机会的话也会出一个专门用来学习 RPC的系列文章
2)游戏行业:无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用。在以前很多项目都是使用 mina来作为通信模型, 但是由于 mina基本停止更新, 社区活跃度下降, 所以现在的技术选型基本都是转向社区更为活跃的 Netty。
Netty 作为高性能的基础通信组件,它本身提供了 CP/UDP 和 HTTP 协议栈。非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过 Netty 进行高性能的通信。
3)大数据领域:在大数据领域内, 大多数框架都对 Netty进行了深度应用
例如经典的 Hadoop的高性能通信和序列化组件 Avro的 RPC框架,默认采用 Netty进行跨界点通信,它的 Netty Service基于 Netty框架二次封装实现。