Netty高性能网络通信框架

本文深入探讨了Netty作为高性能网络通信框架的广泛应用,包括Dubbo、Spark、Elasticsearch等项目的底层通信。Netty的特点在于其异步事件驱动模型,提供了高度可扩展和可定制的API,支持透明的零拷贝和多种协议栈。文中详细介绍了Netty的组件,如Channel、EventLoop、ByteBuf以及ChannelPipeline,还涵盖了Netty在RPC、分布式系统、大数据处理和游戏开发等多个领域的实践案例。此外,文章提到了Netty相对于传统Socket和JDK NIO的优势,以及选择Netty的原因,如高性能、易用性、成熟度和社区支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业界哪些流行的开源框架用Netty作为底层通信框架

  • Dubbo: 阿里开源的高性能RPC框架
  • RocketMQ: 阿里出品的高性能消息队列
  • Spark: 炙手可热的大数据处理引擎,底层使用Netty
  • Elasticsearch: 分布式多用户的全文搜索引擎
  • Apache Cassandra:开源分布式搜索数据库
  • Flink:分布式高性能高可用的流处理框架
  • Netty-SocketIO的java服务端实现
  • Spring5:使用Netty作为http协议框架
  • Play:简单易用的http服务器
  • Grpc:google开源的高性能rpc通信框架
  • Infinispan:针对缓存的高并发键值对数据存储
  • HornetQ:支持集群和多种协议,可嵌入、高性能的异步消息系统
  • Vert.x轻量级高性能能JVM应用平台
    -
    完整的参考列表

业界有哪些公司在使用Netty

在大型企业中有:Apple、Twitter的Finagle、Facebook的Nifty、Google、Square、Instagram

在初创企业中有:做http长连接的Firebase、支持各种各样消息推送通知的Urban Airship


当然,Netty也从这些项目中受益。通过实现 FTP、 SMTP、 HTTP 和 WebSocket 以及其他的基于二进制和基于文本的协议, Netty 扩展了它的应用范围及灵活性。

Netty是什么

  1. 异步事件驱动的高性能网络通信框架。
  2. **特点:**它可以以任意的顺序响应在任意的时间点产生的事件,可以实现最高级别的可伸缩性。
  3. **目的:**用于快速开发高性能服务端和客户端
  4. **封装:**JDK底层BIO和NIO模型,提供高度可用的API,满足各类业务场景,其中ChannelHandler的热插拔机制解放了业务逻辑之外的细节问题,让业务逻辑的添加和删除非常容易
  5. 自带编解码器解决拆包粘包问题,用户只关心业务逻辑
  6. 精心设计的reactor线程模型支持高并发海量连接
  7. 自带各种协议栈如http、websocket,处理任何一种通信协议都几乎不用亲自动手
  8. **架构方法和设计原则:**每个小点都和它的技术性内容一样重要,穷其精妙。如关注点分离–业务和网络逻辑解耦,模块化和可复用性,可测试性。

Netty的特性总结


## Socket & Netty ![Socket & Netty](http://ww1.sinaimg.cn/large/005Vjva3gy1g2jjx06me9j30wi0jj0z8.jpg)

##Netty基本组件

  • NioEventLoop ->Thread
  • Channel ->Socket
    NioSocketChannel implements Channel
    Chennel is a nexus to a network socket or a component which is capable operations such as read,write,connect,and bind
  • ByteBuf ->IO Bytes
    readBytes()、writeBytes() and so on
  • Pipline ->Logic Chain 逻辑链
  • ChannelHandler ->Logic处理块

##Netty核心组件
###1. Channel-Socket
Channel是通讯的载体,其基本构造是Socket
是对网络底层读写和连接原语言的抽象

###2. EventLoop-控制流、多线程处理、并发
定义了 Netty 的核心抽象, 用于处理连接的生命周期中所发生的事件

###注: Channel、 EventLoop、 Thread 以及EventLoopGroup 之间的关系

#####A. 一个 EventLoopGroup 包含一个或者多个 EventLoop;
#####B. 一个 EventLoop 在它的生命周期内只和一个 Thread 绑定
#####C. 所有由 EventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理;
#####D. 一个 Channel 在它的生命周期内只注册于一个 EventLoop;
#####E. 一个 EventLoop 可能会被分配给一个或多个 Channel
#####F. 一个给定 Channel 的 I/O 操作都是由相同的 Thread 执行的, 实际上消除了对于同步的需要。

###3. ChannelFuture-异步通知
Netty 中所有的 I/O 操作都是异步的,用于在之后的某个时间点确定其结果的方法
###4. ChannelHandler和ChannelPipeline
ChannelHandler负责Channel中的逻辑处理
其旨在简化应用程序处理逻辑的开发过程
充当了所有处理入站和出站数据的应用程序逻辑的容器
ChannelHandler子接口:
ChannelInboundHandler——处理入站数据以及各种状态变化
ChannelOutboundHandler——处理出站数据并且允许拦截所有的操作
ChannelInboundHandler的方法:

