语雀故障事件——P0级别事故启示录 发生肾么事了? 怎么回事?

news2024/11/15 22:45:26

在这里插入图片描述

前言

最近,阿里系的语雀出了一个大瓜,知名在线文档编辑与协同工具语雀发生故障,崩溃近10小时。。。。最后,官方发布了一则公告,我们一起来看看这篇公告,能不能有所启发。

目录

  • 前言
  • 引出
  • 一、语雀P0故障回顾
    • 1、发生肾么事了???
    • 2、官方公告说了啥?
  • 二、解构官方公告
    • 1、怎么回事?
    • 2、解构改进措施
  • 三、聚焦 “可监控,可灰度,可回滚”
    • 1、可监控
    • 2、可灰度
    • 3、可回滚
  • 总结

引出


1.在保证分区容错下,无法同时做到一致性和可用性。系统设计时只能选择一个目标,在P一定会出现的情况下,A和C之间只能实现一个,这就是CAP定理。

  • CP: 强一致性,弱可用性,牺性部分机器的可用性,保证数据一致性,如zookeeper、es、Naocs
  • AP: 强可用性,弱一致性,牺牲一致性,保证可用性,如Eureka

2.可监控,可灰度,可回滚

一、语雀P0故障回顾

1、发生肾么事了???

在这里插入图片描述

2、官方公告说了啥?

在这里插入图片描述

各位语雀的用户

10 月 23 日语雀出现重大服务故障,且持续 7 个多小时才完全恢复,给用户使用造成极大不便,对此我们深感抱歉。经过复盘,我们在这里向大家进一步说明故障原因、修复过程和改进措施。

故障原因及处理过程:

10 月 23 日下午,服务语雀的数据存储运维团队在进行升级操作时,由于新的运维升级工具 bug,导致华东地区生产环境存储服务器被误下线。受其影响,语雀数据服务发生严重故障,造成大面积的服务中断。为了尽快恢复服务,我们和数据存储运维团队全力进行数据恢复工作,但受限于恢复方案、数据量级等因素,整体用时较长。具体过程如下:

14:07 数据存储运维团队收到监控系统报警,定位到原因是存储在升级中因新的运维工具 bug 导致节点机器下线;14:15 联系硬件团队尝试将下线机器重新上线;15:00 确认因存储系统使用的机器类别较老,无法直接操作上线,立即调整恢复方案为从备份系统中恢复存储数据。15:10 开始新建存储系统,从备份中开始恢复数据,由于语雀数据量庞大,此过程历时较长,19 点完成数据恢复;同时为保障数据完整性,在完成恢复后,用时 2 个小时进行数据校验;21 点存储系统通过完整性校验,开始和语雀团队联调,最终在 22 点恢复语雀全部服务。用户所有数据均未丢失。

改进措施:

通过这次故障我们深刻认识到,语雀作为一款服务千万级客户的文档产品,应该做到更完善的技术风险保障和高可用架构设计,尤其是面向技术变更操作的“可监控,可灰度,可回滚”的系统化建设和流程审计,从同 Region 多副本容灾升级为两地三中心的高可用能力,设计足够的数据和系统冗余实现快速恢复,并进行定期的容灾应急演练。只有这样,才能提升严重基础设施故障时的恢复速度,并从根本上避免这类故障再次出现。为此我们制定了如下改进措施:

1、升级硬件版本和机型,实现离线后的快速上线。该措施在本次故障修复中已完成;

2、运维团队加强运维工具的质量保障与测试,杜绝此类运维 bug 再次发生;

3、缩小运维动作灰度范围,增加灰度时间,提前发现 bug;

4、从架构和高可用层面改进服务,为语雀增加存储系统的异地灾备。

赔偿方案:

为了表达我们的歉意,我们将向所有受到故障影响的用户提供如下赔偿方案:

针对语雀个人用户,我们赠送 6 个月的会员服务。操作流程:进入工作台「账户设置」,点击左侧「会员信息」,在会员信息页面点击「立即领取」,即可获得赠送服务。

