速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

从 “B 站 713 事故”看高可用系统的治理

  • 2022-10-20
    北京
  • 本文字数:3758 字

    阅读完需:约 12 分钟

从 “B 站 713 事故”看高可用系统的治理

随着数字化经济的不断发展,云计算成为了各行各业进行数字化转型的重要基础设施,越来越多的企业选择上云。然而,随着云上业务的规模与复杂度日趋増长,对云上的运维、安全和管理也提出了新的挑战。

 

为了让企业以及相关 IT 和业务团队更好地紧跟技术变革,利用好云技术、释放云能力使能业务发展,据悉,此前在华为上海研究所举办的华为云联创营 • 云上综合治理班携手 bilibili,并邀请到诸多业内技术专家,围绕着智能运维中的算法落地、bilibili"713 事故”后优化改进实践、叮咚买菜基础技术应对疫情保障的经验、华为云 SRE 运维体系和企业云上容灾备份实践等内容,共同探讨安全可靠确定性的云上治理之路。

 

之前受开发者广泛关注的 bilibili 713 事故 bilibili 在线 SRE 负责人武安闯在华为云联创营 • 云上综合治理班中做了详细的事故解析和技术优化实践分享,为企业制定高可用业务系统的治理方案提供了许多启发。

一、bilibili 713 事故:耗时近 3H 才全面解决问题

 

2022 年 7 月 23 日,一篇名为《2021.07.13 我们是这样崩的》文章在 bilibili 社媒发布之后,迅速引起业界广泛关注,这篇文章发布之后,在技术圈掀起了一段讨论热潮,很多读者觉得意犹未尽,期待 bilibili 继续剖析"713 事故”之后如何执行优化落地。在本次华为云联创营 • 云上综合治理班中武安闯就给大家了一个回复:

 

bilibili 713 事故的时间线是这样的,2021 年 7 月 13 日 22:52,B 站无法使用,大量客户反馈内部大量服务、域名接入层不可用报警,在 22:57,bilibili Oncall SRE 便发现是 SLB 故障,但因为 SRE 团队核心成员在 VPN 公司内网时也受影响,23:17 才陆续进入内网系统正式解决问题。23:23 bilibili APP 推荐、APP 播放、评论 &弹幕拉取、动态、追番、影视等多活业务读取恢复,当晚多活机房 SLB 容量过载,后流量下降,重启后恢复,但直播移动端首页接口因为没配置多机房调度,导致当晚没有及时恢复。

 

紧接着,bilibili SRE 团队开始进行三次 Lua 层面的变更回滚,但直到 23:55 依旧没有恢复。于是团队在 01:00 开始新建 SLB 集群、配置初始化,进行四层 LB 配置与公网线路配置,CDN 开始切换回源流量,直到 01:40,核心业务切换到了 SLB 新集群,业务全部恢复。

 

为了彻底消除了风险,第二天上午,bilibili SRE 团队开始复现问题,定位到 3 个主要原因:

  • 多活基架能力不足;

  • 切量强依赖 CDN 运维;

  • 业务多活元信息缺乏平台管理。

 

之后 bilibili 针对这些问题在多活基架能力建设和多活管控能力提升两方面进行了优化。

 

从多活基架能力建设方面,bilibili 优化了多活基础组件的支持能力,如数据层同步组件优化、接入层支持基于用户分片,让业务的多活接入成本更低;重新梳理各机房在多活架构下的定位,梳理 Czone、Gzone、Rzone 业务域;推动不支持多活的核心业务和已实现多活但架构不规范的业务改造优化。

 


从多活管控能力提升方面,统一管控所有多活业务的元信息、路由规则,联动其他平台,成为多活的元数据中心;支持多活接入层规则编排、数据层编排、预案编排、流量编排等,接入流程实现自动化和可视化;对接 CDN、存储等组件,实现了一键全链路切量,提升效率和准确率。



值得一提的是,目前 bilibili 支持在多活切量时的前置能力预检,比如容量预检、延迟预检、限流预检、隔离预检等,而且还实现了切量中风险巡检和多活流量、业务/应用 SLO、Trace 链路等核心指标的可观测。

图:风险预检


图:多活切量可观测


在经历了以上一系列优化后,多活相关故障解决效率大大提升。比如“713 事故”时,如果业务 A 故障,那就要首先切量到多活机房,SRE 跟研发沟通后确认需要切域名 A+URL A,然后要告知 CDN 运维进行切量,全程至少需要半小时。而在优化后,SRE 与研发确认切量的业务、组件、流量比例后便可以实施动作,执行全程仅需 3-5 分钟。目前 bilibili 多活业务全部接入、生产已演练 80 多次,整体运行都非常稳定。

二、稳健的多活架构的本质是“高可用架构”

 

