Netty原来就是这样啊(二)

news/2024/11/6 19:38:44/

前言:

Netty其实最大的特点就是在于对于对NIO进行了进一步的封装,除此以外Netty的特点就是在于其的高性能 高可用性,下面就会一一进行说明。

高性能:

我在Netty原来就是这样啊(一)-CSDN博客 解释了其中的零拷贝的技术除此以外还有Reactor线程模型,这个Reactor线程模型的思想就是基于NIO这个也是可以通过看我的那个博客

Reactor线程模型:

Raactor模式;

组成:

Reactor:在一个线程中进行运行,这个主要就是监听以及分发相关的事件, 这个可以看做是一个中转站,就像我们坐高铁一样,如果没有直达的车次的话那么我们就会选择一个有目的地的高铁站然后我们就到达那个中转站然后乘坐对应的高铁到达目的地

Handler: 处理程序执行 I/O 事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际官员。Reactor 通过调度适当来处理实际的来自客户端的请求

三种模式:
单 Reactor 单线程:

实现原理: 这个就是有Reactor负责监听以及分配IO事件,当监听到事件之后如果是连接事件的话那么就是由Acceptor来进行处理,反之的话由于是单线程的那么read send 以及处理逻辑都会在一个线程中进行

优缺点: 优点就是在于由于单线程的那么就不会产生线程和线程之间的竞争也就是上下文切换

缺点也是比较明显的那就是当处理的请求比较多的时候那么处理的效率就会特别低

单 Reactor 多线程:

实现过程:这个就是在处理业务逻辑的是不一样的,在这个模型当中的话那么就叫处理业务逻辑的部分交给线程池来进行处理,Handler就是负责read以及send的操作,除了这个以外的话那么就是Handler线程的数目变多了,就是在read以及send的时候效率提高了

优缺点: 优点: 相较于单Reactor单线程而言能够处理的并发的请求量多 但是缺点也是在这里因为只有一个Reactor来进行监听以及分配IO事件,这个也是一个瓶颈的地方

主从 Reactor 多线程:

实现原理: 相较于单Reactor多线程而言,当MainReactore建立连接之后将分配一些IO连接给子Reactor那么这样的话就是由多个Reactor来负责监听以及分配IO事件给Handler

优缺点: 优点:就是在于相对于两个模型而言可以应对高并发场景下的请求 缺点:就是在于进行实现的时候会十分复杂

Netty的线程模型:

Netty的线程模型在主从Reactor多线程的基础之上进行了进一步的优化

组成:

BossGroup:   这个主要就是当接收到来自于客户端的请求之后和客户端建立连接用的就是线程池

NioEventLoop: 这个就是里面用于处理实际请求的线程

TaskQueue:这个就是用于存放没有来得及处理的请求的也可以说是任务是一个队列

WorkerGroup: 这个也是一个线程池,里面的就是用于处理业务逻辑以及read write

NIOScoektChanel:这个就是一个通过被selector进行监听用于传输数据的

PipLine:  pipline中包含了 channel,即通过pipline可以获取到对应的 channel,并且pipline维护了很多的 handler(处理器)来对我们的数据进行一系列的处理。 

工作原理: 

1.当客户端发送请求的时候那么这个时候BossGroup负责建立连接然后NIOEventLoop中的Slecetor和客户端的连接进行一个绑定

2.建立连接成功之后就会生成 NIOSocketChannel,之后就会将这个通道和WorkGroup中的NioEventLoop的selector进行一个绑定

3.WorkGroup中的NioEventLoop对于通道进行一个轮询如果有read/write事件的时候,这个时候就会将这个IO事件分发给相应的 ChannelPipeline(包含了多个 ChannelHandler,每个 ChannelHandler 负责处理特定的事件或数据,从而实现了高可用性和高性能的网络通信。) 进行处理。处理完成之后就会直接将结果返回给客户端

高可用性:

 负载均衡

1.客户端负载均衡:客户端可以通过负载均衡算法(如轮询、随机等)选择合适的服务器节点进行连接。

2.服务端负载均衡:使用反向代理(如 Nginx、HAProxy)或负载均衡器(如 AWS ELB)将请求分发到多个服务器节点,确保单个节点的故障不会影响整体服务。

健康检查

  • 定期健康检查:定期检查服务器节点的健康状态,及时发现并隔离故障节点。
  • 心跳检测:客户端和服务端之间定期发送心跳包,检测连接状态。

 分布式部署

  • 多节点部署:在多个物理或虚拟机上部署相同的服务器节点,确保单点故障不会影响整个系统。
  • 地理分布:在不同地理位置部署服务器节点,提高系统的容灾能力。

http://www.ppmy.cn/news/1544873.html

相关文章

【SpringCloud知识】springcloud生态rpc组件openfeign详细介绍

文章目录 概述1. 什么是 OpenFeign?2. OpenFeign 的核心功能3. 如何包含 OpenFeign4. 如何启用 OpenFeign5. OpenFeign 的使用6. OpenFeign 的属性解析模式7. OpenFeign 的支持和集成8. OpenFeign 的日志打印和配置9. OpenFeign 的安全性支持 底层实现原理1. 核心组…

LN2220 2A 高效率升压 DC/DC 电压调整器

1、产品概述 LN2220 是一款微小型、高效率、升压型 DC/DC 调整器。 电路由电流模 PWVM 控制环路,误差放大器,斜波补偿电路, 比较器和功率开关等模块组成。该芯片可在较宽负载范围内 高效稳定的工作,内置一个4A的功率开关和软启动保…

【docker】docker 环境配置及安装

本文介绍基于 官方存储库 docker 的环境配置、安装、代理配置、卸载等相关内容。 官方安装文档说明:https://docs.docker.com/engine/install/ubuntu/ 虚拟机环境 Ubuntu 20.04.6 LTS 安装步骤 添加相关依赖 sudo apt-get update sudo apt-get install ca-certifi…

DNS查询服务器的全流程解析

### DNS查询服务器的基本流程,能画出图更好,并说明为什么DNS查询为什么不直接从单一服务器查询ip,而是要经过多次查询,多次查询不会增加开销么(即DNS多级查询的优点)? - **用户发起请求**&#…

元戎启行嵌入式面试题及参考答案

介绍下 CAN 通信原理 控制器局域网(CAN)是一种串行通信协议,主要用于汽车、工业自动化等领域的电子控制单元(ECU)之间的通信。 其通信原理是基于多主站架构。在总线上,多个节点(设备)都可以主动发起通信。CAN 协议使用差分信号来传输数据,通过两条信号线 CAN_H 和 CAN…

VMware虚拟机的内存大小释疑

在VMware中设置虚拟机的内存大小,并不意味着虚拟机会占用等量的物理内存。虚拟机的内存分配涉及到几个概念: 1. 分配的内存: 这是你在VMware中为虚拟机设置的内存大小,即你告诉VMware为虚拟机预留的内存量。 2. 实际使用的内存…

反射API与AOP:打造高效可维护的应用架构(代码示例)

在软件开发的世界里,我们每天都在和代码打交道,就像和一群调皮的孩子玩耍。有时候,这些代码孩子会让我们头疼,但有时候,它们也会给我们带来惊喜。今天,我们要讲的是如何用反射API和AOP这两个神奇的“玩具”…

BES2600WM---HiLink RM56 EVK

0 Preface/Foreword 0.1 路径 OpenHarmony/device_soc_bestechnic - 码云 - 开源中国 https://github.com/Hi-LinkDuino/RM56 1 环境搭建 1.1 安装依赖工具 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc ope…