Netty剖析 - 掌握Netty 整体架构脉络

news2024/11/16 2:58:22

文章目录

  • Netty 整体结构
    • Core 核心层
    • Protocol Support 协议支持层
    • Transport Service 传输服务层
  • Netty 逻辑架构
    • 网络通信层
    • 事件调度层
    • 服务编排层
    • 组件关系梳理
  • Netty 源码结构
    • Core 核心层模块
    • Protocol Support 协议支持层模块
    • Transport Service 传输服务层模块
  • 思维导图

在这里插入图片描述


Netty 整体结构

在这里插入图片描述

Core 核心层

  1. 可扩展的事件模型: Netty的核心层提供了一个可扩展的事件模型,这使得开发者能够方便地处理各种网络事件,如连接建立、数据接收、数据发送等。

  2. 通用的通信API: Netty的核心层提供了通用的通信API,简化了网络编程的复杂性。开发者可以使用这些API来构建各种类型的网络应用,如TCP、UDP等。

  3. 支持零拷贝的ByteBuf: ByteBuf是Netty中用于数据传输的缓冲区抽象,支持零拷贝的ByteBuf能够在数据传输过程中最大程度地减少内存复制的开销,提高了性能和效率。


Protocol Support 协议支持层

协议支持层提供了对主流协议的编解码实现,包括但不限于HTTP、SSL、Protobuf、压缩、大文件传输、WebSocket、文本、二进制等。

  1. 覆盖主流协议: Netty的协议支持层涵盖了许多主流协议的编解码实现,这包括了常见的HTTP、WebSocket等协议,以及诸如SSL、Protobuf等协议,使得开发者能够在Netty的基础上快速地构建支持这些协议的网络应用。

  2. 支持自定义应用层协议: 除了主流协议外,Netty还支持开发者自定义应用层协议。这意味着开发者可以根据自己的需求定义和实现特定的应用层协议,并在Netty的支持下进行编解码,从而实现定制化的网络通信。

  3. 降低开发成本: Netty的协议支持层极大地降低了开发者构建网络应用的成本。通过利用Netty提供的丰富协议支持,开发者可以避免重复实现常见协议的编解码逻辑,从而加快开发速度,提高效率。


Transport Service 传输服务层

  1. 支持多种传输方式: 传输服务层支持多种网络传输方式,包括Socket、HTTP隧道、虚拟机管道等。这些传输方式能够满足不同场景下的需求,使得Netty框架更加灵活和适用于各种网络应用。

  2. 对TCP、UDP等数据传输进行抽象和封装: Netty对TCP、UDP等数据传输进行了抽象和封装,使得用户在编写网络应用时可以更加聚焦于业务逻辑的实现,而不必关心底层数据传输的细节。这种抽象和封装提高了开发效率,并且使得网络应用更加易于维护和扩展。

传输服务层的存在使得Netty框架具备了强大的网络传输能力,为开发者提供了简洁、高效的网络编程接口,帮助他们快速构建可靠的网络应用。


Netty 逻辑架构

在这里插入图片描述

网络通信层

网络通信层其主要职责是执行网络I/O操作,支持多种网络协议和I/O模型的连接操作。一旦网络数据被读取到内核缓冲区,就会触发各种网络事件,这些事件随后会被传递给事件调度层进行处理。

核心组件包括BootStrapServerBootStrapChannel,它们的作用如下:

  1. BootStrap: BootStrap是用于客户端引导的类,用于配置和启动客户端应用程序的网络通信。通过BootStrap,可以设置客户端的连接参数、指定连接的协议、选择I/O模型等。

  2. ServerBootStrap: ServerBootStrap是用于服务器引导的类,用于配置和启动服务器端应用程序的网络通信。通过ServerBootStrap,可以设置服务器的监听端口、指定处理客户端连接的处理器、选择I/O模型等。

在这里插入图片描述

Bootstrap 和 ServerBootStrap 十分相似,两者非常重要的区别在于 Bootstrap 可用于连接远端服务器,只绑定一个 EventLoopGroup。而 ServerBootStrap 则用于服务端启动绑定本地端口,会绑定两个 EventLoopGroup,这两个 EventLoopGroup 通常称为 Boss 和 Worker。

  1. Channel: Channel表示一个网络连接的抽象,它可以是客户端与服务器端之间的通信管道。Channel提供了对网络I/O操作的封装,包括读取数据、写入数据、关闭连接等操作。

