写点什么

一个简单的代码拼写错误导致 17 个生产数据库被删!微软 Azure DevOps 宕机 10 小时始末

  • 2023-06-05
    北京
  • 本文字数:2043 字

    阅读完需:约 7 分钟

一个简单的代码拼写错误导致17个生产数据库被删!微软Azure DevOps宕机10小时始末

由于低级错误,本该清理数据库快照的修复代码却删掉了整个服务器。

一个拼写错误致微软 Azure DevOps 宕机 10 小时


微软Azure DevOps是一套应用程序生命周期服务。5 月 24 日,Azure DevOps 在巴西南部(SBR)区域内一处 scale-unit(微软 Azure 部署架构中最小的容量单元)设施发生宕机,宕机持续了 10 个小时。


近日,微软首席软件工程经理 Eric Mattingly 对宕机事件表达歉意并透露了宕机原因:一个简单的拼写错误,致使 17 个生产数据库遭到删除。


Mattingly 解释道,Azure DevOps 工程师偶尔会保存生产数据库的快照,据此调查上报的问题或测试性能改进方向。为了清理这些快照数据库,会有专门的后台作业每天运行,并在快照超过一定期限后将其删除。


在最近的一波冲刺(敏捷上下文中的小组项目,编号为 Sprint 222)中,Azure DevOps 工程师执行了代码升级,想要用受支持的 Azure.ResourceManager.* NuGet 包替换掉已被弃用的 Microsoft.Azure.Managment.*包。


这对应着一条巨大的 pull request 变更请求,会将旧包中的 API 调用替换为新包中的 API 调用。引发此次事件的拼写错误就出现在 pull request 内,导致后台快照删除作业删掉了整个服务器。


Mattingly 表示,“这条 pull request 中的快照删除作业里隐藏着一条拼写错误,它会删除 Azure SQL 数据库调用,并替换成删除托管数据库的 Azure SQL Server 调用。”


Azure DevOps 工程师使用安全部署实践(SDP)将 Sprint 222 部署到了 Ring 0(微软内部 Azure DevOps 组织),这里不存在快照数据库,所以删除作业不会执行。在 Ring 0 测试几天之后,Azure DevOps 工程师又将其部署至 Ring 1,也就是在此期间巴西南部的 scale-unit 设施受到了影响。快照数据库的存在时间触发了这项 bug,该作业在删除 Azure SQL Server 的同时,还删掉了 scale-unit 设施中所有 17 个生产数据库。从这时起,Azure DevOps 的 scale-unit 无法处理任何客户流量。


据 Mattingly 介绍,此次宕机事件并未引发数据丢失。为了防止问题再次发生,Mattingly 称微软已经采取了各种修复和重新配置措施,并向所有受此中断影响的客户道歉。

为什么耗时 10 小时才完成恢复?


据了解,Azure DevOps 是有检测此类问题的测试的。但根据 Mattingly 的介绍,“之所以以往没有发现,是因为这部分代码的运行条件非常罕见,我们的测试并没有切实覆盖这些极端情况。”有推测认为,这种极端条件要求删除脚本捕捉到特别陈旧的数据库快照。


虽然目前数据已经全部恢复,但整个宕机前后耗时 10 多个小时,为什么这么久才完成修复?Mattingly 对此做出了解释说明:“我们在数据库被删除后的 20 分钟内检测到宕机,值班工程师立即参与修复。在快速理解问题来源之后,我们开始恢复 SQL Server 及所有数据库,并禁用了快照删除作业以防止该 bug 影响到其他客户。但由于问题数量较多,因此恢复时间也相对较长。”


首先,客户无法自行恢复 Azure SQL Server,因此必须由 Azure SQL 团队参与恢复工作。确定需要 Azure SQL 值班工程师介入,接洽实际情况和问题,再加上服务器的实际恢复大约耗费了 1 个小时。


其次,所有数据库均配置有备份冗余,但部分数据库的创建时间早于区域冗余备份的上线时间。在恢复数据库时,Azure DevOps 为所有数据库选择了 Geo-zone-redundant,导致一部分还原数据按照此前配置的 Zone-redundant 备份被复制到了配对区域。这种匹配冲突又让恢复过程延长了好几个小时。对于这个问题,Azure DevOps 将确保所有数据库备份均按 Azure 区域支持被配置为 Geo-zone-redundant,使其覆盖 Azure DevOps 中的所有 scale-unit。


最后,在数据库开始恢复上线之后,由于 Azure DevOps 的 Web 服务器出现了一系列复杂问题,尽管数据库内容已经完成还原,客户也仍然无法访问整个 scale-unit 设施。


这个问题源自服务器的预热任务,该任务会通过测试调用遍历可用的数据库列表。但恢复过程中数据库招聘了一项错误,导致预热测试“执行指数级退避重试,令预热耗时由正常情况下的不到一秒延长到了平均 90 分钟。”


更复杂的是,整个恢复过程是交错进行的,一旦其中一、两台服务器重新开始接收客户流量,就会因过载而再次宕机。最终,工程师在只能阻断所有流向巴西南部 scale-unit 的流量,确保一切准备就绪再重新加入负载均衡器并处理流量。

如何避免此类问题再次发生?


目前,Azure DevOps 已经修复了快照删除作业中的 bug,并为快照删除作业创建了新的测试,面向真实 Azure 资源充分反映快照数据库的删除场景。


Mattingly 表示,Azure DevOps 正着手为关键资源添加 Azure 资源管理器锁,借此防止意外删除。同时,确保所有 Azure SQL 数据库备份均被配置为 Geo-zone-redundant 形式,并受到 Azure 区域的支持;确保未来的所有快照数据库,只会被创建在不同于生产数据库的 Azure SQL Server 实例之上。


此外,还会修复 Web 服务器预热任务的逻辑,确保即使数据库处于脱机状态时也能成功启动。并创建新的 cmdlet 来恢复已被删除的数据库,确保恢复结果使用与被删除前相同的设置(包括备份冗余)。


参考链接:

https://status.dev.azure.com/_event/392143683/post-mortem

https://www.theregister.com/2023/06/03/microsoft_azure_outage_brazil/

2023-06-05 14:0041443

评论

发布
暂无评论
发现更多内容

为什么我们拥有庞大的语言模型,而Vision Transformers的规模却很小?

Baihai IDP

人工智能 深度学习 计算机视觉 白海科技 Vision Transformers

Seata 的可观测实践

阿里巴巴云原生

阿里云 云原生 seata

为什么MySQL单表不能超过2000万行?

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

火山引擎DataTester:小改动带来大收益,A/B实验助力幸福里APP精准优化

字节跳动数据平台

ab测试 A/B 测试

看完这篇,DWS故障修复不再愁

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

用写代码的方式画图-试下PlantUML吧 | 京东云技术团队

京东科技开发者

开发工具 PlantUML 画图软件 企业号 5 月 PK 榜

OpenHarmony社区运营报告(2023年4月)

OpenHarmony开发者

OpenHarmony

如何使用、部署 Auto-GPT?系统开发技术分析

Congge420

系统开发 区块链、 autogpt

BSC智能链游戏链系统开发解析

Congge420

区块链追溯系统开发 元宇宙 元宇宙系统开发

深度学习基础入门篇[9.2]:卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例

汀丶人工智能

人工智能 神经网络 深度学习 卷积网络 卷积核

2023语言与智能技术竞赛开辟“双赛道”:寻找“全民测评官”,探索AI多模态能力

飞桨PaddlePaddle

【程序员日记】——从业务编排到低代码 | 京东云技术团队

京东科技开发者

低代码 业务 企业号 5 月 PK 榜 业务编排

TF游戏Ai智能系统开发

Congge420

系统开发 区块链、 智能运维AIOps

真香!阿里最新产出分布式进阶实战手册,涵盖分布式架构所有操作

Java你猿哥

架构 微服务架构 Spring Cloud Spring Boot ssm

软件测试/测试开发丨Python基本数据类型之字符串

测试人

Python 软件测试 自动化测试 测试开发

关于PCBA元器件布局的重要性

华秋PCB

工具 元器件 PCB 布局 PCB设计

硬核!互联网资深大佬手码高并发编程速成笔记(2023版)限时开源

Java 并发编程 高并发

面试官:你能和我说一下 CMS 垃圾回收器吗?

Java你猿哥

算法 CMS JVM 垃圾回收器 垃圾收集器

抠图党福音:教你一键分割图像

华为云开发者联盟

华为云 华为云开发者联盟 企业号 5 月 PK 榜 人工资高hi嗯呢该 分割图像

IPQ8072 or IPQ8072A with the QCN9074/9024 chipset / well-suited for high-end routers.

Cindy-wallys

IPQ8072

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

汀丶人工智能

人工智能 神经网络 深度学习 卷积网络 卷积相关算子

2023数字中国建设峰会:百度点石获开放群岛开源社区优秀共建单位

百度安全

LED显示屏如何做到节能

Dylan

效率 能源 节能 LED显示屏

软件测试/测试开发丨Python控制流–分支判断和循环

测试人

Python 软件测试 自动化测试 测试开发

rt下降40%?程序并行优化六步法 | 京东云技术团队

京东科技开发者

性能优化 异步编程 企业号 5 月 PK 榜 多线程优化 并发框架

【实践篇】领域驱动设计:DDD工程参考架构 | 京东云技术团队

京东科技开发者

领域驱动设计 DDD 企业号 5 月 PK 榜 工程架构

线上问题处理案例:出乎意料的数据库连接池 | 京东云技术团队

京东科技开发者

数据库 GC 线上问题 数据库连接池 企业号 5 月 PK 榜

聊聊 万亿流量场景下的负载均衡实践

Java你猿哥

负载均衡 ssm 高并发 DNS 负载均衡架构

非常实验——在SSH下通过终端浏览网页

吴脑的键客

浏览器 终端工具

一个简单的代码拼写错误导致17个生产数据库被删!微软Azure DevOps宕机10小时始末_数据库_凌敏_InfoQ精选文章