资深SRE带你看阿里云香港故障

news2025/1/18 20:55:27

一、故障背景

12月18日阿里云香港Region发生重大故障,多个重要互联网服务受到影响,包括澳门日报、金融管理局、澳门银河、莲花卫视、澳门水泥厂等基础服务,澳觅和MFood等外卖平台,多个区块链交易所也受到影响。详情见官方故障报告《关于阿里云香港Region可用区C服务中断事件的说明 (aliyun.com)》。我的新书《SRE原理与实践:构建高可靠性互联网应用》刚发布,借此机会推荐给所有关注互联网服务可靠性的人。本文我会深入分析故障情况和潜在问题,并对照书中内容来探讨问题根源及解决思路,详细内容请阅读原书。

图1:新书封面

https://item.jd.com/13603499.html

互联网服务中断是个行业难题

本次故障给客户造成直接经济损失和品牌形象的影响。云厂商按照SLA赔偿对大部分客户来说是微不足道的、与损失难以对等;对云而言,支付SLA赔偿是一个损失,更重要是影响了客户对云的信任,可能会促使一些客户实施迁云或者选择多云架构;影响了市民和客户服务,特别是本地生活服务的那些用户、交易平台需要进行投资的用户。

互联网服务中断是个行业难题,国外故障监测网站Downdetector统计了2022年前十大报障最多的互联网服务,如下图2所示。故障报告最多是Spotify和WhatsApp,用户主动报告近300万例。故障并不鲜见,我书中开篇列举了近4年行业典型故障,触目惊心,有的故障导致损失上亿美元,有的导致企业市值蒸发千亿,有些严重影响用户生活。

图2:2022全球故障报告次数Top10(源自 Downdetector.com)

二、机房->云产品->业务几个层都暴露严重问题

把故障过程先简单描述一下,由于制冷设备故障引起的机房内服务器不可用,机房故障影响了ECS、RDS、OSS、SLB、NAT等云产品,同时由于容量不够导致管控系统和API调用不可用,造成了大量的客户业务不能使用。可以看出这里涉及三层服务,机房及服务器、云产品及管控系统、业务服务。这三层任何一个出现问题都可能导致业务故障。如何分析可靠性问题并识别风险,详见书中3.4《可靠性分析与架构风险》。

(一)直接原因:制冷系统的伪高可用

先看冷机修复的问题

其时间线如下:

12月18日08:56,阿里云监控到香港可用区C机房包间通道温控告警

12:30,冷机设备供应商到场

14:47,排查遇到困难,其中一个包间因高温触发了强制消防喷淋

15:20,经冷机设备商工程师现场手工调整配置,冷机群控解锁完成并独立运行

18:55,4台冷机恢复到正常制冷量

21:36,大部分机房包间服务器陆续启动并完成检查

22:50,被喷淋的包间逐步供电和服务器启动。

存在几个明显问题:

1、处理过程问题1:响应和到场时间太晚,香港不大,三个半小时才到。

2、处理过程问题2:没有预案要靠现场排查现场改逻辑,三个小时才查到并解锁群控逻辑。

3、处理过程问题3:处理过程忽视了温度持续升高及喷淋系统的自动化逻辑,触发了喷淋程序,造成部分硬件损坏,导致一个包间故障时长被延长。

4、架构设计问题1:制冷设备容灾没有经过演练,以为有了4+4容灾,实际上主备设备共用了水路循环系统。导致容灾切换失败。在书中也举了网络专线的共用单一节点导致故障的例子。

5、架构设计问题2:冷机群控逻辑导致只能批量启动冷机,而没法单台独立启动。架构设计脱离实际或是考虑不周。架构设计中容易出现这样的问题,过度设计而脱离实际或主次不分。

6、可能的问题:处理冷机故障过程没有做好协同管理,涉及众多客户、阿里云本部人员(基础设施及各个云产品人员)、现场代维人员、冷机公司人员,导致故障被拉长。比如到其他AZ申请资源的高峰是比较晚的时候了,早做迁移其实问题更小。

冷机故障并非个例,做好处理预案才是王道。今年7月,由谷歌和甲骨文运营的伦敦东部数据中心在该地区有记录以来最强烈的热浪中遭受了崩溃。该国部分地区气温甚至高于40摄氏度。

阿里云在基础设施层面的管理失责问题

机房制冷故障不完全是阿里云责任,但他们也出现了几个问题:

1、选择机房时没有发现制冷设备存在风险,也没有要求验证和巡检发现