事件调度层

事件调度层其主要职责是通过 Reactor 线程模型对各类事件进行聚合处理,并通过 Selector 主循环线程集成多种事件,包括 I/O 事件、信号事件、定时事件等。实际的业务处理逻辑通常是由服务编排层中相关的 Handler 完成。

核心组件包括 EventLoopGroupEventLoop

  1. EventLoopGroup: EventLoopGroup 是一组 EventLoop 的集合,它负责管理和调度 EventLoop 的生命周期。在大多数情况下,一个 EventLoopGroup 会包含多个 EventLoop,每个 EventLoop 在单独的线程中运行,负责处理特定的 I/O 事件。

  2. EventLoop: EventLoop 是事件循环,它负责处理特定线程中发生的事件。每个 EventLoop 包含一个 Selector 主循环线程,通过它来监听和处理各种事件。在 Reactor 线程模型中,EventLoop 负责接收事件、调度事件处理、执行事件处理器等工作。

通过事件调度层,网络应用程序能够高效地处理各种事件,包括网络 I/O 事件、信号事件和定时事件等,从而实现并发处理和高性能的网络通信。

在这里插入图片描述

我们可以总结出 EventLoopGroup、EventLoop、Channel 的几点关系。

  • 一个 EventLoopGroup 往往包含一个或者多个 EventLoopEventLoop 用于处理 Channel 生命周期内的所有 I/O 事件,如 accept、connect、read、write 等 I/O 事件。

  • EventLoop 同一时间会与一个线程绑定,每个 EventLoop 负责处理多个 Channel

  • 每新建一个 ChannelEventLoopGroup 会选择一个 EventLoop 与其绑定。该 Channel 在生命周期内都可以对 EventLoop 进行多次绑定和解绑。


在Netty框架中,EventLoopGroup是Netty Reactor线程模型的具体实现方式之一。Reactor线程模型是一种并发模式,用于处理多个客户端连接的网络I/O事件。

在Reactor线程模型中,有一个或多个线程负责监听并接收事件,然后将这些事件分发给对应的事件处理器进行处理。

具体来说,EventLoopGroup在Netty中对应着Reactor线程模型中的Reactors。根据EventLoopGroup的配置不同,Netty可以支持不同类型的Reactor线程模型,包括单线程模型、多线程模型和主从多线程模型。

  1. 单线程模型:在单线程模型中,EventLoopGroup只包含一个EventLoop。在Netty中,Boss和Worker都使用同一个EventLoopGroup,这意味着所有的网络I/O事件都由同一个EventLoop来处理。这种模型适用于并发连接较少的场景,能够简化并发控制和线程同步。

  2. 多线程模型:在多线程模型中,EventLoopGroup包含多个EventLoop。Boss和Worker仍然使用同一个EventLoopGroup,但是有多个EventLoop来处理不同的连接。这种模型适用于并发连接较多的场景,能够提高并发处理能力。

  3. 主从多线程模型:在主从多线程模型中,EventLoopGroup包含多个EventLoop,但是Boss和Worker分别使用不同的EventLoopGroup。主Reactor负责新的网络连接Channel的创建,并将Channel注册到从Reactor上。这种模型适用于高并发的网络应用,能够更好地分离连接接受和事件处理的责任。

因此,EventLoopGroup作为Netty框架中的核心处理引擎,通过创建不同配置的EventLoopGroup,实现了不同类型的Reactor线程模型,以满足不同场景下的性能需求和并发处理能力。


服务编排层

