Netty原来就是这样啊(二)

前言:

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.mzph.cn/bicheng/59541.shtml

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

相关文章

对于相对速度的重新理解

狭义相对论速度合成公式如下, 现在让我们尝试用另一种方式把它推导出来。 我们先看速度的定义, 常规的速度合成方式如下, 如果我们用速度的倒数来理解速度, 原来的两个相对速度合成, 是因为假定了时间单位是一样的&am…

idea 导入Spring源码遇到的坑并解决

1.下载相关文件 通过百度网盘分享的文件:Spring 链接:https://pan.baidu.com/s/1r9rkGOCaY9SFn9ecng5cIg?pwd8888 提取码:8888 2.配置gradle环境 gradle下载地址 需要翻墙下 https://services.gradle.org/distributions/ 我选择的是 grad…

红队-linux基础(1)

声明 通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.openssl 1、openssl passwd -1 123 openssl是一个开源的…

迈入国际舞台,AORO M8防爆手机获国际IECEx、欧盟ATEX防爆认证

近日,深圳市遨游通讯设备有限公司(以下简称“遨游通讯”)旗下5G防爆手机——AORO M8,通过了CSA集团的严格测试和评估,荣获国际IECEx及欧盟ATEX防爆认证证书。2024年11月5日,CSA集团和遨游通讯双方领导在遨游…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十八集补充:制作空洞骑士独有的EventSystem和InputModule

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作空洞骑士独有的EventSystem和InputModule总结 前言 hello大家好久没见,之所以隔了这么久才更新并不是因为我又放弃了这个项目,而…

你们要的App电量分析测试来了

Batterystats 是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用 adb 将收集的电池数据转储到开发计算机,并创建一份可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的…

<项目代码>YOLOv8 学生课堂行为识别<目标检测

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

智慧水肥一体化:道品科技现代农业的智能管理模式

智慧水肥一体化是现代农业中一种重要的管理模式,它通过信息技术和物联网技术的结合,实现对水资源和肥料的智能化管理。这一系统的主要功能包括环境监测、集中管理、智能控制、主动报警和数据管理。以下将分别对这些功能进行详细阐述,并探讨智…

ES入门:查询和聚合

安装完ElasticSearch 和 Kibana后我们开始学习 为了方便测试,使用kibana的dev tool来进行学习测试: 测试工具 从索引文档开始 插入 向 Elasticsearch 索引 customer 的 _doc 类型的文档 id 为 1 的文档发送 PUT 请求的例子。 请求体为 JSON 格式&am…

Docker Remote API TLS 认证_docker远程接口未授权访问漏洞怎么解决

漏洞描述: Docker Remote API 是一个取代远程命令行界面的REST API,其默认绑定2375端口,如管理员对其配置不当可导致未授权访问漏洞。攻击者利用docker client或者http直接请求就可以访问这个API,可导致敏感信息泄露,…

华为eNSP:QinQ

一、什么是QinQ? QinQ是一种网络技术,全称为"Quantum Insertion",也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN(Virtual Local Area Network&#xff0…

利用SCF文件构建网络渗透

SMB是一种广泛用于企业组织中文件共享目的的网络协议。在内部的渗透测试中,发现包含明文密码和数据库连接字符串等敏感信息的共享文件并不罕见。但是,即使一个文件共享不包含任何可用于连接到其他系统的数据,但是未经身份验证的用户配置拥有该…

陀螺仪BMI323驱动开发测试(基于HAL库SPI通信)

参考资料 编写代码 读取芯片ID void BMI160_Init(void) {uint16_t chipID BMI323_read(BMI160_REG_CHIP_ID);debug("BMI323芯片ID为0x%x;", chipID);if (chipID ! 0x43){debug("未检测到BMI323;");}elsedebug("检测到陀螺仪BMI323;");u8 buf_…

基于vue框架的的流浪宠物救助系统25128(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,宠物类别,领养中心,领养申请,云投喂,申请入驻,义工入驻 开题报告内容 基于Vue框架的流浪宠物救助系统开题报告 一、项目背景 近年来,随着城市化进程的加速,流浪动物问题日益凸显。它们面临着食物短缺、疾…

Python | Leetcode Python题解之第541题反转字符串II

题目: 题解: class Solution:def reverseStr(self, s: str, k: int) -> str:t list(s)for i in range(0, len(t), 2 * k):t[i: i k] reversed(t[i: i k])return "".join(t)

机器学习2_支持向量机_线性可分——MOOC

目录 定义 线性可分(Linear Separable) 线性不可分(Nonlinear Separable) 数学化定义 问题描述 优化问题 线性可分定义 假定训练样本集是线性可分的 1、最小化(Minimize): 2、限制条件…

Java基础-Java中的常用类(上)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 String类 创建字符串 字符串长度 连接字符串 创建格式化字符串 String 方法 System类 常用方法 方…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大,电量消耗问题也日益凸显,尤其是在户外活动时,电量告急常常让人措手不及。面对这一挑战,基于TRIZ(发明问题解决理论)的创新思维,一款全新的便携式光伏手机充电装置应…

Django目录结构最佳实践

Django项目目录结构 项目目录结构配置文件引用修改创建自定义子应用方法修改自定义注册目录从apps目录开始 项目目录结构 └── backend # 后端项目目录(项目名称)├── __init__.py├── logs # 项目日志目录├── manage.py #…

《今日制造与升级》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《今日制造与升级》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《今日制造与升级》级别? 答:国家级。主管单位:中国机械工业联合会 …