事实上,类似于“bilibili 713 事故”的类似事故并不少见,这也是为什么上个月复盘文章发出就引发众多开发者关注的原因。构建稳定的多活架构说到底就是高可用架构构建问题,高可用正如华为云多活高可用解决方案架构师郑学强在本次华为云联创营 • 云上综合治理班中所说的那样,“当前环境下,企业对业务连续性 (BCM) 的追求,促使应用向高可用架构演进。”

 


在企业需求和行业发展要求的推动下,华为云一直在努力完善多活高可用解决方案。



这个方案能够实现异地多活、单元化,并且支持流量自治,非常适用于对容灾可靠性要求极高、业务对时延敏感且要求数据分区化的企业:

  • 用户访问流量:通过 DNS 的 GSLB 特性实现业务访问流量控制,并在网关层进行流量分区管理和纠错;

  • 网关层:进行流量路由标记,流量染色,并通过染色结果精准调度;

  • 数据层:数据禁写保护,避免脏数据,数据双向同步,单元化数据要通过网关判断纠错,数据层 SDK 进行多层数据禁写;

  • 容灾恢复切换:通过多活切流,并按照单元化的流量分配,切流过程汇总数据禁写保护,保证数据一致性;

  • 容灾演练:客户自行通过人工/脚本方式进行演练或基于第三方软件进行容灾演练。

 


该方案有两个核心技术亮点,首先,华为独有的探活仲裁管理面 DCG,以及配合切换的 SDK,多层配合实现业务双活。在公网接入层中,DNS 中配置双 AZ IP 的两条 A 记录,DNS 域名解析返回 IP1&IP2,P1、IP2 顺序随机,50% 用户 IP1/IP2,50% 用户 IP2/IP1。在端侧使用 URLConnection 或 OKHttp 调用 Http 接口,并设置超时为 8-10 秒;端侧域名解析获得两个 IP,缓存在本地,在 TTL(通常 300 秒)时间内使用缓存;端侧默认使用第一个 IP 访问;如果第一个 IP 访问超时,底层会自动尝试第二个 IP(RFC3484)。在负载均衡层中,支持 ELB 双 AZ 转发、SLB 双 AZ 转发。如果 SLB 节点故障,ELB 通过健康检查会自动摘除故障 SLB 节点;如果 App 节点故障,SLB 通过健康检查会自动摘除故障 APP 节点。而在业务层,实例无状态,可横向扩容;多个实例负荷分担方式工作,任何一个故障,不影响业务,同时业务读写 AZ1 的数据层。如果 AZ1 中数据层发生故障,则可由 DBMonitor 自动切换到 AZ2 中的数据。



其次,两地三中心——应用跨 AZ 双活、跨 Region 容灾。从系统架构方面来看,容灾区域可双活或者单 AZ 部署,根据业务进行评估。MAS 容灾管控负责管理端到端同步任务,数据同步关系建立、展现、切换,同时负责监控主备 Region 状态,还提供主备 Region 容灾切换能力,用户在切换时可根据告警手动切换。 在容灾切换停止主 Region 业务(入口流量、定时任务等)后,MAS 则停止主-备数据同步任务,并启动备-主数据同步任务,用户修改 DNS 配置完成容灾切换。

 

在跨 Region 容灾切换方面,华为云提供了切换编排能力,常见的切换动作流:主 Region 数据库设置只读(可选)、停止跨 Region 数据库容灾同步任务、容灾 Region 的数据源升主、容灾 Region 应用启动/扩容、DNS 切换到容灾 Regin、启动容灾 Region 的应用侧定时任务。



当生产站点因为不可抗力因素或因设备故障导致应用在短时间内无法恢复时,这样的容灾方案可以很好的解决运维事故,以满足 SRE 需求。

 

除此之外,典型的双活架构日常非故障时可以将流量负载分担到不同的分区,减少并发压力,像 bilibili 这种自媒体视频平台很容易因为突如其来的热点而产生突发性高并发流量,华为云提供的这种多活高可用解决方案还可以很好地应对这种难题。

 

从华为云多活高可用的实践方案中我们可以看出,华为云在高可用方面的表现非常优秀。像“华为终端云服务迁云+双活”,其业务增长年复合率已经超过了 30%。从 2013 年至今,该架构可靠性已实现 4 个 9,运维成本降低了 30%,服务类型已经超过 30 种,弹性伸缩效率达到 1k/min,安全能力以达到 T 级。



在消费者中国区云化双活项目中,截至 2018 年 Q2,其所有业务流量就已由公有云环境承载。目前系统运行正常,华为精选、协议服务、A/B 测试平台等新业务也已在公有云高可用部署上线,另外借助此方案已经完成了中国区公有云双 AZ 故障的应急演练,涉及已云化的 12 个业务,演练结果均符合预期,有效地确保了公有云双 AZ 的可靠性。

