从广东电信故障看雪崩

news2024/11/24 12:22:46

本文几乎与此次故障无关,它只是写本文的缘起。

周五早上发一则朋友圈,呼应一下周四下午广东电信的故障:
在这里插入图片描述
我在第一时间(2 点 15 左右)发觉问题,随后我怀疑欠费,马上充值 200 块,未恢复,再次充值 100 块…4 点 20 左右恢复后,我接连收到了好几条充值短信。

虽然电信网络崩了,但计费系统还好,不然也不会充值成功,但如果很多人一起充值,打一波 burst,计费系统也难扛,网络恢复后,电信又集中发送故障期间憋住的短信,这波 burst 又对短信网关造成冲击…如果不幸,突然的网络故障将连带着几个其它服务故障。这是个普遍问题,背后的社会学原因也简单。

如果系统出了问题,用户的处理方案往往高度一致,这种全部同步往往引起连锁反应。比如发现火情,人们会选择逃跑,这导致了疏散通道拥塞,引发潜在的踩踏。类似的,如果电话打不出去,首先会想到欠费,于是引发充值 burst。这些其实和 error retry 没本质区别,而系统崩溃往往都由此引发,而不是故障本身。

我在朋友圈回复一位朋友,另一个和 error retry 类似的行为是 log record。

系统发生故障时,一般会记录 error log,往往所有关联组件都会记录 log,这导致系统甚至网络被 log 阻塞,这还不包括组织 log 字符串处理没玩好造成段错误的事,所以我说系统不是故障打崩的,是记日志记崩的。你是不是也经历过系统阻塞住,反应很慢,结果发现问题在 /dev/log,或者 rsyslogd 把 CPU 打爆。

既然 reaction 可能引发正反馈,那就待在原地什么都不做。所以 Linux 的 panic 和 Windows 的 BSoD(blue screen of death) 是个好方法,日本人的地震自救与此类似。

另外就是指数退避,这非常重要。朋友圈正文说,TCP 固然遵守了该原则,但只能在 TCP 内闭环,应用往往不遵守,出了问题不停 retry,最终引发雪崩。

第三个要点是随机因子,像共享以太网和 Wi-Fi 这种物理链路设施,下面再没有为其兜底的层,它们自身要把容错做到极致,同时采用指数退避和随机因子。

类似注册类业务,充值计费以及后续发短信这种多打一,一打多场景,要引入随机因子,不能一起干。

我经常说 IDC incast 需引入随机因子解决而不是去搞什么拥塞控制算法,因为 incast 本质上后知后觉,无法事先预测,无论 loss-based,delay-based 算法,都有局部性和滞后性,无法事前应对 incast。很简单,incast 业务在 response 前随机等待一个事先配置的不大于 RTT 的时间即可。 多打一的 response 因随机时间在不同时间进入 buffer,大大减少 buffer 占用,缓解 incast 丢包,而 incast 最恐怖后果就是丢包,这大概率引发密集 retry,后果是什么,前面说过了。

朋友圈正文中 ACK 过多问题,我另有详述,这里指出拥塞控制相关的点。

乱序是 TCP 的一个诟病点,但很少有人感受过它带来的关于 ACK 过多的副作用。合理但不经常的场景,TCP 报文两两倒序到达,这直接取消 delayed ack 以及 lro/gro,data/ack 达 1:1,包量加倍。设备预留了资源处理 data,却没有预留有余量的资源处理 “由这些 data 引发的 ack”,越丢包,ACK 越多,设备压力越大,引发连锁反应。不要试图模拟和推导,没有一定体量,雪崩没那么容易,出了问题感受就是了。

电信与互联网两个阵营一直为微信等保活 app 要不要为它们 keepalive 引发的底层信令风暴而买单,在互联网内部有个类似的事,短连接业务要不要为 TCP syn/fin/rst 风暴买单。对短连接,设备处理的绝大多数报文都是 syn/fin/rst 等小控制包,特别是 NAT 等需要重处理的网关,这些小控制包本身让网关不堪重负,遇到 error retry,几乎肯定把网关打挂,而 error retry 的 root cause 往往在目标服务,与网络无关。因此有了连接复用。回到信令风暴的解法,电信侧提供 API,微信调 API 宣称 “我要一直发 keepalive,请勿让底层连接休眠。”

