语雀P0级故障复盘,有9个字亮了
大家好,我是洋子
最近语雀不是出了个号称 “载入史册” 的 P0 级事故嘛 —— 连续宕机接近8个小时无法使用,作为一个大厂知名产品,这个修复速度属实让人无法理解
故障公告原文:https://mp.weixin.qq.com/s/WFLLU8R4bmiqv6OGa-QMcw
很快,官方就发布了《故障公告》。有一说一,这个公告写得还是挺不错的,按照时间线梳理出了各时间节点的处理过程
- 14:07 数据存储运维团队收到监控系统报警,定位到原因是存储在升级中因新的运维工具 bug 导致节点机器下线;
- 14:15 联系硬件团队尝试将下线机器重新上线;
- 15:00 确认因存储系统使用的机器类别较老,无法直接操作上线,立即调整恢复方案为从备份系统中恢复存储数据;
- 15:10 开始新建存储系统,从备份中开始恢复数据,由于语雀数据量庞大,此过程历时较长;
- 19:00 完成数据恢复,同时为保障数据完整性,在完成恢复后,用时 2 个小时进行数据校验;
- 21:00 存储系统通过完整性校验,开始和语雀团队联调。
- 22:00 恢复语雀全部服务,用户所有数据均未丢失。

在改进措施一栏中,先不说具备两地三中心的高可用能力,洋子发现了9个核心关键字可监控,可灰度,可回滚,可以说是维持系统可用性的最基本的保命措施
先举个例子,讲一下这三种能力的用处
可灰度
将系统的新版本全量部署给所有用户之前,先仅对一小部分用户进行试用。这样可以通过收集这部分用户的反馈和监控数据就能评估新版本的稳定性,并及时进行调整和修复,从而减少对全体用户的潜在风险。
灰度发布又有很多策略。比如经典的按流量阶段性发布,先随机给 5% 的用户使用新版本,验证没问题后,再给 20%、50%、75% 的用户使用新版本逐渐放量,直到覆盖 100% 的用户。
还有很多策略,列举几个常见的:
1)按照用户的业务属性灰度,比如 VIP 用户先用、老用户先用。
2)按人群灰度,比如特定地域、特定年龄、特定偏好、特定客户端的用户。
3)按渠道灰度,比如通过某平台注册的用户先体验等等。
灰度做的好,可以避免很多线上问题,及时控制影响。因此很多知名产品发布时都会采用灰度或者内测的策略,这也就是为什么有些同学能第一时间体验到微信新功能,有些同学却没有
可监控
可监控是指能够实时地收集和展示系统运行时的数据和指标,以便开发和运维同学可以及时发现系统问题、更快进行故障排查和性能调优。需要监控的信息可以包括系统性能指标(内存、CPU、带宽等)、业务日志、错误信息等。
可回滚
线上系统出现问题时,可以将已经部署的新版本回退到之前的稳定版本。这样做可以快速恢复系统,减少对用户的影响,并给开发同学足够的时间来排查和修复问题
如果我们的系统具备这样的能力,按照一般的研发测试流程,在我们测试完成测试后,如果是服务端,则进入上线阶段,如果是客户端,则进入发版阶段。在上线和发版阶段,一般来说都是需要先进去一个小流量的范围,先影响一小部分用户,若期间测试验证没有问题,则扩大范围,直到全量,这就是灰度发布的意思,如果灰度期间有监控报警,则可以及时回滚止损,回退到线上的历史版本,避免影响线上用户
如果我们的系统不具备这样的灰度的能力,一方面只能一次性推全新版本,看起来省了不少事,但一旦出现问题,影响线上的全部用户。如果没有监控,出现问题后,我们无法第一时间及时感知,只能被动等着线上用户来反馈问题。如果没有回滚能力,有Bug只能等着再次上线修复,也会拉长造成影响的时间
语雀作为阿里旗下的产品,有千万级用户的体量,内部不应该没有这样的监控平台、灰度发布和部署管理平台,总之令人匪夷所思,另外这次Bug的原因是由于运维工具有Bug,是否经过充分的测试?该不会又有个小同学背锅了
最后,面对这样超级严重的事故,我想说一定要牢记,先止损!先止损!语雀给的赔偿方案还是比较有诚意的,直接给六个月会员,用语雀的小伙伴可以去领取了

