当前位置:网站首页>B站SRE负责人亲述 713事故后的多活容灾建设|TakinTalks大咖分享
B站SRE负责人亲述 713事故后的多活容灾建设|TakinTalks大咖分享
2022-07-26 18:10:00 【InfoQ】

一、B站的高可用方案是怎么做的?
1、先来看看整体系统架构
- 用户访问层:用户访问是多端的,有APP、Web、多屏,包括OTT电视等;
- 接入层:主要有三部分,我们的动态DCDN、第三方的商业CDN以及七层的SLB负载均衡,SLB下面还有一层API GW;
- 服务层:第一层是服务的BFF网关也是服务的Interface层,网关层下面是我们服务的Service层;
- 中间件/平台:比如核心的中间件缓存、DB、可观测系统,还有我们的KV和对象存储、CMDB和业务流程平台等;
- 基础设施:包含Paas、Iaas、混合云等。

2、每一层架构做了哪些高可用方案?
2.1 接入层的高可用

1)针对网络故障的方案
- 在DNS故障的时候,很多公司都会想到降级到HTTP DNS;
- 对于端上来说APP请求解析到一个地区返回多个DCDN节点,让移动端来做一个最佳的选路;
- 当我们APP在访问DCDN时出现网络层面的故障,我们可以降低到第三方的CDN,对我们自己的DCDN做容灾;
- 当CDN回源的时候会走我们的pop点进行流量汇聚,我们的pop点有多个可以做线路的互备;
2)针对组件以及服务故障的方案
- SLB向后段转发的时候是可以发现多个可用区里的服务的,包含API GW以及没有走API GW的其他服务;
- 当单可用区的节点故障了,是可以自动降级到其他可用区的节点的;
- 当SLB所代理的服务出现异常的时候,我们也可以做对应的API的降级、熔断和限流等;
- 对SLB故障的处理流程做了优化,之前新建一套集群包括配置公网IP到检验完成需要花一个小时的时间,现在我们可以做到5分钟重建一套集群并完成配置与下发。
- API GW层面我们把很多SLB的能力给下放了,API GW也可以返现多可用区的服务节点,当出现故障时也能自动降级到其他可用区,同时它也支持API的降级、熔断和限流等;
2.2 服务层的高可用

1)P2C算法
2)降级
3)限流
2.3 中间件的高可用

1)缓存中间件的高可用
2)MQ中间件的高可用
3)Mysql数据库的高可用
二、高可用方案能防止系统不出故障吗?

- 多活元信息是没有平台管理的。我们哪个业务做了多活业务、是什么类型的多活、是同城的还是异地单元化、哪些业务是哪些url的规则支持多活的、当前多活的流量调度策略是什么、用户是随机回到我们多个机房的,还是要基于用户的ip或者用户的一些设备ID来做路由的策略……这些没有地方维护,我们当时只能用文档来维护,这导致信息割裂的特别严重,信息的更新也不及时。
- 多活切量能力是完全依赖我们CDN运维。因为我们B站的多活流量调度是在边缘的DCDN侧来实现的,常见的流程是,SRE提出一个切量的需求来告诉CDN的同学,同时告诉他们要切哪个域名、哪一个URL规则,然后CDN发起变更开始切量,同时同步到SRE和研发,让SRE和研发同学一起来观察服务的状态和多机房的流量。

三、“713”事故后,多活做了哪些优化?
1、梳理相关元信息
1.1 业务信息

1.2 多活模式
- Gzone的模式下用户间的数据都是共享的,B站的视频播放、番剧播放、稿件信息、直播间,都偏向于平台侧的数据,这种业务场景,都可以做成Gzone的模式。
- Rzone的模式也就是单元化的模式,他更适用于用户侧的流水型的数据,比如评论、弹幕、动态、支付都是流水型的数据。
- Czone模式介于Gzone和Rzone,也是在用户间做数据共享,但它的可用区是可以做本地读写的,可以接受一定的数据延迟与不一致性。

1.3 机房定位
2、组件的多活能力建设

- DCDN层面:我们已经支持通过用户的ID或者用户设备ID来Hash路由到不同的机房,同时支持用户流量在多机房的动态权重,1/100到1/99,或者2/98都是可以动态支持的。
- Service层面:之前我们做同城双活时没有实现写,那个时候还没有Proxy,现在有了Proxy就可以让业务方来做本地的写改造了,然后通过存储的Proxy来路由到主可用区。
- Proxy层面:通过proxy同时支持KV和DB两种存储模式,并实现读写分离和failover。
- GZS层面:前面有讲到我们多活是没有全局管控的,那GZS就是来做我们的多活业务、业务应用和API的元信息管理的,包含业务、多活、切量的编排。
3、Invoker管控平台的搭建与应用
- 多活规则元信息获取方式优化
- 针对平台本身进展多活和演练
- 多活编排、接入流程的优化
- 审批、巡检、可观测能力的加强
3.1 通过平台规范多活流程
1)多活定义编排

2)多活切量编排

3)切量可视化

3.2 建设管控平台自身的高可用

4、优化的效果:多活效率提升10倍


边栏推荐
- Introduction to Seata
- 2022 chemical automation control instrument test question simulation test platform operation
- [interview question] 1384- share 44 JS problems. Half right is a master
- Is it safe for CSC qiniu members to open preferential accounts? I don't know if it's the lowest Commission
- Verification palindrome string II of leetcode simple question
- Comparison of advantages and disadvantages between SD NAND and EMMC
- Zbxtable 2.0 heavy release! 6 major optimization functions!
- 【Swoole系列3.1】进程、线程、协程,面试你被问了吗?
- 2022茶艺师(中级)考试题模拟考试题库及答案
- JS刷题计划——数组
猜你喜欢

The United States, Japan and South Korea jointly developed 6G with the intention of anti surpassing, but China has long been prepared

2022茶艺师(中级)考试题模拟考试题库及答案

Agenda express | list of sub forum agenda on July 27

2022g1 industrial boiler stoker certificate question bank and simulation examination

Support proxy direct connection to Oracle database, jumpserver fortress v2.24.0 release
密码一致,总显示如下图

Verification palindrome string II of leetcode simple question

2022年流动式起重机司机考试试题模拟考试平台操作

How to become an excellent test / development programmer? Focus on planning and then move

5款WPS Office最佳海外替代品
随机推荐
How to become an excellent test / development programmer? Focus on planning and then move
MySQL - 函数及约束命令
配置服务器环境
分布式事务-seata
LeetCode-138-复制带随机指针的链表
2022g1 industrial boiler stoker certificate question bank and simulation examination
EN 1504-7混凝土结构保护和修理用产品钢筋防腐—CE认证
Basic module and example pytorch learning
Sentinel isolation and degradation
Typescript stage learning
2022 welder (elementary) operation certificate examination question bank and simulation examination
.Net CLR GC 动态加载短暂堆阈值的计算及阈值超量的计算
[postgraduate entrance examination vocabulary training camp] day 13 - reliance, expert, subject, unconscious, photograph, exaggeration, counter act
Leetcode notes: Weekly contest 303
MySQL学习笔记-2.如何提高sql语句的查询性能
JS刷题计划——链表
手机申请公募reits账户安全吗?
JS question brushing plan - linked list
一些时序建模策略(一)
Racher deploys kubernetes cluster