三、写在最后

 

系统可用性是通过可用性指标来进行衡量的,我们说的“高可用”则是指这个系统 99.99% 的时间都是可用的,这也就意味着一年中的不可用时间只占 53 分钟,在这个飞速发展的数字化时代,高并发流量突发、设备突发故障或其他不可预知的情况为企业提出了挑战,“4 个 9”真的不是轻易可以做到的。

 

面对企业上云之后带来业务规模与复杂度的日趋增长,华为云基于和伙伴的协同实践构建了一套完整的面向云上应用的立体化治理系统,通过融合 AOM、APM,提供云应用基础设施层、应用层、业务层的运维能力,并对各类资源可实现多维度实时监控,通过应用与资源关联分析技术,实现问题快速诊断和修复,保障云上应用持续稳定运行。

 

如今上云已经成为企业战略部署的一部分,上云这件事对于企业来说已经是个既定命题,而如何构建高可用系统架构成为企业业务上云后新的关注点之一,通过一系列的自动化手段实现业务的高可用是目前所有企业常用的解决方案,华为云一直在持续加强技术研发和创新,为智能世界构筑云底座而不断展开技术探索,全面助力千行百业的数字化转型。


关于华为云与 bilibili 的更多技术,请关注↓


2022-10-20 12:4311049
用户头像
鲁冬雪 GMI Cloud China Marketing Manager

发布了 362 篇内容, 共 265.0 次阅读, 收获喜欢 294 次。

关注

评论

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

概述Spark主要特点

穿过生命散发芬芳

spark 10月月更

文件的使用详解

lovevivi

c 文件 10月月更

2022-10-25:在一个 2 * 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示。一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换.

福大大架构师每日一题

算法 rust 福大大

C++从入门到精通(第十篇) :二叉搜索树

雪芙花

c++ 10月月更

Commit之后发生了什么事情

我不吃六安茶

MySQL 事务

css学习笔记3

虾仁疙瘩汤

CSS css3 10月月更

Nginx反向代理是什么意思?如何配置Nginx反向代理?

wljslmz

nginx 反向代理 web服务器 10月月更

【c++图论例题学习】【口袋的天空】【部落划分】

贤鱼很忙

c++ 图论 10月月更

【c++算法篇】--图论之克鲁斯卡尔

贤鱼很忙

c++ 图论 10月月更 克鲁斯卡尔

深入浅出Python——Python高级语法之函数

何极光

Python 函数 10月月更

2022年元宇宙应用场景发展趋势分析

易观分析

元宇宙

【web 开发基础】PHP 快速入门(11)-PHP 运算符之运算符的优先级

迷彩

表达式 10月月更 web开发基础 PHP基础 运算符优先级

SAP | 选择屏幕

暮春零贰

SAP 10月月更 屏幕

CSS学习笔记2

虾仁疙瘩汤

CSS css3 10月月更

如何进行需求分析?

老张

软件工程 需求分析

“程”风破浪的开发者|社交元宇宙的技术挑战与探索

小明Java问道之路

原创 架构 元宇宙 10月月更 “程”风破浪的开发者

Vue组件入门(十四)依赖注入

Augus

Vue 10月月更

C语言内存对齐问题

乌龟哥哥

C'语言 10月月更

【c++图论例题学习】洛谷p1991 无线通讯网-思路详解

贤鱼很忙

c++ 图论 10月月更

深入浅出Python——Python基础语法全解

何极光

Python 基础 10月月更

Spring Boot「14」MVC 与前端控制器模式

Samson

Java spring 学习笔记 spring-boot 10月月更

leetcode 287. Find the Duplicate Number 寻找重复数 (中等)

okokabcd

LeetCode 数据结构与算法

力扣刷题训练

lovevivi

c 数据结构 10月月更

vue3.0 是如何变快的

乌龟哥哥

10月月更

AntDesignPro使用electron构建桌面应用

乌龟哥哥

10月月更

数据湖(十一):Iceberg表数据组织与查询

Lansonli

数据湖 10月月更

威胁网络安全的主要因素

阿泽🧸

网络安全 10月月更

CSS基础1

虾仁疙瘩汤

CSS css3 10月月更

liunx入门:Linux下基本指令

雪芙花

c++ Liunx 10月月更

C++精通之路:map和set

雪芙花

c++ 10月月更

【web 开发基础】PHP的流程控制之单一分支结构-PHP 快速入门(12)

迷彩

10月月更 web开发基础 PHP基础 分支语句 if条件分支

从 “B 站 713 事故”看高可用系统的治理_服务革新_鲁冬雪_InfoQ精选文章