针对语雀空间用户,由于情况比较复杂,我们会单独制定赔偿方案。请空间管理员留意语雀站内信。

这次的故障让我们深切地感受到了用户对语雀的依赖以及语雀肩上的重大责任。再次向所有语雀用户表达我们诚挚的歉意。我们将持续提升语雀的服务质量和服务稳定性,不辜负每一位用户的信任!

语雀团队

2023 年 10 月 24 日

二、解构官方公告

1、怎么回事?

10 月 23 日下午,服务语雀的数据存储运维团队在进行升级操作时,由于新的运维升级工具 bug,导致华东地区生产环境存储服务器被误下线。

  • 14:07 数据存储运维团队收到监控系统报警,定位到原因是存储在升级中因新的运维工具 bug 导致节点机器下线;【说明人家有运维监控系统

  • 14:15 联系硬件团队尝试将下线机器重新上线;15:00 确认因存储系统使用的机器类别较老,无法直接操作上线,立即调整恢复方案为从备份系统中恢复存储数据。【有备份系统,保存所有历史数据

  • 15:10 开始新建存储系统,从备份中开始恢复数据,由于语雀数据量庞大,此过程历时较长,19 点完成数据恢复;

    • 同时为保障数据完整性,在完成恢复后,用时 2 个小时进行数据校验;【数据校验,数据完整性
    • 21 点存储系统通过完整性校验,开始和语雀团队联调,最终在 22 点恢复语雀全部服务。【数据恢复,开始联调
    • 用户所有数据均未丢失。【硬件有价,数据无价

2、解构改进措施

通过这次故障我们深刻认识到,语雀作为一款服务千万级客户的文档产品,应该做到更完善的技术风险保障和高可用架构设计,尤其是面向技术变更操作的“【【可监控,可灰度,可回滚】】”的系统化建设和流程审计,从同 Region 多副本容灾升级为两地三中心的高可用能力,设计足够的数据和系统冗余实现快速恢复,并进行定期的容灾应急演练。只有这样,才能提升严重基础设施故障时的恢复速度,并从根本上避免这类故障再次出现。为此我们制定了如下改进措施:

1、升级硬件版本和机型,实现离线后的快速上线。该措施在本次故障修复中已完成;
2、运维团队加强运维工具的质量保障与测试,杜绝此类运维 bug 再次发生;
3、缩小运维动作灰度范围,增加灰度时间,提前发现 bug;
4、从架构和高可用层面改进服务,为语雀增加存储系统的异地灾备

我们看到事故复盘中,出现了**【【可监控,可灰度,可回滚】】**,这是什么意思,可监控如何实现?可灰度是啥意思,实际怎么操作?可回滚是啥?我们会在下一章分析。

在这里插入图片描述

另外,这里反复提到了容灾高可用,这和CAP理论息息相关,1998年,加州大学的计算机科学家Eric Brewer提出,分布式系统有三个指标。

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分区容错性)

其中最为重要的是Partition tolerance(分区容错性),也是所有分布式系统必须满足的条件:

  • Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。

  • Tolerance(容错):容错表示在集群出现分区时,整个系统也要持续对外提供服务。

在保证分区容错下,无法同时做到一致性和可用性。系统设计时只能选择一个目标,在P一定会出现的情况下,A和C之间只能实现一个,这就是CAP定理。

  • CP: 强一致性,弱可用性,牺性部分机器的可用性,保证数据一致性,如zookeeper、es、Naocs
  • AP: 强可用性,弱一致性,牺牲一致性,保证可用性,如Eureka

通过上面的分析,我们看到语雀采用的是高可用容灾的策略,也就是AP模式,保证强的可用性,本次事件就是造成了大面积的不可用

在这里插入图片描述

详细的CAP理论可参考下面博客:

分布式事务——CAP理论 & 解决分布式事务的思路 & Seata组件初识 和 部署

在这里插入图片描述

三、聚焦 “可监控,可灰度,可回滚”

1、可监控