服务编排层其主要职责是负责组装各类服务,并实现网络事件的动态编排和有序传播。服务编排层的核心组件包括ChannelPipelineChannelHandlerChannelHandlerContext

  1. ChannelPipeline: ChannelPipeline是Netty的核心编排组件,用于组装各种ChannelHandler。实际的数据编解码和加工处理操作都由ChannelHandler完成。ChannelPipeline可以理解为ChannelHandler的实例列表,内部通过双向链表将不同的ChannelHandler连接在一起。当I/O读写事件触发时,ChannelPipeline会依次调用ChannelHandler列表对Channel的数据进行拦截和处理。

  2. ChannelHandler: ChannelHandler是处理I/O事件或者拦截I/O操作的处理器。它可以通过ChannelPipeline实现对网络数据的编解码、加工处理以及其他业务逻辑的实现。每个ChannelHandler都会被添加到ChannelPipeline中,以便在特定的事件发生时被调用。

  3. ChannelHandlerContext: ChannelHandlerContext提供了ChannelHandlerChannelPipeline之间的通信桥梁。它包含了当前ChannelHandlerChannelPipeline的信息,并提供了操作ChannelPipeline的方法。ChannelHandlerContext可以用于获取Channel、触发事件以及动态修改ChannelPipeline等操作。

需要注意的是,ChannelPipeline是线程安全的,因为每个新的Channel都会绑定一个新的ChannelPipeline,而每个ChannelPipeline关联一个EventLoop,而EventLoop仅会绑定一个线程。这种设计保证了在多线程环境下的线程安全性。

通过这些核心组件,服务编排层实现了对网络事件的动态编排和有序传播,为Netty应用程序提供了高效、灵活的网络通信处理能力。


组件关系梳理

在这里插入图片描述

  1. 服务端启动初始化:

    • 在服务端启动初始化时,会创建两个核心组件:Boss EventLoopGroup和Worker EventLoopGroup。
    • Boss EventLoopGroup负责监听网络连接事件。
    • 当有新的网络连接事件到达时,Boss EventLoopGroup会将对应的Channel注册到Worker EventLoopGroup。
  2. Worker EventLoopGroup和EventLoop:

    • Worker EventLoopGroup会被分配一个EventLoop来处理每个注册的Channel的读写事件。
    • 每个EventLoop都是单线程的,通过Selector进行事件循环。
  3. 客户端发起I/O读写事件:

    • 当客户端发起I/O读写事件时,服务端的EventLoop会进行数据的读取。
  4. 数据处理过程:

    • 数据被传递到ChannelPipeline的第一个ChannelInboundHandler中。
    • ChannelPipeline会依次调用每个ChannelInboundHandler对数据进行处理,并将处理结果传递给下一个ChannelInboundHandler。
    • 数据处理完成后,如果需要将数据写回客户端,则会经过ChannelPipeline的ChannelOutboundHandler进行处理。
  5. 数据写回客户端:

    • 处理结果在ChannelPipeline的ChannelOutboundHandler中传播,最终写回到客户端。

总体来说,Netty内部的逻辑流程是由EventLoopGroup、EventLoop和ChannelPipeline等核心组件共同协作完成的。EventLoopGroup负责管理多个EventLoop,每个EventLoop负责处理一个或多个Channel的读写事件。ChannelPipeline负责管理ChannelHandler,并通过它们对数据进行加工处理和传递。整个过程保证了网络事件的有序处理和高效传输。


Netty 源码结构

在这里插入图片描述

Core 核心层模块

  1. netty-common模块:

    • 核心基础包,为Netty提供丰富的工具类。
    • 包括通用工具类和自定义并发包。
    • 通用工具类如定时器工具TimerTask、时间轮HashedWheelTimer等。
    • 自定义并发包包括异步模型Future & Promise、FastThreadLocal等。
  2. netty-buffer模块:

    • 实现了更加完备的ByteBuf工具类,用于网络通信中的数据载体。
    • 提供了人性化的Buffer API设计,成为Java ByteBuffer的完美替代品。
    • 解决了ByteBuffer长度固定造成的内存浪费问题,更安全地更改了Buffer的容量。
    • 做了许多优化,例如缓存池化、减少数据拷贝的CompositeByteBuf等。
  3. netty-resolver模块:

    • 主要提供了一些有关基础设施的解析工具,包括IP地址、主机名、DNS等。

