写点什么

从 “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:435627
用户头像
鲁冬雪 InfoQ 资深编辑

发布了 62 篇内容, 共 23.1 次阅读, 收获喜欢 81 次。

关注

评论

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

【科技改变生活,区块链改变世界】欧科云链徐明星的区块链密码朋克世界

CECBC

区块链

敏捷技术实践之TDD

Teobler

敏捷 敏捷开发 TDD 极限编程 测试驱动开发

泰康和百度智能云为何相互需要?

吴俊宇

百度 保险数字化 泰康

Selenium 自动化前的补充知识,Frame操作、多窗口切换、模糊定位、复合定位

梦想橡皮擦

Python 28天写作 2月春节不断更

基于WASM的无侵入式全链路A/B Test实践

韩陆

微信小程序开发笔记(一)

陈飞

小程序

基于SpringBoot实现文件的上传下载

Java鱼仔

springboot

小步发布、验收测试和完整团队

Teobler

项目管理 敏捷 敏捷开发 工程实践 敏捷开发管理

又长又细,万字长文带你解读Redisson分布式锁的源码

数据库 redis 架构

应云而生,幽灵的威胁 - 云原生应用交付与运维的思考

阿里巴巴云原生

云计算 容器 微服务 云原生 k8s

区块链技术在各国政府管理中的运用

CECBC

区块链

山东区块链赋能农产品溯源平台解决方案

源中瑞-龙先生

我凭借这份“2021全网最全Java面试清单”彻底征服阿里面试官

比伯

Java 编程 程序员 架构 面试

1.2 Go语言从入门到精通:编写第一个Go程序

xcbeyond

28天写作 Go 语言

【管理笔记13】行销能力与应变行为

俊毅

Elasticsearch 一个 field 两个索引

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

“定义”

Nydia

一名叫谙忆的程序员在2021年的具体安排《打工人的那些事》

谙忆

首全网发!2021最新版美团面经刷题笔记,已霸榜GitHub

比伯

Java 编程 架构 面试 程序人生

爬虫知识记录之一

头号摄影师

爬虫

使用 Tye 辅助开发 k8s 应用竟如此简单(六)

newbe36524

Docker Kubernetes 微服务 dotnet

“他者”德意志(一):“进窄门”的德国AI

脑极体

备战金三银四,阿里,腾讯春招面试题解析,含Java岗988道题分享

Java 架构 面试

敏捷业务实践之计划游戏

Teobler

项目管理 敏捷 敏捷开发 敏捷开发管理

敏捷团队实践

Teobler

项目管理 敏捷 敏捷开发 工程实践 敏捷开发管理

28天瞎写的第二百四十四天:冥想的种类

树上

冥想 28天写作 正念

华为发布智能云网“五个一”新能力,助力运营商完成云与网的价值归一

脑极体

滴滴开源 LogicFlow:专注流程可视化的前端框架

滴滴技术

本期办公自动化需要的软件一览

IT蜗壳-Tango

七日更 28天写作 2月春节不断更 IT蜗壳

【Python】关于 Type Hints 你应该知道这些

zhujun

Python

产业数字金融的数字化与生态化

CECBC

金融

从 “B 站 713 事故”看高可用系统的治理_云计算_鲁冬雪_InfoQ精选文章