监控(Monitoring):收集、分析和使用信息来观察一段时间内的运行进度,并且进行相应的决策管理的过程。监控侧重于观察特定指标

可观测性(Observability):通过分析系统生成的数据理解推演出系统内部的状态。

在这里插入图片描述
可使用的工具JVisualVM、JConsole、skywalking、Prometheus和Grafana来实现Java Web应用程序的监控

JVisualVM:https://visualvm.github.io/

在这里插入图片描述

参考文章:
https://zhuanlan.zhihu.com/p/512714915#

2、可灰度

什么是灰度发布?

  • 灰度发布,又名金丝雀发布,或者灰度测试,是指在黑与白之间能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。

灰度发布是对某一产品的发布逐步扩大使用群体范围,也叫灰度放量。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。

灰度发布的意义
灰度发布能及早获得用户的意见反馈,完善产品功能,提升产品质量,让用户参与产品测试,加强与用户互动,降低产品升级所影响的用户范围。

灰度发布的策略

  1. 按照流量阶段性发布,先随机给5%的用户使用新版本,没问题后,再依次给20%、50%、75%的用户使用新版本,最后100%;
  2. 按照用户的业务属性灰度,VIP优先等…

3、可回滚

就是想git一样,可以把版本进行回退。

在这里插入图片描述

总结

1.在保证分区容错下,无法同时做到一致性和可用性。系统设计时只能选择一个目标,在P一定会出现的情况下,A和C之间只能实现一个,这就是CAP定理。

  • CP: 强一致性,弱可用性,牺性部分机器的可用性,保证数据一致性,如zookeeper、es、Naocs
  • AP: 强可用性,弱一致性,牺牲一致性,保证可用性,如Eureka

2.可监控,可灰度,可回滚

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

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

相关文章

设计模式(19)命令模式

一、介绍: 1、定义:命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可以使用不同的请求对客户端进行参数化。命令模式还支持请求的排队、记录日志、撤销操作等功能。 2、组…

4+非肿瘤纯生信。氧化应激+WGCNA+药物预测筛序关键基因

今天给同学们分享一篇非肿瘤氧化应激WGCNA的生信文章“Identification of oxidative stress-related biomarkers associated with the development of acute-on-chronic liver failure using bioinformatics”,这篇文章于2023年10月10日发表在Scientific Reports期刊…

双十一什么东西一定要买?实用性强好物千万不能错过

一年一度的双十一购物节即将来临啦!相信很多朋友都在等这个时间选购一些实用性比较强好物,平时太贵的一些家电都舍不得买,就是为了等到双十一这一些,准备买买买的朋友们,别着急,作为智能家电好物分享家的我…

轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/MultiMaterialPass.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 …

dolphinscheduler3.2.0 install报错

下载3.2.0版本代码,执行install报错,dolphinscheduler-common无法加载依赖 [ERROR] Failed to execute goal com.diffplug.spotless:spotless-maven-plugin:2.27.2:check (default) on project dolphinscheduler-common: The following files had format…

ue5 右击.uproject generator vs project file 错误

出现如下错误 Unable to find valid 14.31.31103 C toolchain for VisualStudio2022 x64 就算你升级了你的 vs installer 也不好使 那是因为 在C:\Users\{YourUserName}\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml 这个缓存配置文件中写死了 14…

Echarts渲染不报错但是没有内容

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 问题:在开发项目的时候使用了Echarts但是好端端的忽然就不渲染了 感觉很无语啊,毕竟好好的就不渲染了&am…

OpenCV官方教程中文版 —— 模板匹配

OpenCV官方教程中文版 —— 模板匹配 前言一、原理二、OpenCV 中的模板匹配三、多对象的模板匹配 前言 在本节我们要学习: 使用模板匹配在一幅图像中查找目标 函数:cv2.matchTemplate(),cv2.minMaxLoc() 一、原理 模板匹配是用来在一副大…

3.1、Linux的vim编辑器