2、处理人员在修复过程风险评估不准,机房多方沟通协同过程可能存在不够顺畅的问题

3、现场工程师对喷淋系统的工作机制不太清楚或忙中疏忽

书中也有详细探讨如何应对灾难型故障。见书中5.2 灾难型故障快速修复,部分内容如下图3所示。

图3:灾难型故障快速修复

(二)部分云产品及管控系统有明显缺陷

本次故障影响时间较长跟阿里云产品及管控系统也有关系。

云产品架构和配套系统问题。

  1. 有云产品依赖故障AZ(Available Zone可用区)的服务

自定义镜像数据服务依赖了故障AZ的OSS服务,部分RDS实例依赖了部署在故障AZ的代理服务。很明显这部分产品架构设计存在问题,不仅要考虑产品自身的高可用,还有考虑依赖的配套服务是否高可用。

  1. 有多个云产品是单AZ的。

VPN、Privatelink、部分GA实例、SLB、NAT服务。没有很快实现跨AZ容灾逃逸。

管控系统是个容易被忽视的问题。

在书中第6章有详细讨论。部分单AZ产品的容灾切换或迁移工具不够完备,管控工具在灾难发生时是救命稻草,管控系统不可用或不好用,会造成主备切换不成功的问题。

1.管控系统架构设计有问题

ECS管控服务、RDS管控服务、Dataworks、k8s用户控制台、操作API都出现了故障,且完全修复时间最晚。API的是核心服务,是管控系统和客户调用的核心服务,不应该这么容易挂,而且我认为应该有更高的优先级。

2.管控系统依赖配套的部署架构有问题

本故障中新扩容的ECS管控系统启动时依赖的中间件服务部署在故障AZ,导致较长时间内无法扩容,这点容易被忽视。

3.管控系统容量设计不足的问题

没有考虑到单AZ挂了后,客户涌入到其他AZ造成管控请求打爆。客户发起的管控请求再多,估计也不会特别大,管控系统的容量到底达到了多少而被打爆的,阿里云没有详述。这里有另外一个可能是其他AZ的资源不足或开资源要等待,造成请求的拥塞。

管控系统是故障后的救命稻草,应该有更高的可靠性。在书中6.2.2脆弱性因素分析一节有详细讨论,部分内容见下图4。

图4:管控平台脆弱性分析

在第7章工程师工作内容小节,有专门讨论工程师要负责管控系统的可靠性。

(三)业务方要负主体责任:明确可靠性核心保障对象是业务

首先要明确,可靠性保障的真正对象是业务,业务不能把可靠性责任都托付给公有云。首先要在业务层负起可靠性的主体责任。机房故障无法绝对避免,机房网络、电力、制冷总有概率出问题,或遭遇火灾、雷劈、地震、洪水、老鼠等天灾人祸。如何才能AZ故障发生后而不影响业务呢?

1、首先,应制定RTO(Recovery Time Objective,修复时间目标)。明确业务容灾需求,设计对应的可靠性架构方案,这涉及一定的资源成本投入。为消除单点灾难型故障,可以有多种架构:单机群多副本架构、容灾备份架构、同城双活架构、两地三中心架构、异地多活架构、多云/混合云/融合云架构。

2、即使不做冗余部署,也应建立符合RPO(Recovery Point Objective,恢复点目标)的备份,并异地存储。如在本次故障中如果知道会挂20几个小时,通过异地重新部署系统也可能是更好方案。

其实不仅有单AZ故障,容易出现灾难风险的点很多,如果不提前关注并解决,出问题是大概率的,书中有详细梳理并提出如何实现业务层的高可用。

三、故障处理与指挥协同的混乱

灾难型故障是一场遭遇战,指挥协同得当可最短时间结束战斗,取得胜利。我不是内部人士,以下部分内容凭经验猜测和业界反馈,认为可能存在以下问题:

1、内部沟通协作过程的问题。

可能存在对风险评估不足,没有在比较早的时候把风险级别提到最高,处理过程可能也存在误判,延误了故障处理。有些云产品服务响应较快,出现故障苗头(知道制冷故障但服务器还没大面积故障时)就开始处理了,有些云产品就比较迟缓,没有意识到风险正在到来。

2、对外信息通报问题、没有及时引导的问题。

这点被业界吐槽比较多,没有告知完整信息,而仅告知是盈科机房制冷设备故障,有推卸责任的嫌疑,且Status Page(服务可用性页面)更新不及时,受影响云产品不清晰,这让很多客户蒙圈。其实客户希望看到的是故障起因和具体影响范围、严重程度、可能恢复时长、建议方案、官方修复进展时间线等。

