【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

公有云故障案例分析——Microsoft Azure 的飞来人祸

  • 2015-04-09
  • 本文字数:1856 字

    阅读完需:约 6 分钟

公有云早已飞入寻常百姓家,除了初创的企业,很多大公司也将自己的服务部署在共有云平台上,因此公有云的稳定性和可靠性是十分重要的。平日里谈起公有云,大家总把注意力放在行业老大 Amazon Web Services 上,不太提及 Microsoft Azure,今天就让我们来看一下去年 11 月 Azure 发生的将近 11 个小时的故障。

首先,来回顾一下故障的经过,根据《Update on Azure Storage Service Interruption》这篇官方博客的介绍,这起编号为 3071402 的故障名为“Microsoft Azure Service Incident : Connectivity to multiple Azure Services – Partial Service Interruption”,影响了 19 种 Azure 服务,涉及 12 个 Region,当时似乎只有澳大利亚数据中心幸免于难。

从 11 月 19 日 00:50 发现该问题后的 5 个小时中,多个主要 Region 的存储服务出现问题,大量客户在此之间受到影响;上午 11 点存储故障恢复,大部分客户服务已经恢复,但少数客户的虚拟机由于此前的故障仍存在问题,自动恢复一直持续到 21 日早晨。

讽刺的是多个微软自己的服务也受到了牵连,Windows Store 和 Xbox Live 都受到不同程度的影响。而 Azure 的 Service Health Dashboard 也受故障影响,在故障发生之初尽然显示一切正常,Azure 也真是“醉”了。

一个月后,Azure 团队在其官方博客上就此次故障发表了详细的说明——《Final Root Cause Analysis and Improvement Areas: Nov 18 Azure Storage Service Interruption》,文中剖析了造成故障的原因。本次变更主要是针对 Azure Storage Table Front-Ends 的,目的是减少 CPU 开销,提升存储服务的性能。在测试和预生产环境中,本次变更顺利地通过了健康检查,同时显著提升了系统性能,还解决了几个已知的问题。但是在后续的增量部署中,不幸发生了,Azure Blob Storage Front-Ends 错误地开启了该功能,触发了一个 Bug,导致系统进入死循环无法再提供服务了。几分钟后,监控发现问题,工程师团队在 30 分钟内回滚了 Azure Blob Storage Front-Ends 的变更,对于已经进入死循环的系统进行了重启。

存储系统的故障还影响了虚拟机服务,主要可以将问题归纳为三类,都发生在存储故障和故障恢复阶段:

  1. 磁盘挂载超时(大部分虚拟机重启即可恢复)
  2. 虚拟机配置失败(仅影响 Windows 虚拟机,Linux 虚拟机没有问题)
  3. 虚拟网络编程错误(几小时后工程师团队打了补丁,受影响的虚拟机无需重启即可恢复)

如果说代码的 Bug 未在测试中被发现尚情有可原,那么在换一个灯泡都需要将近50 个工程师参与,流程极为繁琐苛刻的微软,不遵守流程就是不可原谅的了,《Microsoft confirms Azure outage was human error》一文直接就在标题上将其称为“人祸”。

Azure 的部署遵循名为“flighting”的流程,这个流程大致如下:

  1. 在内部测试环境进行部署,随后测试并验证其功能;
  2. 在预生产环境进行部署,在正常的生产级负载下进行测试;
  3. 经过上两步的验证,就能在生产环境中进行小规模部署,一般会部署多个小集群;
  4. 每个小集群都通过验证后就能进行更大规模的增量部署了,通常这种部署在地理上是隔离的。

负责本次性能优化的工程师认为该变更已经在生产环境的小集群上正常运行几个星期了,应该没有问题,在整个 Azure 上开启该功能没有太大风险。而配置工具也没有强制遵循增量部署变更的策略,导致该变更被部署到了整个系统上。

所谓没有规矩不成方圆,有了规矩不能贯彻执行也没用,在小公司或者初创团队,避免繁琐的流程的确能够带来很多便捷,但是在大型团队或者一些核心系统中,流程还是必须的。同时,必须还要有系统能够保证流程得以正确执行,人是会犯错的,人是会走捷径的,就像造成本次故障的那位同学,所以才要系统来进行约束。

Hacker News 上围绕 Azure 团队的故障分析展开了讨论,大家都对 Azure 团队的公开透明表示赞赏(其实在 Azure 的官网有个页面专门记录故障,相比某些公司出了问题遮遮掩掩,这种做法显然更受欢迎),同时不少人也在关心造成这次故障的那位同学的命运,一位读者引用了 IBM 的 Thomas Watson 的话:

最近有人问我会不会开除那个给公司造成 60 万美元损失的员工,我说不会,我刚花了 60 万美元培训了他,为什么要让别人来坐享他的经验?

曾经在支付宝的运维团队也有位朋友这么告诉我——“对运维操作要有敬畏之心”,这句话一直被我记在心中,相信他一定是在背了重大故障之后才会有此感悟。估计 Azure 的那位同学后续一定在操作时会更加仔细,遵循规范。

不知各位读者在了解了 Azure 的这次故障后,是否也能有所收获,当然,如果您在工作中也有过类似的经验教训,不妨也和大家分享一下吧。

2015-04-09 10:143846
用户头像

发布了 135 篇内容, 共 58.8 次阅读, 收获喜欢 43 次。

关注

评论

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

一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?

鳄鱼视界

如何写一份高可读性的软件工程设计文档

C++后台开发

数据库 软件工程 后端开发 C/C++后台开发 C/C++开发

只分享这一次!阿里软件架构师深入底层手写JDK源码

程序猿阿宇

架构 Java 面试 大厂技能 后端技术 秋招

真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下

程序员啊叶

Java 编程 程序员 架构 java面试

SocialFi 何以成就 Web3 去中心化社交未来

One Block Community

区块链

[ Kitex 源码解读 ] 熔断机制是如何实现的

baiyutang

Go 微服务 微服务架构 kitex CloudWeGo

我给大家免费公开五份阿里Java架构师学习手册!助力金九银十

程序猿阿宇

架构 Java 面试 大厂面试 大厂技能 秋招

太牛了,百度这份开发手册几乎涵盖了Spring Cloud所有操作

程序猿阿宇

架构 java程序员 java面试 秋招 程序员‘

蓦然回首,“工厂、构造、原型”设计模式,正在灯火阑珊处

掘金安东尼

JavaScript 前端 7月月更

六面蚂蚁金服,唬住了面试官要了30K;其实Java面试也没那么难

程序知音

Java 程序员 后端技术 秋招 Java面试八股文

HarmonyOS分布式协同演奏技术实现路线(Java)

程序员啊叶

Java 编程 程序员 架构 java面试

加密生活,Web3 项目合伙人的一天

TinTinLand

区块链

浅谈非 EVM 公链的可能性: 兼容多类型虚拟机是否是区块链未来?

One Block Community

区块链

DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

华为云开发者联盟

云计算 后端 SaaS

手慢无!阿里亿级流量高并发系统设计核心原理全彩笔记现实开源

Java全栈架构师

Java 面试 程序人生 分布式锁 架构师

4位资深专家多年大厂经验分享出Flink技术内幕架构设计与实现原理

程序员啊叶

Java 编程 程序员 架构 java面试

阿里内网最新发布“M8”级Java面试笔记,助力金九银十

程序员啊叶

Java 编程 程序员 架构 java面试

五面阿里,终拿offer,不明白为什么面试官总喜欢问Java这种问题

程序知音

Java 阿里 后端技术 八股文 Java面试八股文

京东发布这份SpringBoot实战手册带你从0手动搭建企业级商城项目

程序猿阿宇

程序员 面试 java程序员 Spring Boot CLI 秋招

大厂面试突击必备:“网络编程”高频八连击,扛得住吗?

程序员啊叶

Java 编程 程序员 架构 java面试

CMake库搜索函数居然不搜索LD_LIBRARY_PATH

华为云开发者联盟

后端 开发

Kubernetes应用管理深度剖析

Bob

云原生 容器化 后端技术 Kubernetes 集群

想用K8s,还得先会Docker吗?其实完全没必要

程序员啊叶

Java 编程 程序员 架构 java面试

Moonbeam创始人解读多链新概念Connected Contract

One Block Community

区块链

数据中台建设(五):打破企业数据孤岛和提取数据价值

Lansonli

数据中台 7月月更

上天入地Hadoop——使用高性能分布式技术完成大数据处理任务

程序猿阿宇

大数据 架构 Java 面试 java程序员 编程、

难道Redis真的变慢了吗?

程序员啊叶

Java 编程 程序员 架构 java面试

备战金九银十,两份JAVA面试题2022最新整合版,祝你脱颖而出

王小凡

Java MySQL spring 面试 springboot

腾讯被裁,转头去字节!Java后端核心面试题在手,怎能进不去大厂

程序员啊叶

Java 编程 程序员 架构 java面试

SMI 与 Gateway API 的 GAMMA 倡议意味着什么?

张晓辉

Kubernetes 服务网格 SMI

时序数据库在船舶风险管理领域的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

公有云故障案例分析——Microsoft Azure的飞来人祸_微软_丁雪丰_InfoQ精选文章