个人主页:Lei宝啊 愿所有美好如期而遇 目录 前言: 插入模式 底行模式 命令模式 前言: 没有进行配置的vim编辑器在写代码时和记事本没什么两样,所以最开始我们可以先下载一个插件,在Linux下两行指令的问题&…

Mybatis-Plus(企业实际开发应用)

一、Mybatis-Plus简介 MyBatis-Plus是MyBatis框架的一个增强工具,可以简化持久层代码开发MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网&a…

【Java系列】LinkedList

LinkedList 介绍使用 LinkedList 的情况使用 ArrayList 的情况 LinkedList 的基本使用LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:创建一个简单的链表实例:在列表开头添加元素在列表结尾添加元素&#xff1…

MATLAB中polyvalm函数用法

目录 语法 说明 示例 特征多项式的矩阵计算 polyvalm函数的功能是矩阵多项式计算。 语法 Y polyvalm(p,X) 说明 Y polyvalm(p,X) 以矩阵方式返回多项式 p 的计算值。此计算方式等同于使用多项式 p 替换矩阵 X。 示例 特征多项式的矩阵计算 求解 4 阶帕斯卡矩阵的特征…

二维码智慧门牌管理系统升级解决方案:采集项目的建立与运用

文章目录 前言一、采集项目的建立二、采集项目的运用三、采集项目的意义 前言 在二维码智慧门牌管理系统的升级过程中,一个至关重要的环节是采集项目的建立与运用。采集项目是新建采集任务的前提,同时也是整个系统升级的关键步骤。其意义近似于现实中的…

hdlbits系列verilog解答(8位宽移位寄存器)-24

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 这项练习是module_shift移位寄存器的延伸。模块端口不是只有单个引脚,我们现在有以向量作为端口的模块,您将在其上附加线向量而不是普通线网数据。与 Verilog 中的其他位置一样,端口的向量长度不必与连接到它…

CTF-Crypto学习记录-第四天 “ “ --- SHA1安全散列算法,实现原理。

文章目录 前言SHA-1加密算法介绍关于SHA-1和MD5 SHA-1 加密过程原文处理设置初始值和数据结构定义加密运算原理过程 在python中调用SHA-1 前言 MD5学习MD5加密算法 SHA-1加密算法介绍 SHA-1(Secure Hash Algorithm1,安全散列算法1)是一种密…

Python3打印九九乘法表

# 九九乘法表 # 定义行数 i 1while i<9:# 定义列数j 1while j<i: # print(" %d * %d %d\t" %(j,i,(j*i)),end) # \t:对齐;end:不换行&#xff1b;j1i1print() # 必须添加这句话&#xff01;&#xff01;&#xff01;print("九九乘法表打印完毕&#xf…

环形链表-力扣

一、题目描述 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 二、题解 解题思路&#xff1a; 快慢指针&#xff0c;即慢指针一次走一步&#xff0c;快指针一次走两步&#xff0c;两个指针从链表起始位置开始运行&#xff0c;…

Windows相关知识

目录 window用户管理 前言 SID 内置账户 与使用者关联的 与Windows组件关联的 用户相关命令 查看命令 用户管理 windows用户组 内置组账户 需要人为添加进入的组 动态包含成员的组&#xff08;符合某种条件自动进入的&#xff09; 管理组命令 NTFS权限 前言 常…

AFsim 三维地图部署

1.打开三维地图 点击上面菜单栏的地球&#xff0c;打开三维地图&#xff0c;或者按快捷键f4&#xff0c;弹出三维地球&#xff0c;如下图&#xff1a; 2.三维地图设置平台 在地球上任意位置&#xff0c;右击选择创建平台&#xff0c;弹出创建平台窗口&#xff0c;输入平台名称…

docker的安装部署nginx和mysql

小白自己整理&#xff0c;如有错误请指示&#xff01; 自我理解&#xff1a;docker就是把应用程序所用的依赖程序&#xff0c;函数库等相关文件打包成镜像文件&#xff0c;类似系统光盘&#xff0c;然后可以在任意电脑上安装使用&#xff08;方便运维人员部署程序&#xff09;…