ChannelOutboundHandler的方法:

ChannelPipeline 提供了 ChannelHandler链的容器
定义了用于在该链上传播入站和出站事件流的API

###5. ByteBuf-Netty的数据容器
Java NIO提供了ByteBuffer作为它的字节容器
Netty的ByteBuffer替代品是ByteBuf

A. 它可以被用户自定义的缓冲区类型扩展,通过内置的复合缓冲区类型实现了透明的零拷贝;
B.容量可以按需增长(类似于 JDK 的 StringBuilder)
C.读和写使用了不同的索引
D.支持方法的链式调用
E.支持引用计数
F.支持池化

###6. Bootstap-引导客户端和无连接协议
Bootstrap类负责为客户端和使用无连接协议的应用程序创建 Channel

单元测试

使用EmbeddedChannel 测试 ChannelHandler

  1. 测试入站消息
  2. 测试出站消息
  3. 测试异常处理

##编解码器

  • 解码器
    将字节解码为消息
    将一种消息类型解码为另一种

  • 编码器
    将消息编码为字节
    将消息编码为消息

##Netty服务端启动

  1. 创建服务端Channel
  2. 初始化服务端Channel
  3. 注册Selector
  4. 端口绑定,实现对本地端口的接听

##预置的ChannelHandler和编解码器

  1. 通过 SSL/TLS 保护 Netty 应用程序
  2. ChannelHandler处理 HTTP 和 HTTPS协议
  3. 支持WebSocket
  4. ChannelHandler检测空闲连接以及超时
  5. FileRegion,通过支持零拷贝的文件传输的Channel来发送的文件区域
  6. 使用JDK、JBOSS Marshalling、Protocol Buffers序列化数据
  7. 使用UDP广播事件

###创建服务端Channel
bind()[用户代码入口] ->initAndRegister()[初始化并注册] ->newChannel()[创建服务端channel]

##如何使用Netty进行RPC服务器的开发?

  1. 定义RPC请求消息、应答消息结构,里面要包括RPC的接口定义模块、包括远程调用的类名、方法名称、参数结构、参数值等信息。
  2. 服务端初始化的时候通过容器加载RPC接口定义和RPC接口实现类对象的映射关系,然后等待客户端发起调用请求。
  3. 客户端发起的RPC消息里面包含,远程调用的类名、方法名称、参数结构、参数值等信息,通过网络,以字节流的方式送给RPC服务端,RPC服务端接收到字节流的请求之后,去对应的容器里面,查找客户端接口映射的具体实现对象。
  4. RPC服务端找到实现对象的参数信息,通过反射机制创建该对象的实例,并返回调用处理结果,最后封装成RPC应答消息通知到客户端。
  5. 客户端通过网络,收到字节流形式的RPC应答消息,进行拆包、解析之后,显示远程调用结果。

    客户端并发发起RPC调用请求,然后RPC服务端使用Netty连接器,分派出N个NIO连接线程,这个时候Netty连接器的任务结束。然后NIO连接线程是统一放到Netty NIO处理线程池进行管理,这个线程池里面会对具体的RPC请求连接进行消息编码、消息解码、消息处理等等一系列操作。最后进行消息处理(Handler)的时候,处于性能考虑,这里的设计是,直接把复杂的消息处理过程,丢给专门的RPC业务处理线程池集中处理,然后Handler对应的NIO线程就立即返回、不会阻塞。这个时候RPC调用结束,客户端会异步等待服务端消息的处理结果,通过消息回调机制实现。
    Netty对于RPC消息的解码、编码、处理对应的模块和流程,具体如下图所示:
内容概要:《2024年印尼税收袖珍指南》由普华永道发布,涵盖了印尼税收体系的关键方面。主要内容包括企业所得税、个人所得税、预提税、国际税收协定、增值税、奢侈品销售税、碳税、关税与消费税、税收优惠、地方税、印花税、税务会计、税务稽查与评估、强制执行征税、税务纠纷与处理等。企业所得税税率一般为22%,特定条件可享受优惠。个人所得税采用超额累进税率,最高达35%。预提税涵盖多种收入类型,如工资、利息、股息等。国际税收协定帮助避免双重征税,提供优惠税率。增值税标准税率为11%,部分商品和服务免征。税收优惠包括免税期、加计扣除等,尤其针对特定行业和地区。地方税种类繁多,如土地与建筑物税、机动车税等。税务稽查与评估确保纳税人合规,税务纠纷可通过异议、申诉、诉讼等方式解决。 适用人群:企业财务人员、税务顾问、跨国公司税务部门、个人纳税人等。 使用场景及目标:①帮助企业理解和遵守印尼税法,优化税务规划;②协助个人纳税人正确申报各类税项;③为税务顾问提供最新税收政策信息,提升专业服务水平;④为跨国公司处理跨境税务问题提供指导。 阅读建议:此指南内容详尽,建议读者根据自身需求重点阅读相关章节,结合实际案例深入理解各项规定,并关注最新政策动态,确保税务处理合法合规。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值