3、跟客户的协同混乱、帮助客户恢复业务无序低效。

从业界反馈来看,很多客户没有被告知准确的故障影响而是被云产品故障短信轰炸。没有很好组织用户有序迁移。很多客户到当天很晚还在抱怨没有恢复,其中是否都是用了单AZ产品的业务。

把云服务器和云产品启动了就算恢复了是不够的。有点遗憾,阿里云在12.25(故障一周后)发出的详细报告没有从客户角度分析恢复的过程。从微博反馈看,有不少客户恢复得比云的修复更晚很多。

在书中第5章介绍了如何进行一个大型故障的应急协同,也讨论了各种类型故障修复的方案,以及预案平台的建设等,值得互联网业务服务的工程师团队参考。

四、总结与复盘

深入复盘、有效整改、重建信任是重点工作。故障带来的损失无疑是巨大的,不仅是直接经济价值,也可能损失了客户对云的信任、客户企业可能可能损失了用户对他们的信任。按照SLA进行赔偿并不是客户最想要的,更需要深入复盘和有效整改,才能逐步重建信任。从受影响云客户角度也应该进行深入复盘,业务不能把可靠性责任都托付给公有云。使用单AZ冗余的产品是划算的吗?成本与风险的平衡点把握是否准确?最后要问,谁要对这次故障承担责任?谁要整改?怎么改?如何做好复盘可以阅读本书的第7章,复盘过程、复盘问题、根因分析、有效整改等方面都有深入讨论,提出了复盘“五条归零”的科学要求。

发生如此严重故障,阿里云的SLA肯定不好看,阿里云部分员工的年终估计也会 受到影响,更重要的是众多客户对阿里云甚至公有云的信任也可能大打折扣,依赖阿里云的企业将承受很大压力,他们同样也受到市民与客户的质疑。他们的2022年总结和2023年开局都不会很轻松。

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

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

相关文章

第12课【DMA 直接数据访问】直接数据访问 效率 数据总线冲突 通道 仲裁器

目录 简介功能框图请求通道仲裁器 使用配置传输方向数据量传输模式 实例分析存储器间传输存储器到外设 简介 DMA(Direct Memory Access 直接内存访问)指的是STM32中的一个外设。它可以在无需CPU介入的情况下,实现外设和存储器之间或存储器与…

毕业季,给大家用python画一个飞机吧~预祝大家一帆风顺

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天我们主要用到turtle这个模块,它是python自带的, 所以无需安装,我们直接导入使用就好了~命令如下: import turtle那这个模块有什么作用呢? 它是python中…

LeetCode刷题(ACM模式)-02链表

参考引用:代码随想录 注:每道 LeetCode 题目都使用 ACM 代码模式,可直接在本地运行,蓝色字体为题目超链接 0. 链表理论基础 0.1 链表定义 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成&#xff1a…

01背包问题-递推公式的自我理解与LeetCode 416. 分割等和子集

学算法好痛苦,完全是对我智力的一次次折磨,看了好多博客,对二维dp数组的理解都是直接搬了代码随想录,搬了随想录又没详细解释,大家都是一眼看懂的吗,好吧() LeetCode 416. 分割等和子…

华侨大学主题模版

华侨大学主题模版 适用于 课程作业、实验报告、项目策划、毕业论文、毕设答辩... 这是一个非官方项目,仅供个人学习研究。 🚀 指南 📖 仓库简介 该仓库提供了一系列适用于课程作业、实验报告、项目策划、毕业论文、毕设答辩等场景的华侨大…

API接口对电商平台有怎样的帮助?如何获取API接口?

API(Application Programming Interface)接口对电商平台有很多帮助,下面列举几点: 1.提高效率 API接口可以让电商平台的不同模块之间进行快速的数据交互,帮助平台实现更高效的业务处理。比如,在订单管理和…

牛客网学习之倒置字符串(详解fgets函数,如何读取含有空格的字符串)

题目要求&#xff1a; 过程分析&#xff1a;&#xff08;大致思路&#xff09; 具体代码&#xff1a; #include <stdio.h> #include <string.h> /*逆序字符串*/ void reverse(char* begin,char* end) {while (begin < end){char temp *begin;*begin *end;*en…

程序员的出路是什么?

