没有合适的资源?快使用搜索试试~ 我知道了~
最透彻的的Netty高性能原理和框架架构解析,使用文件和图形详细描述了netty的原理
需积分: 1 1 下载量 51 浏览量
2023-12-25
11:17:22
上传
评论
收藏 1021KB PDF 举报
温馨提示
试读
18页
最透彻的的Netty高性能原理和框架架构解析,使用文件和图形详细描述了netty的原理
资源推荐
资源详情
资源评论
1、Netty 简介
Netty 是一个广受欢迎的异步事件驱动的 Java 开源网络应用程序框架,用于快速开发可维护
的高性能协议服务器和客户端。
本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其
所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。
本文作者的另两篇《高性能网络编程(五):一文读懂高性能网络编程中的 I/O 模型》、《高性
能网络编程(六):一文读懂高性能网络编程中的线程模型》也写的很好,有兴趣的读者可以
一并看看。
2、相关资料
Netty 源码在线阅读:
Netty-4.1.x 地址是:http://docs.52im.net/extend/docs/src/netty4_1/
Netty-4.0.x 地址是:http://docs.52im.net/extend/docs/src/netty4/
Netty-3.x 地址是:http://docs.52im.net/extend/docs/src/netty3/
Netty 在线 API 文档:
Netty-4.1.x API 文档(在线版):http://docs.52im.net/extend/docs/api/netty4_1/
Netty-4.0.x API 文档(在线版):http://docs.52im.net/extend/docs/api/netty4/
Netty-3.x API 文档(在线版):http://docs.52im.net/extend/docs/api/netty3/
有关 Netty 的其它精华文章:
《有关“为何选择 Netty”的 11 个疑问及解答》
《开源 NIO 框架八卦——到底是先有 MINA 还是先有 Netty?》
《选 Netty 还是 Mina:深入研究与对比(一)》
《选 Netty 还是 Mina:深入研究与对比(二)》
《Netty 4.x 学习(一):ByteBuf 详解》
《Netty 4.x 学习(二):Channel 和 Pipeline 详解》
《Netty 4.x 学习(三):线程模型详解》
《实践总结:Netty3.x 升级 Netty4.x 遇到的那些坑(线程篇)》
《实践总结:Netty3.x VS Netty4.x 的线程模型》
《详解 Netty 的安全性:原理介绍、代码演示(上篇)》
《详解 Netty 的安全性:原理介绍、代码演示(下篇)》
《详解 Netty 的优雅退出机制和原理》
《NIO 框架详解:Netty 的高性能之道》
《Twitter:如何使用 Netty 4 来减少 JVM 的 GC 开销(译文)》
《绝对干货:基于 Netty 实现海量接入的推送服务技术要点》
《Netty 干货分享:京东京麦的生产级 TCP 网关技术实践总结》
3、JDK 原生 NIO 程序的问题
JDK 原生也有一套网络应用程序 API,但是存在一系列问题,主要如下:
1) NIO 的类库和 API 繁杂,使用麻烦:你需要熟练掌握 Selector、ServerSocketChannel、
SocketChannel、ByteBuffer 等。
2) 需要具备其他的额外技能做铺垫:例如熟悉 Java 多线程编程,因为 NIO 编程涉及到
Reactor 模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的 NIO 程序。
3) 可靠性能力补齐,开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、
半包读写、失败缓存、网络拥塞和异常码流的处理等等。NIO 编程的特点是功能开发相
对容易,但是可靠性能力补齐工作量和难度都非常大。
4) JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU
100%。官方声称在 JDK 1.6 版本的 update 18 修复了该问题,但是直到 JDK 1.7 版本该
问题仍旧存在,只不过该 Bug 发生概率降低了一些而已,它并没有被根本解决。
4、Netty 的特点
Netty 对 JDK 自带的 NIO 的 API 进行了封装,解决了上述问题。
Netty 的主要特点有:
1) 设计优雅:适用于各种传输类型的统一 API 阻塞和非阻塞 Socket;基于灵活且可扩展
的事件模型,可以清晰地分离关注点;高度可定制的线程模型 - 单线程,一个或多个线
程池;真正的无连接数据报套接字支持(自 3.1 起)。
2) 使用方便:详细记录的 Javadoc,用户指南和示例;没有其他依赖项,JDK 5(Netty 3.x)
或 6(Netty 4.x)就足够了。
3) 高性能、吞吐量更高:延迟更低;减少资源消耗;最小化不必要的内存复制。
4) 安全:完整的 SSL/TLS 和 StartTLS 支持。
5) 社区活跃、不断更新:社区活跃,版本迭代周期短,发现的 Bug 可以被及时修复,同时,
更多的新功能会被加入。
5、Netty 常见使用场景
Netty 常见的使用场景如下:
1)互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必
不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。
典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,
Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。
2)游戏行业:无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用。
Netty 作为高性能的基础通信组件,它本身提供了 TCP/UDP 和 HTTP 协议栈。
非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过 Netty
进行高性能的通信。
3)大数据领域:经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用
Netty 进行跨界点通信,它的 Netty Service 基于 Netty 框架二次封装实现。
有兴趣的读者可以了解一下目前有哪些开源项目使用了 Netty 的 Related Projects。
6、Netty 高性能设计
Netty 作为异步事件驱动的网络,高性能之处主要来自于其 I/O 模型和线程处理模型,前者
【I/O 复用模型】:
⚫ 在 I/O 复用模型中,会用到 Select,这个函数也会使进程阻塞,但是和阻塞 I/O 所不
同的是这两个函数可以同时阻塞多个 I/O 操作。
⚫ 而且可以同时对多个读操作,多个写操作的 I/O 函数进行检测,直到有数据可读或可
写时,才真正调用 I/O 操作函数。
⚫ Netty 的非阻塞 I/O 的实现关键是基于 I/O 复用模型,这里用 Selector 对象表示:
剩余17页未读,继续阅读
资源评论
shandongwill
- 粉丝: 3369
- 资源: 389
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功