控制流和数据流不能相互影响,这都是场面话,所有雪崩问题的根本解法还是要增加资源,但事情另一面很少有人提起。增加资源之外,还要加大设施密度。最好的例子是 3G,4G,5G 的基站密度越来越大,靓货靠实物来堆。

密度越小越脆弱,雪崩影响越大。可以这么简单理解,同样多的资源,抗雪崩能力取决于分布,低密度设施单点需要强支撑,它跨了全垮了,高密度设施则施力更分散,更能容错。和基站同样好的例子是 CDN,节点密度和雪崩负相关。说了那么久 “控制爆炸半径”,不能光造词,举个例子,这就是。

典型的通用 case,稀疏集群,每台服务器负载都高,逻辑距离远,一台挂掉,临近服务器将被导入加倍流量,一旦也垮掉,故障将加速蔓延,就像丝袜脱丝一样一发不可收拾,密度高就没这问题,每台服务器负载均不太大,且逻辑距离近,负载被周边分担吸收,这是显然的道理。

还有一类雪崩是好心办坏事引发。参考这篇:IPv6 Linux 实现中一个路由缓存的问题,大概意思是,Linux 为 IPv6 构建了一棵路由 cache 树,用来在海量五元组 session 中快速找到匹配的 session,但这棵树的 CRUD 需要持锁,局面变成了,session 越多,性能越差。

类似的 case,也可以从各类垃圾回收机制中找到。

周四下午广东电信严重故障导致我停机 2 个小时。下班路上思考了一下相关。抛开事实不谈,从纯技术上看,雪崩确实是难搞的。零零散散写一篇随笔。

浙江温州皮鞋湿,下雨进水不会胖。

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

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

相关文章

React diff的原理是什么

一、是什么 跟Vue一致,React通过引入Virtual DOM的概念,极大地避免无效的Dom操作,使我们的页面的构建效率提到了极大的提升 而diff算法就是更高效地通过对比新旧Virtual DOM来找出真正的Dom变化之处 传统diff算法通过循环递归对节点进行依…

【JavaEE】使Cookie与Session失效-表白墙退出登录操作-Servlet上传文件操作-表白墙注册上传头像+登录显示头像功能

表白墙退出登录操作-表白墙注册上传头像登录显示头像功能 文章目录 【JavaEE】使Cookie与Session失效-表白墙退出登录操作-Servlet上传文件操作-表白墙注册上传头像登录显示头像功能1. Cookie与Session的删除1.1 表白墙页面增加登录出口1.2 点击链接退出登录1.3 测试 2. 上传文…

最新版的配音软件--- tts-vue 软件 下载安装成功过程

目录 本次软件是 Loker 制作,感谢作者的无私奉献。 软件视频效果 软件图片效果 1:电脑版的tts-vue 软件下载链接以及说明: 2:tts-vue 网站在线转换链接: 3:tts-vue 软件 功能简介 截至最新版本&#…

如何根据波特率计算设备每秒传输多少字符

前言 (1)微机原理要进行期末考试了,要准备“预习”了。今天看到关于波特率和字符传输的知识,感觉这个在实际项目中可能会使用到。 (2)因为之前我在学习韦东山老师的课程的时候,他通过波特率计算…

基于SpringBoot+Thymeleaf仓库管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着信息技术的快速发…

群晖IPv6/ddns-go/域名解析设置内网穿透方案

前言 群晖的内网穿透有很多方案,外网IPv4(这个现在很难搞到了),中间服务器搭建Tunnel隧道,frp等方案(网速慢,流量限制,需另购服务器),第三方服务花生壳等(按量付费,速度问题)。 本篇介绍的是 …

阿里云安装和远程连接mysql8.0数据库

目录 在云服务器安装MySQL8.0(详细版): 安装过程中遇到的两个问题的解决方式 无法获取support-files/mysql.server 的文件状态(stat): 没有那个文件或目录 解决不能进行远程连接,报错Communications link failureThe last pac…

C++算法:排序之四(计数、基数、桶排序)