相关文章:
语雀P0级故障复盘,有9个字亮了
大家好,我是洋子 最近语雀不是出了个号称 “载入史册” 的 P0 级事故嘛 —— 连续宕机接近8个小时无法使用,作为一个大厂知名产品,这个修复速度属实让人无法理解 故障公告原文:https://mp.weixin.qq.com/s/WFLLU8R4bmiqv6OGa-QMc…...
在 openresty 中使用 capnp lua 库
1. 安装必要的工具和库 apt-get install capnproto luarocksluarocks install lua-capnproto luarocks install lua-cjsonlua-cjson 库不是必须的,是由于后面的演示程序要使用,就一起装上了。 可以看下库的安装位置: root350983744ebf:~# …...
私藏小技巧:让微信朋友圈营销方便化的小窍门!
微信,这个拥有十亿用户的社交软件,已经成为生活中不可或缺的一部分。 而朋友圈,这个微信的基础功能,是聚宝盆,也是一切流量的尽头。 现在公域+私域的流量增长变现体系很火。朋友圈是一切公域流量的尽头&a…...
Centos使用tomcat部署jenkins
jenkins的最新版本已经不在支持jdk8,支持的jdk环境如下: 安装jdk环境 yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64安装tomcat tomcat官网 cd /optwget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat…...
uni-app打包apk实现自动更新
一、直接复制粘贴就可用(豪横) app.vue文件里写 //app.vue里写 <script>export default {onShow: function() {console.log(App Show)},onHide: function() {console.log(App Hide)},onLaunch: function() {let appVersion uni.getSystemInfo({success: function(e) {ap…...
SRS srs-bench
1 srs-bench 音视频压测工具,包括RTMP/FLV/WebRTC/GB28181等,未来还会完善。 SB(SRS Bench) is a set of benchmark and regression test tools, for SRS and other media servers, supports HTTP-FLV, RTMP, HLS, WebRTC and GB28181. For RTMP/HLS/F…...
HackTheBox-Starting Point--Tier 1---Appointment
文章目录 一 题目二 实验过程 一 题目 Tags Web、Databases、Injection、Apache、MariaDB、PHP、SQL、Reconnaissance、SQL Injection译文:Web、数据库、注入、Apache、MariaDB、PHP、SQL、侦察、SQL 注入Connect To attack the target machine, you must be on …...
【工具】Java请求带http重定向的地址 自动进行重定向
【工具】Java请求带http重定向的地址 自动进行重定向 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class HTTPGETWithMultipleHeaders {public static voi…...
接口自动化测试方案
1、引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 XXXXX,XXX 所属部门 XX 备注 1.3 文档目的 本文档主要用于指导XXX-YY项目常用接口自动化测试…...
TikTok文化探索:热议时事与社会话题
在当今数字时代,社交媒体平台如TikTok已经成为了我们日常生活中不可或缺的一部分。它不仅仅是一个娱乐应用,也是一扇窥视世界、探讨时事和社会话题的窗户。本文将深入探讨TikTok如何成为文化探索的平台,热议时事和社会话题,以及它…...
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
第一步:在mongodb的官网里面创建云服务器 点进去 这是免费的,由于是一个项目只可以创建一个,这里我已经创建好了 用本地的mongodb服务也是可以的 第二步:点击connect,下载连接mongodb的软件:MongoDBCompass 第三步&am…...
QWEN technical report
通义千问-Qwen技术报告细节分享 - 知乎写在前面大家好,我是刘聪NLP。 阿里在很早前就开源了Qwen-7B模型,但不知道为什么又下架了。就在昨天阿里又开源了Qwen-14B模型(原来的7B模型也放出来了),同时还放出了Qwen的技术报…...
提升MODBUS-RTU通信数据刷新速度的常用方法
SMART PLC的MODBUS-RTU通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看我的其它博文:SMART200PLC MODBUS通讯专题_RXXW…...
PyTorch 与 TensorFlow:机器学习框架之战
深度学习框架是简化人工神经网络 (ANN) 开发的重要工具,并且其发展非常迅速。其中,TensorFlow 和 PyTorch 脱颖而出,各自在不同的机器学习领域占有一席之地。但如何为特定项目确定理想的工具呢?本综合指南[1]旨在阐明它们的优点和…...
超简单理解冒泡排序
1.冒泡排序(Bubble Sort) 较简单排序算法。 它会遍历若干次要排列的数列,每次遍历,会从前往后比较相邻两个数的大小。 如果前者比后者大,就交换他们位置。遍历一次最大元素在数列末尾。重复直到数列有序。 那么遍历需要一个变量控制范围。…...
模拟IC设计工程师成长日记
很多IC设计的新人,不知道进入IC设计行业后会有哪些成长和学习的地方。 很多初入IC设计职场的人也都会比较恐慌,成长进步需要一个时间和经验的积累 今天给大家找了一个叫“模拟IC设计“攻城狮”的成长日记供大家参考. 以模拟IC设计工程师的身份进入职场&a…...
修炼k8s+flink+hdfs+dlink(六:学习namespace,service)
一:什么是namespace? 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织,安全甚至性能方面的帮助! 二&a…...
法语导游就业前景如何?
随着国际交流的日益频繁,旅游业正在迅猛发展。尽管全球讲法语的人数并不算多,但讲法语的国家分布广泛。因此,如何成为一名合法的法语导游,以及法语导游的就业前景如何,成为了法语爱好者比较关注的问题。 我们知道&…...
iOS自动混淆测试处理笔记
1 打开 ipa,导出ipa 路径和配置文件路径会自动填充 2 点击 开始自动混淆测试处理 自动混淆测试是针对 oc 类和oc方法这两个模块进行自动混淆ipa,并ipa安装到设备中运行,通过检测运行ipa包是否崩溃,来对oc类和oc方法进行筛选。如果…...
C51--单片机中断
51单片机是单线程模式,需要用到硬件中断。 一、中断系统 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事的时候,外界发生了紧急事件请求,要求CPU暂停当前工作,转而去处理这个紧急…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
