博客
关于我
Netty系列之Netty高性能之道
阅读量:761 次
发布时间:2019-03-22

本文共 1539 字,大约阅读时间需要 5 分钟。

Netty高性能之道

Netty是一个高性能、异步事件驱动的NIO框架,通过优化传输协议、线程模型和内存管理等多个方面,能够实现高达10万次每秒的跨节点远程服务调caling。以下是Netty高性能的实现细节分析。

1. RPC调用的性能模型分析

传统的RPC框架或基于RMI等方式的远程服务调用采用了同步阻塞IO,当客户端的并发压力或网络时延增大之后,同步阻塞IO会由于频繁的wait导致IO线程经常性的阻塞,由于线程无法高效的工作,IO处理能力自然下降。

BIO通信模型的弊端在于每个TCP连接都占用1个线程,当并发访问量增加后,线程资源会被耗尽,导致系统性能急剧下降。Java序列化存在跨语言支持不足、码流过大、性能差等多重问题,而同步阻塞IO的线程模型同样难以应对高并发场景。

2. Netty高性能之道

Netty通过以下几个方面实现了高性能:

2.1 异步非阻塞通信

Netty采用非阻塞IO模型,通过NIO的多路复用技术( Selector)在单线程内同时处理多个客户端请求,避免了传统多线程模型的线程资源浪费。这种模式在高负载、高并发场景下表现优异,IO线程能够高效处理大量连接和读写操作。

2.2 零拷贝技术

Netty的接收和发送ByteBuffer采用直接内存(Direct Buffers),避免了传统堆内存的二次拷贝。同时,Netty提供了组合Buffer对象,方便地聚合多个ByteBuffer进行操作,进一步提升了读写性能。此外,文件传输采用零拷贝方式,直接将文件缓冲区的数据发送到目标Channel。

2.3 内存池优化

Netty通过内存池管理缓冲区,尽量重用已分配的内存,减少了内存分配和回收的开销。这种机制在性能测试中显示,相比普通缓冲区,内存池实现的性能提升了23倍左右。

2.4 Reactor线程模型

Netty支持三种Reactor线程模型:单线程、多线程和主从多线程。单线程适用于小容量场景,而多线程和主从模型则用于高并发场景。主从模型通过将Acceptor线程池用于客户端连接的接入认证,将链路注册到subReactor线程池中处理,显著提升了服务端的性能。

2.5 串行化设计

Netty采用无锁化的串行设计,避免了多线程竞争带来的性能损耗。NIO线程内部进行串行操作,尽管看起来CPU利用率不高,但通过调整线程池参数,可以同时启动多个串行线程并行运行,性能更优。

2.6 高效的并发编程

Netty支持volatile变量、CAS和原子类等高效并发编程技术,确保在多线程环境下对共享资源的安全访问。同时,通过读写锁机制,进一步提升了并发性能。

2.7 高性能的序列化框架

Netty默认支持Google Protobuf,通过扩展编解码接口还可以使用Thrift的压缩二进制编解码框架。相比Java原生序列化,Protobuf的码流大小只有四分之一,性能显著提升。

2.8灵活的TCP参数配置

Netty允许用户灵活配置TCP参数,如SO_RCVBUF、SO_SNDBUF、SO_TCPNODELAY等,满足不同场景的性能需求。合理设置这些参数可以显著提升网络吞吐量。

3. 总结

通过对Netty架构和性能模型的分析,我们发现Netty的高性能得益于其精心设计的架构和优化代码。Netty支持10W TPS的跨节点服务调用并非易事,但通过非阻塞IO、零拷贝技术、内存池优化、灵活的线程模型和高效的序列化框架,Netty确实做到了这一点。

作者简介

李林锋,东北大学毕业,现于华为公司从事高性能通信软件设计和开发,拥有6年NIO开发经验,精通Netty、Mina等框架。Netty中国社区创始人,《Netty权威指南》作者。

转载地址:http://opzwk.baihongyu.com/

你可能感兴趣的文章
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>