Protocol Support 协议支持层模块

  1. netty-codec模块:

    • 主要负责编解码工作,实现原始字节数据与业务实体对象之间的相互转化。
    • 支持了大多数业界主流协议的编解码器,如HTTP、HTTP2、Redis、XML等,为开发者节省了大量的精力。
    • 提供了抽象的编解码类ByteToMessageDecoder和MessageToByteEncoder,开发者可以通过继承这两个类轻松实现自定义的编解码逻辑。
  2. netty-handler模块:

    • 主要负责数据处理工作,是一串有序handler的集合。
    • 提供了开箱即用的ChannelHandler实现类,包括日志、IP过滤、流量整形等。
    • 开发者只需在pipeline中加入相应的ChannelHandler即可使用这些功能。

通过netty-codec和netty-handler模块,Netty框架为开发者提供了强大而灵活的工具,帮助他们轻松实现数据的编解码和处理,从而构建高性能、可靠的网络应用程序。


Transport Service 传输服务层模块

  1. netty-transport模块:
    • 是Netty提供数据处理和传输的核心模块。
    • 提供了许多重要的接口,包括Bootstrap、Channel、ChannelHandler、EventLoop、EventLoopGroup、ChannelPipeline等。
    • Bootstrap负责客户端或服务端的启动工作,包括创建、初始化Channel等。
    • EventLoop负责向注册的Channel发起I/O读写操作。
    • ChannelPipeline负责ChannelHandler的有序编排。

这些组件在Netty的逻辑架构中扮演着重要的角色,共同协作实现了网络数据的传输和处理。通过netty-transport模块,开发者可以方便地启动客户端或服务端,管理事件循环、通道和通道处理器,并确保它们之间的有序传输和处理。


思维导图

在这里插入图片描述

戳这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1544845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习OpenNLP

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl OpenNLP概述 OpenNLP是一个基于机器学习的自然语言处理开发工具包,它是Apache软件基金会的一个开源项目。OpenNLP支持多种自然语言处理任务,如分词、…

云数据库认识

云数据库概述 说明云数据库厂商概述Amazon 云数据库产品Google 的云数据库产品Microsoft 的云数据库产品 云数据库系统架构UMP 系统概述UMP 系统架构MnesiaRabbitMQZooKeeperLVSController 服务器Proxy 服务器Agent 服务器日志分析服务器 UMP 系统功能容灾 读写分离分库分表资源…

如何利用python 把一个表格某列数据和另外一个表格某列匹配 类似Excel VLOOKUP功能

环境: python3.8.10 Excel2016 Win10专业版 问题描述: 如何利用python 把一个表格某列数据和另外一个表格某列匹配 类似Excel VLOOKUP功能 先排除两表A列空白单元格,然后匹配x1表格和x2表格他们的A列,把x1表格中A列A1-A810范围对应的B列B1-B810数据,匹配填充到x2范围…

android studio忽略文件

右键文件,然后忽略,就不会出现在commit里面了 然后提交忽略文件即可

纯前端调用本机原生Office实现Web在线编辑Word/Excel/PPT,支持私有化部署

在日常协同办公过程中,一份文件可能需要多次重复修改才能确定,如果你发送给多个人修改后再汇总,这样既效率低又容易出错,这就用到网页版协同办公软件了,不仅方便文件流转还保证不会出错。 但是目前一些在线协同Office…

6.1 LIBBPF简介

写在前面 eBPF 是一项革命性的技术! 内核对于很多开发者来说,就是一个像黑洞一样的存在。它是操作系统最核心的存在,管理者我们的整个计算机和外设。基于稳定性,性能和安全性,我们对内核的任何修改往往是慎之又慎。 但是。 eBPF的出现了,它几乎无需通过更改任何内核源…

【数据存储】TIDB和MySQL的区别

1.TIDB和MySQL对比 对比内容MySQLTiDB架构设计一个传统的单机数据库系统,采用主从复制和分区表等方式来实现水平扩展一个分布式的 NewSQL 数据库,采用分布式存储和分布式事务等技术,支持水平扩展和高可用性事务支持 InnoDB 存储引擎来支持事…

开发者的瑞士军刀:DevToys

DevToys: 一站式开发者工具箱,打造高效创意编程体验,让代码生活更加得心应手!—— 精选真开源,释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys?这是微软研发的一项免费实用的系统工具套…

