首页  

netty整体架构笔记     所属分类 netty 浏览量 36
Netty 核心原理剖析与 RPC 实践 前3讲笔记 

https://learn.lianglianglee.com/


00 学好 Netty,是你修炼 Java 内功的必经之路.md
01 初识 Netty:为什么 Netty 这么流行?.md
02 纵览全局:把握 Netty 整体架构脉络.md



netty源码    设计原理 IO模型 、内存管理、线程模型、数据结构
拆包/粘包、数据编解码、TCP断线重连 空闲连接  心跳 
网络、分布式服务
内存管理  linux内存管理 内存分配器  内存池 
高性能数据结构 
HashedWheelTimer 
FastThreadLocal 
无锁队列 MpscArrayQueue


Netty 网络应用框架,核心关注点:
I/O 模型、线程模型和事件处理机制;
易用性 API 接口;
对数据协议、序列化的支持。

健壮性、性能、可扩展性

主从 Reactor 多线程模型

 I/O 多路复用、Reactor 设计模式、零拷贝

优化手段:
对象池复用技术  4.1 版本开始 jemalloc 成为默认内存分配方式
零拷贝技术
CompositeByteBuf 减少数据拷贝

除了操作系统级别的零拷贝技术外,Netty 提供了更多面向用户态的零拷贝技术,
在 I/O 读写时直接使用 DirectBuffer,避免在堆内存和堆外内存之间的拷贝。

高性能、低延迟 更低的资源消耗, 弥补Java NIO 的缺陷 
内存泄漏检测

通用工具类 io.netty.util.concurrent 包中提供异步编程的数据结构

Netty 4.1.42 
Netty 整体结构、逻辑架构、源码结构

1. Core 核心层
提供底层网络通信的通用抽象和实现,包括可扩展的事件模型、通用的通信 API、支持零拷贝的 ByteBuf 等。
2. Protocol Support 协议支持层
覆盖了主流协议的编解码实现,如 HTTP、SSL、Protobuf、压缩、大文件传输、WebSocket、文本、二进制等主流协议,支持自定义应用层协议。
3. Transport Service 传输服务层
提供网络传输能力的定义和实现方法。支持 Socket、HTTP 隧道、虚拟机管道等传输方式。
Netty 对 TCP、UDP 等数据传输做了抽象和封装,用户可以更聚焦在业务逻辑实现上,不必关系底层数据传输的细节。

逻辑架构为典型网络分层架构设计,分为网络通信层、事件调度层、服务编排层
网络通信层的核心组件包含BootStrap、ServerBootStrap、Channel三个组件。
BootStrap 和 ServerBootStrap 分别负责客户端和服务端的启动
Channel 是网络通信的载体,提供与底层 Socket 交互的能力


事件调度层
通过 Reactor 线程模型对各类事件进行聚合处理,
通过 Selector 主循环线程集成多种事件( I/O 事件、信号事件、定时事件等),
实际的业务处理逻辑交由服务编排层中相关的 Handler 完成。
事件调度层的核心组件包括 EventLoopGroup、EventLoop
EventLoopGroup 本质是一个线程池,主要负责接收 I/O 请求,并分配线程执行处理请求


一个 EventLoopGroup 往往包含一个或者多个 EventLoop。
EventLoop 用于处理 Channel 生命周期内的所有 I/O 事件,如 accept、connect、read、write 等 I/O 事件。
EventLoop 同一时间会与一个线程绑定,每个 EventLoop 负责处理多个 Channel。
每新建一个 Channel,EventLoopGroup 会选择一个 EventLoop 与其绑定



EventLoopGroup 的实现类是 NioEventLoopGroup,是 Netty 中最被推荐使用的线程模型。
NioEventLoopGroup 继承于 MultithreadEventLoopGroup,是基于 NIO 模型开发的,
可以把 NioEventLoopGroup 理解为一个线程池,每个线程负责处理多个 Channel,而同一个 Channel 只会对应一个线程。



Reactor 三种线程模型:
单线程模型:EventLoopGroup 只包含一个 EventLoop,Boss 和 Worker 使用同一个EventLoopGroup;
多线程模型:EventLoopGroup 包含多个 EventLoop,Boss 和 Worker 使用同一个EventLoopGroup;
主从多线程模型:
EventLoopGroup 包含多个 EventLoop,Boss 是主 Reactor,Worker 是从 Reactor,它们分别使用不同的 EventLoopGroup,主 Reactor 负责新的网络连接 Channel 创建,然后把 Channel 注册到从 Reactor。


服务编排层
负责组装各类服务,它是 Netty 的核心处理链,用以实现网络事件的动态编排和有序传播。
服务编排层的核心组件包括 ChannelPipeline、ChannelHandler、ChannelHandlerContext。

ChannelPipeline 负责组装各种 ChannelHandler,数据的编解码以及加工处理操作都由 ChannelHandler 完成的 ,
内部通过双向链表将不同的 ChannelHandler 链接在一起。
当 I/O 读写事件触发时,ChannelPipeline 会依次调用 ChannelHandler  对 Channel 的数据进行拦截和处理。
ChannelPipeline 中包含入站 ChannelInboundHandler 和出站 ChannelOutboundHandler 两种处理器

客户端出站(请求数据)、服务端入站(解析数据并执行业务逻辑)、服务端出站(响应结果)
ChannelHandler & ChannelHandlerContext

每创建一个 Channel 都会绑定一个新的 ChannelPipeline,
ChannelPipeline 中每加入一个 ChannelHandler 都会绑定一个 ChannelHandlerContex


ChannelHandlerContext 用于保存 ChannelHandler 上下文,
通过 ChannelHandlerContext 可以知道 ChannelPipeline 和 ChannelHandler 的关联关系。
ChannelHandlerContext 可以实现 ChannelHandler 之间的交互,
ChannelHandlerContext 包含了 ChannelHandler 生命周期的所有事件,
如 connect、bind、read、flush、write、close 等

上一篇     下一篇
Java类命名建议

中证A500指数

JDK future 与 netty future promise 实例

netty FastThreadLocal

grep 日志搜索技巧

flink jar包上传目录设置