当前位置: 首页 > news >正文

tcp的网络惊群问题

1. SO_REUSEPORT 可以解决epoll的惊群问题

但是,现在的 TCP Server,一般都是 多进程+多路IO复用(epoll) 的并发模型,比如我们常用的 nginx 。如果使用 epoll 去监听 accept socket fd 的读事件,当有新连接建立时,所有进程都会被触发。因为由于 fork 文件描述符继承的缘故,所有进程中的 accept socket fd 是相同的。惊群效应依然存在。nginx 也必然存在这个问题,nginx 为了解决问题,并且保证各个 worker 之前 accept 连接数的均衡,费了很大的力气。

有了 SO_REUSEPORT ,解决 多进程+多路IO复用(epoll) 并发模型 accept 惊群问题,就简单、高效很多。我们不需要通过 fork 的形式,让多进程监听同一个端口。只需要在各个进程中, 独自的 监听指定的端口,当然在监听前,我们需要为监听 socket 指定 SO_REUSEPORT ,否则会报错啦。由于没有采用 fork 的形式,各个进程中的 accept socket fd 不一样,加之有新连接建立时,内核只会唤醒一个进程来 accept,并且保证唤醒的 均衡性,因此使用 epoll 监听读事件,就不会触发所有啦。也有牛人为 nginx 提了 patch ,使用 SO_REUSEPORT 来杜绝 accept 惊群,并且还能够保证 worker 之间的均衡性哦。
泽民博客 | Jekyll theme

2. Accept 就是bio。对poll/epoll/select都是是用来实现多路复用的,都不是bio

3. linux 惊群问题

关注这块逻辑:

epoll_create()在Fork之前还是之后,有神马区别呢?

Fork之前epoll_create的话,所有进程共享一个epoll红黑数。

如果我们只需要处理accept事件的话,貌似世界一片美好了。但是,epoll并不是只处理accept事件,accept后续的读写事件都需要处理,还有定时或者信号事件。

当连接到来时,我们需要选择一个进程来accept,这个时候,任何一个accept都是可以的。当连接建立以后,后续的读写事件,却与进程有了关联。一个请求与a进程建立连接后,后续的读写也应该由a进程来做。

当读写事件发生时,应该通知哪个进程呢?Epoll并不知道,因此,事件有可能错误通知另一个进程,这是不对的。实验中观察到了这种现象

4. epoll和惊群

比较下EPOLLEXCLUSIVE 和 SO_REUSEPORT

EPOLLEXCLUSIVE 和 SO_REUSEPORT 都是在内核层面将连接分到多个worker,解决了epoll下的惊群,SO_REUSEPORT 会更均衡一些,EPOLLEXCLUSIVE在压力不大的时候会导致连接总是在少数几个worker上(但这个不会产生任何不利影响)。 SO_REUSEPORT在最坏的情况下会导致一个worker即使Hang了,OS也依然会派连接过去,这是非常致命的,所以4.5内核引入了 EPOLLEXCLUSIVE(总是给闲置等待队列的第一个worker派连接)

探索惊群 ⑤ - nginx - NGX_EXCLUSIVE_EVENT

Nginx 是如何解决惊群效应的? | LinkinStar's Blog

nginx默认在linux支持的情况下,支持EPOLLEXCLUSIVE能力。也支持手动修改配置支持SO_REUSEPORT能力

相关文章:

tcp的网络惊群问题

1. SO_REUSEPORT 可以解决epoll的惊群问题 但是,现在的 TCP Server,一般都是 多进程多路IO复用(epoll) 的并发模型,比如我们常用的 nginx 。如果使用 epoll 去监听 accept socket fd 的读事件,当有新连接建立时,所有进…...

云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测

背景 如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当…...

软考教材重点内容 信息安全工程师 第 4 章 网络安全体系与网络安全模型

4,1 网络安全体系的主要特征: (1)整体性。网络安全体系从全局、长远的角度实现安全保障,网络安全单元按照一定的规则,相互依赖、相互约束、相互作用而形成人机物一体化的网络安全保护方式。 (2)协同性。网络安全体系依赖于多种安全机制,通过各…...

机器学习——期末复习 重点题归纳

第一题 问题描述 现有如下数据样本: 编号色泽敲声甜度好瓜1乌黑浊响高是2浅白沉闷低否3青绿清脆中是4浅白浊响低否 (1)根据上表,给出属于对应假设空间的3个不同假设。若某种算法的归纳偏好为“适应情形尽可能少”,…...

MYSQL——数据更新

一、插入数据 1.插入完整的数据记录 在MYSQL中,使用SQL语句INSERT插入一条完整的记录,语法如下: INSERT INTO 表名 [(字段名1[,...字段名n])] VALUES (值1[...,值n]); 表名——用于指定要插入的数据的表名 字段名——用于指定需要插入数据…...

Vite 基础理解及应用

文章目录 概要Vite基础知识点1. 快速启动和热更新热更新原理 2. 基于ES模块的构建3. 对不同前端框架的支持 vite.config.js配置实例1. 基本结构2. 服务器相关配置3. 输入输出路径配置4. 打包优化配置 项目构建一、项目初始化二、项目结构理解三、CSS处理四、静态资源处理五、构…...

