NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

从 “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:4310285
用户头像
鲁冬雪 InfoQ 策划主编

发布了 338 篇内容, 共 196.9 次阅读, 收获喜欢 270 次。

关注

评论

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

各地力推“链长制”,区块链让产业链更加安全可靠

CECBC

WEB本地存储:localStorage、Web SQL Database、IndexedDB

devpoint

Cookie indexedDB LocalStorage sessionStorage 11月日更

所谓的新型“数字人民币”诈骗,这里有几个疑点

CECBC

Elasticsearch中的Term查询和全文查询,重磅

Java 程序员 后端

Windows11 搭建openvino_tensorflow环境

IT蜗壳-Tango

IT蜗壳 OpenVINO 11月日更 openvino_tensorflow

Flink SQL Client综合实战,深入理解java虚拟机百度云

Java 程序员 后端

flume基本概念与操作实例(常用source),kalilinux视频教程

Java 程序员 后端

进击的Java(一)

ES_her0

11月日更

Elasticsearch聚合的嵌套桶如何排序(1),java大学基础教程

Java 程序员 后端

讲分布式唯一id,这篇文章很实在

秦怀杂货店

Java 分布式 分布式ID

ElasticSearch集群的概念及搭建过程,Java程序员晋升路线

Java 程序员 后端

ELK太重?试试KFC日志采集,2021大厂Java面试经验

Java 程序员 后端

【Promise 源码学习】第二篇 - Promise 功能介绍与特性分析

Brave

源码 Promise 11月日更

git(3)Git 分支,mysql语句优化面试题

Java 程序员 后端

【高并发】两种异步模型与深度解析Future接口

冰河

Java 并发编程 多线程 高并发 异步编程

Dubbo服务消费者调用过程,35岁老年程序员的绝地翻身之路

Java 程序员 后端

Flink处理函数实战之一:深入了解ProcessFunction的状态(Flink-1

Java 程序员 后端

Elasticsearch中URI Search和RequestBody Search分析(1)

Java 程序员 后端

Elasticsearch聚合的嵌套桶如何排序,java架构和框架

Java 程序员 后端

Redis 实现附近的人,全靠 GEO 数据结构让我邂逅女神

码哥字节

redis BitMap geohash NoSQL 数据库 11月日更

Flink的sink实战之四:自定义,Java开发笔试题目

Java 程序员 后端

Redis Pipeline

new life

Dubbo如何支持本地调用?InJvm方式解析,农民工看完都会了

Java 程序员 后端

Elasticsearch 如何做到快速检索 - 倒排索引的秘密,springboot项目实战

Java 程序员 后端

ELK + Filebeat + Kafka 分布式日志管理平台搭建,最新java面试题及答案

Java 程序员 后端

Geospatial-地理空间,java面试基本知识

Java 程序员 后端

【死磕Java并发】-----Java内存模型之happens-before

chenssy

11月日更 死磕 Java 死磕 Java 并发

Git 常用命令,使用Docker部署Spring-Boot项目

Java 程序员 后端

外包学生管理系统详细架构设计

天天向上

架构实战营

Docker系列(1)--Docker原理及安装,java线程池回收原理

Java 程序员 后端

Dubbo服务治理之灰度发布方案(版本发布控制影响范围)

Java 程序员 后端

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