背景介绍
Netty 惊人的性能数据
使用Netty(NIO框架)相比于BIO性能提升8倍
传统RPC调用性能差的三宗罪
image.png网络传输方式问题:同步阻塞
序列化方式问题:Bio使用的是java自身的序列化,而java自身的序列化存在序列化性能差,无法支持跨语言,序列化后的文件大等问题。
线程模型问题:因为为每个连接创建一个线程,而一台机器的最大线程数是受限的,会导致线程过多时,执行效率的下降和超过最大线程数的机器宕机。
高性能的三个主题
传输:使用什么通道将数据传给对方,如BIO,NIO,AIO,IO模型的不同决定着性能的不同。
协议:采用什么通信协议,如共有协议或自定义协议等
线程:线程模型如BIO的连接和线程一对一的模型和Reactor线程模型
image.png
Netty 高性能之道
异步非阻塞通信
在处理多个客户端请求时,可以采用多线程或IO多路复用技术来处理,IO多路复用是把多个IO的阻塞复用到一个Select的阻塞,使单线程可以处理多个客户端请求。
NIO通信模型如下
image.png
Netty 架构按照 Reactor 模式设计和实现,它的服务端通信序列图如下:
image.png
客户端通信序列图如下:
image.png
零拷贝
内存池
缓冲区重用机制
高效的 Reactor 线程模型
常用的 Reactor 线程模型有三种,分别如下:
1 Reactor 单线程模型;
image.png
2 Reactor 多线程模型
image.png
3 主从 Reactor 多线程模型
image.png
无锁化的串行设计理念
image.png高效的并发编程
高性能的序列化框架
Netty 默认提供了对 Google Protobuf 的支持,通过扩展 Netty 的编解码接口,用户可以实现其它的高性能序列化框架,
灵活的 TCP 参数配置能力
合理设置 TCP 参数在某些场景下对于性能的提升可以起到显著的效果。
网友评论