[JAVA]用MyBatis框架实现一个简单的数据查询操作

基于在前面几章我们已经学习了对MyBatis进行环境配置,并利用SqlSessionFactory核心接口生成了sqlSession对象对数据库进行交互,执行增删改查操作。这里我们就先来学习如何对数据进行查询的操作,具体查询操作有以下几个步骤 创建实体类创建Ma…...

CSS 样式的优先级?

在CSS中,样式的优先级决定了当多个样式规则应用于同一个元素时,哪个样式会被最终使用。以下是一些决定CSS样式优先级的规则: 就近原则: 最后应用在元素上的样式具有最高优先级。这意味着如果两个选择器都应用了相同的样式&#xf…...

Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)

Linux驱动开发快速入门——字符设备驱动 前言 笔者使用开发板型号:正点原子的IMX6ULL-alpha开发板。ubuntu版本为:20.04。写此文也是以备忘为目的。 字符设备驱动 本小结将以直接操作寄存器的方式控制一个LED灯,可以通过read系统调用可以…...

数据结构《栈和队列》

文章目录 一、什么是栈?1.1 栈的模拟实现1.2 关于栈的例题 二、什么是队列?2.2 队列的模拟实现2.2 关于队列的例题 总结 提示:关于栈和队列的实现其实很简单,基本上是对之前的顺序表和链表的一种应用,代码部分也不难。…...

C# 超链接控件LinkLabel无法触发Alt快捷键

在C#中,为控件添加快捷键的方式有两种,其中一种就是Windows中较为常见的Alt快捷键,比如运行对话框,记事本菜单等。只需要按下 Alt 框号中带下划线的字母即可触发该控件的点击操作。如图所示 在C#开发中,实现类似的操作…...

JVM类加载过程-Loading

一、Class对象的生命周期 .class文件是如何加载到内存中:.class文件是ClassLoader通过IO将文件读到内存,再通过双亲委派的模式进行Loading,再Linking、以及Initializing,代码调用等一系列操作后,进行GC,组成完整的生命周期; 二、双亲委派模式(Loading的过程): 1、类…...

2024年11月19日Github流行趋势

项目名称:build-your-own-x 项目维护者:danistefanovic, rohitpaulk, sarupbanskota 等项目介绍:通过从零开始重新创建你最喜欢的技术来掌握编程。项目star数:312,081项目fork数:29,004 项目名称:freqtrad…...

详细描述一下Elasticsearch索引文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch索引文档的过程? Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到…...

基于css的Grid布局和vue实现点击左移右移轮播过渡动画效果

直接上代码&#xff0c;以下代码基于vue2,需要Vue3或者react可以使用国内直连GPT/Claude来帮你转换下 代码如下&#xff1a; // ScrollCardsGrid.vue <template><div class"scroll-cards-container"><!-- 左箭头 --><div v-show"showLef…...

HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)习惯推荐方案概述

一、习惯推荐是HarmonyOS学习用户的行为习惯后做出的主动预测推荐。 1.开发者将用户在应用/元服务内的使用行为向HarmonyOS共享&#xff0c;使得HarmonyOS可以基于共享的数据学习用户的行为习惯。 2.在HarmonyOS学习到用户的行为习惯后&#xff0c;会给用户推荐相应功能&#x…...

【AtCoder】Beginner Contest 380-F.Exchange Game

题目链接 Problem Statement Takahashi and Aoki will play a game using cards with numbers written on them. Initially, Takahashi has N N N cards with numbers A 1 , … , A N A_1, \ldots, A_N A1​,…,AN​ in his hand, Aoki has M M M cards with numbers B …...

30. 并发编程

一、什么是多任务 如果一个操作系统上同时运行了多个程序&#xff0c;那么称这个操作系统就是 多任务的操作系统&#xff0c;例如&#xff1a;Windows、Mac、Android、IOS、Harmony 等。如果是一个程序&#xff0c;它可以同时执行多个事情&#xff0c;那么就称为 多任务的程序。…...

【包教包会】CocosCreator3.x框架——带翻页特效的场景切换

一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压&#xff0c;导入cocos creator&#xff08;版本3.8.2&#xff09;&#xff0c;可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面&#xff0c;无法实现页面特效。…...

k8s上面的Redis集群链接不上master的解决办法

问题描述 之前在k8s上面部署了一台node&#xff0c;然后创建了6个redis的pod&#xff0c;构建了一个redis的集群&#xff0c;正常运行。 最近添加了一台slave node&#xff0c;然后把其中的几个redis的pod调度到了slave node上面&#xff0c;结果集群就起不来了&#xff0c;…...

<项目代码>YOLOv8 瞳孔识别<目标检测>

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

网络编程-002-UDP通信

1.UDP通信的简单介绍 1.1不需要通信握手,无需维持连接,网络带宽需求较小,而实时性要求高 1.2 包大小有限制,不发大于路径MTU的数据包 1.3容易丢包 1.4 可以实现一对多,多对多 2.客户端与服务端=发送端与接收端 代码框架 收数据方一般都是客户端/接收端 3.头文件 #i…...