做为一个程序员&#xff0c;工作了一定时间后&#xff0c;一定会有一个想法&#xff0c;那就是程序员能干多久&#xff0c;未来的发展方向是什么&#xff0c;更专业一点的说法是&#xff0c;职业规划到底是什么。 说实话&#xff0c; 我也仔细考虑过这个问题&#xff0c;偶尔也…

基于 HTTP Range 实现文件分片并发下载!

目录 前言 基础下载功能 进阶下载功能 单片下载 多片下载 浏览器发送预检&#xff08;preflight&#xff09;请求 express 不支持多段 range multipart/** 搭配 boundary** 分片下载功能 “只读的” ArrayBuffer 对象 DataView 子类 Uint8Array 操作二进制数据 Bl…

不愧是腾讯出来的,太厉害了...

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c;当然也没指望能来大牛&#xff0c;提供的薪资在15-20k这个范围&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

Go对Json的支持[encoding/json]

数据类型中转json的函数 基本数据转json Marshal使用以下与类型相关的默认编码: 布尔值编码为JSON布尔值。 浮点数、整数和数字值编码为JSON数字。 字符串值编码为JSON字符串&#xff0c;强制为有效的UTF-8; 用Unicode替换符文替换无效字节。 这样JSON就可以安全地嵌入到HTML …

2023年5月软考考试真题及答案汇总

2023上半年软考考试在5月27日-5月28日举行&#xff0c;为大家整理了各科目的考试真题及答案&#xff0c;可用于估分。&#xff08;会持续更新哦&#xff09; ​ 2023年上半年系统集成项目管理工程师上午题 1、在&#xff08; &#xff09;领域&#xff0c;我国还远未达到世界…

【数据结构】---几分钟简单几步学会手撕链式二叉树(中)

文章目录 前言&#x1f31f;一、二叉树链式结构的实现&#x1f30f;1.1 二叉树叶子节点个数&#x1f4ab;代码&#xff1a;&#x1f4ab;流程图&#xff1a; &#x1f30f;1.2 二叉树的高度&#x1f4ab;第一种写法(不支持)&#xff1a;&#x1f4d2;代码&#xff1a;&#x1f…

TCP协议的三次握手和四次挥手

完整的TCP内容&#xff0c;请参考RFC 9293 TCP协议为应用提供可靠的、有序的的字节流服务。TCP是面向连接的&#xff0c;提供了全双工的通信。TCP使用端口号来识别应用程序服务并在主机之间复用不同的流。 TCP header格式 TCP header也像IP header一样&#xff0c;在header中…

【Kafka】超详细介绍

文章目录 概念部署方案磁盘网络CPUpartition的数量 命令查看版本找kafka和zookeeper的ip/porttopic创建 topic查看get topic 列表get topic 详情 修改topic修改分区级别参数(如增加partition) 删除topic设置消息大小上限 生产查看生产生产消息 查看消费server 查看 offset查看积…

车载电子之汽车HUD技术

一、什么是HUD技术 HUD&#xff08;head up display抬头显示器&#xff09;是将重要信息显示在挡风玻璃上的一种显示系统&#xff0c;基本原理是&#xff1a;投影仪发出的光信息&#xff0c;经过一系列的折射、反射等投影到挡风玻璃上&#xff0c;人眼就能看到投射在上面的信息…

springboot+vue广场舞团系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的广场团舞系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

Jmeter接口测试-websocket测试

壹 Jmeter接口测试-websocket测试 测试之前的准备工作,需要websocket插件 方式一: 去github下载: https://github.com/maciejzaleski/JMeter-WebSocketSampler/wiki/Dependencies jetty-http-9.1.2.v20140210.jarjetty-io-9.1.2.v20140210.jarjetty-util-9.1.2.v20140210…

华为OD机试真题 Java 实现【云短信平台优惠活动】【2023Q1 200分】,附详细解题思路

一、题目描述 某云短信厂商&#xff0c;为庆祝国庆&#xff0c;推出充值优惠活动。 现在给出客户预算&#xff0c;和优惠售价序列&#xff0c;求最多可获得的短信总条数。 二、输入描述 第一行客户预算M&#xff0c;其中 0<M<1000000。 第二行给出售价表&#xff0c…

华为OD机试真题B卷 Java 实现【小朋友排队】

一、题目描述 小明今年升学到了小学1年级&#xff0c;来到新班级后&#xff0c;发现其他小朋友身高参差不齐&#xff0c;然后就想基于每个小朋友和自己的身高差&#xff0c;对他们进行排序&#xff0c;请帮他实现排序。 二、输入描述 第一行为正整数h和n。 0 < h < 2…