Selenium 自动化 —— 定位页面元素

更多内容请关注我的 Selenium 自动化 专栏: 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码浏览器窗口操作切换浏览器窗口 使用 Selenium 做自动化,我们不仅仅是打开一个网页,这只是万里长…

高防服务器、高防IP、高防CDN的工作原理是什么

高防IP高防CDN我们先科普一下是什么是高防。“高防”,顾名思义,就犹如网络上加了类似像盾牌一样很高的防御,主要是指IDC领域的IDC机房或者线路有防御DDOS能力。 高防服务器主要是比普通服务器多了防御服务,一般都是在机房出口架设…

Oracle 控制文件详解

1、控制文件存储的数据信息 1)数据库名称和数据库唯一标识符(DBID) 2)创建数据库的时间戳 3)有关数据文件、联机重做日志文件、归档重做日志文件的信息 4)表空间信息 5)检查点信息 6)日志序列号…

SAP BTP云上一个JVM与DB Connection纠缠的案例

前言 最近在CF (Cloud Foundry) 云平台上遇到一个比较经典的案例。因为牵扯到JVM (app进程)与数据库连接两大块,稍有不慎,很容易引起不快。 在云环境下,有时候相互扯皮的事蛮多。如果是DB的问题,就会找DB…

Reactor设计模式和Reactor模型

Reactor设计模式 翻译过来就是反应堆,所以Reactor设计模式本质是基于事件驱动。 角色 Handle(事件)EventHandler(事件处理器)ConcreteEventHandler(具体事件处理器)Synchronous Event Demult…

RK3568平台 iperf3测试网络性能

一.iperf3简介 iperf是一款开源的网络性能测试工具,主要用于测量TCP和UDP带宽性能。它可以在不同的操作系统上运行,包括Windows、Linux、macOS等。iperf具有简单易用、功能强大、高度可配置等特点,广泛应用于网络性能测试、网络故障诊断和网…

线性代数 - 应该学啥 以及哪些可以交给计算机

AI很热,所以小伙伴们不免要温故知新旧时噩梦 - 线代。 (十几年前,还有一个逼着大家梦回课堂的风口,图形学。) 这个真的不是什么美好的回忆,且不说老师的口音,也不说教材的云山雾绕,单…

重构销售话术和知识库,容联云找到了大模型的“钉子”

科技云报道原创。 从ChatGPT诞生起,大模型在营销、客服等场景的落地就被予以众望。然而在经历了一年多的“百模大战”洗礼之后,人们发现无论是算力成本还是内容生成的安全合规问题,都让大模型很难直接应用于机器与人对话的实际业务中。 这其…

高效物联网连接技术创新:ECWAN边缘协同自组网的未来——基于ChirpLAN窄带扩频技术的无线混合组网

物联网是指将各种物理设备通过互联网进行连接和通信的技术。它是一个庞大的网络,由传感器、设备、网络和云服务组成,旨在实现对物体的远程监测、控制和数据采集。 基于ChirpLAN窄带扩频技术的无线混合组网协议ChirpLAN,ChirpLAN是基于其自有的…

基于51单片机的客车汽车安全气囊控制器Proteus仿真

地址:https://pan.baidu.com/s/10enj1EYm_0Z8f_19Sz_eCQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52简介: AT89C52是一款经典的8位单片机,是意法半导体(STMicroelectronics)公…

git笔记之撤销、回退、reset方面的笔记

git笔记之撤销、回退、reset方面的笔记 code review! 文章目录 git笔记之撤销、回退、reset方面的笔记1.git 已经commit了,还没push,如何撤销到初始状态git reset --soft HEAD~1git reset HEAD~1(等同于 git reset --mixed HEAD~1&#xff0…

腾讯云优惠券获取方式(腾讯云优惠券领取入口)

随着云计算的普及,越来越多的企业和个人开始选择云服务。腾讯云作为国内领先的云服务提供商,不仅提供了稳定可靠的云服务,还经常推出各种优惠活动,其中就包括腾讯云优惠券。本文将详细介绍腾讯云优惠券的获取方式及领取入口&#…