MySQL更换瀚高语法更换

MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后&#xff0c;一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…...

Object.prototype.hasOwnProperty.call(item, key) 作用与用途

在 JavaScript 中&#xff0c;Object.prototype.hasOwnProperty.call(item, key) 是一种检查对象 item 是否具有特定属性 key 作为自身的属性&#xff08;而不是继承自原型链&#xff09;的方法。这种调用方式是安全的&#xff0c;特别是在处理可能被修改过原型链的对象时。 解…...

DNS的10种资源记录

前言 在DNS&#xff08;域名系统&#xff09;中&#xff0c;常见的资源记录&#xff08;Resource Records, RR&#xff09;用于存储域名与IP地址、邮件服务器等网络资源之间的映射关系。以下是几种常见的DNS资源记录&#xff1a; 1. A记录&#xff08;Address Record&#xf…...

【数据分享】1981-2024年我国逐日最低气温栅格数据(免费获取)

气象数据一直是一个价值很高的数据&#xff0c;它被广泛用于各个领域的研究当中。之前我们分享过来源于美国国家海洋和大气管理局&#xff08;NOAA&#xff09;下设的国家环境信息中心(NCEI)发布的1929-2024年全球站点的逐日最低气温数据&#xff08;可查看之前的文章获悉详情&…...

Kafka进阶_1.生产消息

文章目录 一、Controller选举二、生产消息2.1、创建待发送数据2.2、创建生产者对象&#xff0c;发送数据2.3、发送回调2.3.1、异步发送2.3.2、同步发送 2.4、拦截器2.5、序列化器2.6、分区器2.7、消息可靠性2.7.1、acks 02.7.2、acks 1(默认)2.7.3、acks -1或all 2.8、部分重…...

百度世界2024:智能体引领AI应用新纪元

在近日盛大举行的百度世界2024大会上&#xff0c;百度创始人李彦宏以一场题为“文心一言”的精彩演讲&#xff0c;再次将全球科技界的目光聚焦于人工智能&#xff08;AI&#xff09;的无限可能。作为一名科技自媒体&#xff0c;我深感这场演讲不仅是对百度AI技术实力的一次全面…...

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…...

同向双指针

长度最小的子数组 力扣209 #define MIN(a, b) ((b) < (a) ? (b) : (a)) int minSubArrayLen(int target, int* nums, int numsSize) {int ans numsSize 1;int left 0;int right 0;int sum 0;for (right 0; right < numsSize; right){sum nums[right];while (su…...

这样做微信网站/优化 seo

通过ssh方式连接msyql&#xff0c;mysql数据处理是用的gorm需要初始化mysql的地方调用InitMysqlBySSh方法初始化成功&#xff0c;将db赋值给自己定义的全局mysql变量&#xff0c;便于后续调用 package confimport ("bytes""context""errors"&qu…...

日本设计 网站/代发百度关键词排名

http://bbs.hupu.com/3774151.html 美国的徒手健身大师给执法部队和特种部队训练用的&#xff0c;安全且有效&#xff0c;不会有肌肉受伤风险&#xff0c;也不需要器材&#xff0c;但效果明显。 对于前线作战部队来说&#xff0c;训练中最重要的是安全&#xff0c;在训练中把肌…...

网站建设主要包括哪些/seo搜索引擎优化人员

干货 | 可验证延迟函数&#xff08;VDF&#xff09; 自从以太坊将可验证延迟函数&#xff08;Verifiable Delay Function, VDF&#xff09; 列入研究计划并打算在以太坊 2.0 使用之后&#xff0c;VDF 得到了广泛的关注。VDF 这个概念最初由斯坦福大学密码学教授 Dan Boneh 等人…...

做网站开发找哪家公司/百度地图网页版

那么我们可以用下面的方法修正一下&#xff1a; \usepackage{txfonts} \let\mathbb\varmathbb \DeclareSymbolFont{letters}{OML}{ztmcm}{m}{it} 对于mathptmx包则用&#xff1a; \usepackage{mathptmx} \DeclareMathAlphabet{\mathcal}{OMS}{cmsy}{m}{n} \DeclareSymbolFont{l…...

河南省建设监理协会官方网站/网站快速排名优化价格

所有题目均有四种语言实现。C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录 题目 对于任意两个正整数A和B,定义它们之间的差异值和相似值:差异值:A、B转换成二进制后,对于二进制的每一位,对应位置的bit值不相同则为1,否则为0;相似值:A、B转换成二进…...

怎样做网站推广啊视频/移动端关键词排名优化

一、介绍 学习目标&#xff1a;熟练使用“标准基本体”和“扩展基本体”内的按钮来创建对象。 软件环境&#xff1a;3ds Max2015 二、实验步骤 1&#xff0c;启动3ds Max&#xff0c;使用“长方体”工具在场景中创建一个长方体作为空间的地面&#xff0c;然后在“修改”面板中设…...