C算法:排序 排序之一(插入、冒泡、快速排序) 排序之二(归并、希尔、选择排序) 排序之三(堆排序) 排序之四(计数、基数、桶排序) 文章目录 C算法:排序三、非比…

本地gradle在idea中的配置

因为公司在用的gradle构建项目,由于学安卓时候把gradle搞的四不像,所以重新配置了gradle在此记录一下 文章目录 安装gradel官网下载解压init.d里面创建init.gradle文件父目录创建gradleRepository配置环境变量测试是否配置成功 idea配置gradle重新构建项…

深度学习笔记之Seq2seq(二)基于Seq2seq注意力机制的动机

深度学习笔记之Seq2seq——基于Seq2seq注意力机制的动机 引言回顾:基于机器翻译任务的 Seq2seq \text{Seq2seq} Seq2seq网络结构注意力机制的动机循环神经网络作为 Encoder \text{Encoder} Encoder产生 Context \text{Context} Context向量的缺陷注意力机制处理上述…

chatgpt赋能python:Python怎么从列表里随机抽取?

Python怎么从列表里随机抽取? 在编程中,我们常常需要从一个列表里面随机抽取一个元素来进行一些操作,比如说在一个游戏中随机抽取一个怪物来进行战斗。Python提供了一个内置模块——random模块,用于生成随机数。这个模块可以帮助…

(数组) 1207. 独一无二的出现次数 ——【Leetcode每日一题】

❓1207. 独一无二的出现次数 难度:简单 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr [1,2,2,1,…

做一个比较有意思的条目选择动画 css

做一个比较有意思的条目选择动画 css 效果 如何实现 原理就是将母元素设置成 relative 然后在四边放四个 absolute 的色块。 初始状态是opacity 为 0 的&#xff0c;当母元素 hover 的时候&#xff0c;将四个边角色块设置 opacity: 1 并偏移指定量。 html <div class&qu…

English Learning - L3 作业打卡 Lesson5 Day32 2023.6.5 周一

English Learning - L3 作业打卡 Lesson5 Day32 2023.6.5 周一 引言&#x1f349;句1: What do you read when you are travelling by train or bus?成分划分弱读爆破语调 &#x1f349;句2: What are other passengers reading?成分划分弱读连读语调 &#x1f349;句3: Perh…

软考A计划-系统架构师-官方考试指定教程-(15/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

规则引擎--QLExpress:普通表达式的运行

目录 QLExpress普通表达式执行解析并转化为ExpressNode语法解析,得到如下的语法树根据 ExpressNode 树生成指令树执行指令树得到结果InstructionConstData 的指令执行InstructionOperator的指令执行 最后得到结果 再看一个in表达式设置参数的执行 QLExpress github: https://g…

【matlab】matlab算法封装成工具包提供给程序调用

说明&#xff1a; 1、非进程通讯协议&#xff0c;无需在电脑上安装完整版的matlab开发环境。 2、本项目以C#为案例&#xff0c;调用的语言不限&#xff0c;操作流程基本相同。 一、准备工作 1、安装MATLABWebAppServerSetup集成开发环境 2、安装Visual stdio 2017集成开发环…

Openharmony添加编译自己应用

介绍一下Openharmony如何在庞大的编译构建系统中&#xff0c;增添自己想编译的内容。不定期更新~&#x1f438; gn官方文档&#xff1a; https://gn.googlesource.com/gn//main/docs/quick_start.md https://gn.googlesource.com/gn//master/docs/reference.md openharmony官…

Salesforce退出市场后类似的CRM系统有哪些

Salesforce退出中国市场后&#xff0c;对很多使用Salesforce的国内企业来说是一个不小的打击。他们需要寻找与Salesforce功能相当、具有良好口碑的CRM客户管理系统来替代。本文就为大家推荐五款类似Salesforce的CRM系统。 1、Zoho CRM Zoho CRM是一款SaaS云端CRM系统&#xf…

005: vue中el-upload 组件添加token的方法

第005个 查看专栏目录: 按照VUE知识点 ------ 按照element UI知识点 echarts&#xff0c;openlayers&#xff0c;cesium&#xff0c;leaflet&#xff0c;mapbox&#xff0c;d3&#xff0c;canvas 免费交流社区 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏…