暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Azure DevOps 宕机10小时!微软道歉,一个拼写错误误删17个生产数据库

原创 通讯员 2023-06-05
2706

2023年6月3日消息,由于基本代码错误,Microsoft Azure DevOps 是一套应用程序生命周期服务,周三在巴西南部地区停止工作约十个小时。

周五,首席软件工程经理埃里克·马丁利 (Eric Mattingly) 对中断表示歉意,并透露了中断的原因:一个简单的拼写错误删除了 17 个生产数据库。

Mattingly 解释说,Azure DevOps 工程师偶尔会拍摄生产数据库的快照,以调查报告的问题或测试性能改进。他们依赖于一个每天运行并在一段时间后删除旧快照的后台系统。

在最近的冲刺期间——敏捷术语中的一个小组项目——Azure DevOps 工程师执行了代码升级,用支持的 Azure.ResourceManager.* NuGet 包替换了弃用的 Microsoft.Azure.Managment.* 包。


结果是一个很大的变更拉取请求,将旧包中的 API 调用替换为新包中的 API 调用。拼写错误出现在拉取请求中——必须审查并合并到适用项目中的代码更改。它导致后台快照删除作业删除整个服务器。

“隐藏在这个拉取请求中的是快照删除作业中的一个拼写错误,它将删除 Azure SQL 数据库的调用换成了删除托管数据库的 Azure SQL Server 的调用,”Mattingly 说。

Azure DevOps 有测试来捕获此类问题,但根据 Mattingly 的说法,错误代码仅在特定条件下运行,因此现有测试并未很好地涵盖这些问题。据推测,这些条件需要存在足够旧的数据库快照以被删除脚本捕获。

Mattingly 表示,由于没有任何快照数据库,Sprint 222 在内部部署(Ring 0)没有发生任何事故。几天后,软件更改被部署到巴西南部规模单位(特定角色的服务器集群)的客户环境(Ring 1)。该环境有一个足够旧的快照数据库来触发错误,导致后台作业删除缩放单元的“整个 Azure SQL Server 和所有 17 个生产数据库”。

数据已经全部恢复了,但是用了十多个小时。Mattingly 说,这有几个原因。

一是由于客户无法自行恢复 Azure SQL Server,因此 Azure 工程师必须随时待命处理这个问题,这个过程对许多人来说大约需要一个小时。

另一个原因是数据库有不同的备份配置:一些是为区域冗余备份配置的,而另一些是为最近的地理区域冗余备份设置的。协调这种不匹配使恢复过程增加了许多小时。

“最后,”Mattingly 说,“即使在数据库开始重新上线之后,由于我们的网络服务器出现了一系列复杂的问题,整个规模单位仍然无法访问,即使数据在这些数据库中的客户也是如此。”

这些问题是由服务器预热任务引起的,该任务通过测试调用遍历可用数据库列表。恢复过程中的数据库抛出了一个错误,该错误导致预热测试“执行指数退避重试,导致预热平均花费 90 分钟,而正常情况下不到一秒。”

更复杂的是,这个恢复过程是交错的,一旦其中一两台服务器再次开始接收客户流量,它们就会过载并停机。最终,恢复服务需要阻止所有流向南巴西规模单元的流量,直到一切都准备好重新加入负载均衡器并处理流量。

已实施各种修复和重新配置,以防止问题再次发生。

“我们再次向所有受此次中断影响的客户道歉,”马丁利说。


文章来源:https://www.theregister.com/2023/06/03/microsoft_azure_outage_brazil/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论