博客
关于我
Netty学习总结(2)——Netty的高性能架构之道
阅读量:789 次
发布时间:2023-02-14

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

Netty是一个高性能、异步事件驱动的NIO框架,支持TCP、UDP和文件传输。作为异步NIO框架,Netty的所有IO操作都是非阻塞的,通过Future-Listener机制,用户可以主动获取或通过通知机制获取IO操作结果。

为什么选择Netty

Netty是业界最流行的NIO框架之一,凭借其健壮性、功能、性能、可定制性和可扩展性,在同类框架中占据首位。它已经被成百上千的商用项目验证,例如Hadoop的RPC框架avro使用Netty作为底层通信框架;许多其他业界主流RPC框架也选择Netty来构建高性能的异步通信能力。

Netty架构分析

Netty采用了典型的三层网络架构。第一层是Reactor通信调度层,负责监听网络的读写和连接操作,负责将网络层数据读取到内存缓冲区中,并触发各种网络事件。第二层是职责链PipeLine,负责事件的有序传播和动态编排。第三层是业务逻辑处理层,分为纯粹的业务逻辑处理和应用层协议管理。

I/O模型

传统同步阻塞I/O模型存在性能、可靠性和可维护性问题。Netty采用非阻塞I/O模型,基于JDK NIO的Selector,轮询就绪的Channel,最大支持成千上万个连接。Selector使用epoll()替代传统select,突破了最大连接句柄限制。

线程调度模型

Netty支持三种线程模型:单线程、多线程和主从多线程。多线程模型通过NIO线程池处理I/O操作,适用于高并发场景。为了避免锁竞争,Netty采用串行化设计,避免多线程竞争带来的性能损耗。

序列化方式

序列化性能受三个关键因素影响:码流大小、CPU资源占用和并发调用的性能。Netty默认支持Google Protobuf,用户可扩展其他序列化框架如Thrift。对高性能场景,Netty提供了默认二进制序列化框架。

可靠性

Netty面临的可靠性挑战包括网络复杂性和链路有效性检测。它提供三种链路空闲检测方式:读空闲、写空闲和读写空闲。Netty通过心跳检测机制确保链路可用性,避免因网络问题导致业务中断。

流量整形

流量整形通过主动调整输出速率,防止下游压垮和“撑死”问题。Netty支持全局和链路级流量整形,提供灵活配置。优雅停机机制包括不再接收新消息、预处理操作和资源释放,确保资源无缝退出。

安全性

Netty支持SSL/TLS协议,提供单向认证、双向认证和CA认证。它还支持IP地址黑名单和接入认证策略,可扩展安全特性,适用于不同安全需求。

扩展性

Netty的设计支持线程模型、序列化方式和上层协议扩展。它通过接口编程和预留扩展点,方便用户定制和扩展。Netty的架构可扩展性设计理念包括预留扩展接口和功能点接口编程。

问答

  • 端口冲突问题:建议规划端口范围,动态生成端口,避免固定端口占用。

  • Spring与Netty整合:在Spring容器退出时调用Netty优雅退出接口,释放资源。

  • Web通信:Netty适合做高性能的通信框架,可重写HTTP/HTTPS协议栈。

  • 串行无锁化设计:Netty通过串行化设计避免锁竞争,提升性能。NioEventLoop直接调用Handler,保持线程一致性,避免多线程切换带来的性能损耗。

  • 通过以上优化,Netty在性能、可靠性和扩展性方面展现出显著优势,广泛应用于互联网、大数据、游戏行业和通信领域。

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

    你可能感兴趣的文章
    Netty工作笔记0019---Selector API介绍
    查看>>
    Netty工作笔记0020---Selectionkey在NIO体系
    查看>>
    Netty工作笔记0021---NIO编写,快速入门---编写服务器
    查看>>
    Netty工作笔记0022---NIO快速入门--编写客户端
    查看>>