B站轻量级容灾演练体系构建与业务实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. B站轻量级容灾演练体系构建 与业务实践 演讲人:刘昊
2. 个人介绍 刘昊 ⚫ 哔哩哔哩 基础架构部平台工程负责人 ⚫ 从业十余年,专注于运维效能、质量运营等领域。 ⚫ 参与B站从百万级到亿级用户规模的技术演进,主导运维技术体系、中间件 体系与稳定性体系的设计和落地 ⚫ 目前主要负责SRE体系化建设和人员转型培训,设计落地应急响应、变更 防控、蓝军演练、运维数据资产和资产成本等系统,持续优化业务稳定性、 提升人员效率和降低资产成本。
3. 目录 01 新形势下稳定性挑战 02 轻量级容灾演练体系 03 业务场景演练实践 04 总结展望
4.
5. 01 新形势下稳定性挑战
6. 行业面临的稳定性挑战 业务的复杂性和多样性不断提升 基础设施的故障和隐患不断增多 随着信息化不断深透进各行各业,软件架构也在不断演进。从最 随着基础设施类的故障不断提升,对整个软件的基础架构和 初的单节点、单线程向分布式、微服务,从网站黄页导航/移动 业务架构的容灾建设带来了很大挑战。IT系统的各类容灾建 互联网再到产业互联网/AI大模型。软件的复杂度和多样性不断 设,像服务高可用/服务多活/同城双活等,将面临真实大考。 快速攀升,软件系统逐步成为稳定性事故的重灾区。 机 房 火 灾 光 缆 被 剪 断
7. B站面临的稳定性挑战 热搜体质,小故障,大流量 • 某商业CDN故障,引起回源级联故障,导致图片 持续性的多活建设,结果有效性急需验收 用户访问 APP WEB 多屏 DCDN DCDN 三方 CDN SLB SLB SLB API GW API GW API GW 第三方故障 灾备、降级 服务不可用,全链路图片容灾方案欠缺,多业务 受损 • IDC网络设备故障导致专线异常,业务未多活或 接入层 性能、架构 容灾、多活 多活依赖不合理,全站多个业务受损 • 某服务业务代码变更,业务架构设计不完善,大 服务层 量请求回源DB过载,业务异常 • 服务 BFF/Interface 服务 Service 服务 Service 服务治理/架构 微服务治理 嘉定机房专线网络异常,未有效绕行,影响办公 网相关系统访问 • x 服务 BFF/Interface 中间件/平台 缓存 DB KV/对象存储 可观测系统 CMDB 权限/流程 PaaS IAAS 混合云 中间件/平台故障 Failover 江苏POP和上海POP至常熟机房的光缆中断,导 致单一可用区脱网,大量服务受损 基础设施 服务基础设施故障 多活
8. B站混沌演练时间线 缘 由 故障频发 强弱依赖类型故障多 应用之间依赖不合理 可用区切换不生效 中间件异常影响失控 中间件降级策略 特性保鲜 常态演练保鲜 轻量化 技术改造 驱 动 多活能力改造 强弱依赖梳理 实战演练 验 证 模拟真实故障 研发自驱执行 过往痛点 演练3.0 演练2.0 演练1.0 异地多活 • • 高可用 2018 • 2020 引入故障注入工具, 具备故障注入能力 建设平台,实现演 练平台承载 各方针对痛点进行 混沌工程的实践 2021 • • • 提供统一的混沌 演练平台 丰富故障注入原 子 围绕混沌的五大 原则,补充平台 的产品化能力 2022 • • • 从混沌演练到容灾演 练全覆盖 围绕轻量级演练思路, 从组织、流程和技术 三块切入优化 低成本接入、参数自 动计算、链路自动规 划等 2024 重复建设过多 功能特性及其 特色化 缺失产品化的设计 演练成本高 演练工具及其 多样化 功能有效范围局限 性很大 还是要靠人经验使用 效果提升也明显 大团队,有的玩 演练成果难保鲜 风险性高 小团队,没的玩 缺少持续性 自动验证能力
9. 演练3.0阶段目标——轻量级 混沌实验/强弱依赖演练/预案演练/多活演练/突袭演练 流程 轻 量 级 技术 组织 • • 固化组织演练流程 固化技术演练流程,抽象标准化演练过程 • 强化产品化能力,减少演练人员心智负担 • 围绕演练过程,丰富可观测能力,丰富可演 扮演演练专家,降低用户成本 建设标准流程,规范演练行为 赋能用户具备演练经验,帮助研发、测 平台提供标准的演练操作流程,闭 试、稳定性负责人、SRE等不同角色的人 环整个演练生命周期,帮助用户完 快速上手,支撑业务稳定性工作。 善演练前、中、后的关键事项。 严控爆炸半径,确保演练可控 推进常态化演练,有效保鲜保稳 智能化计算演练范围,评估影响面,确 建设自动化演练能力,确保演练可以 保监控和告警事件的快速介入,并支持 常态化开展,保障业务容灾建设成果 练对象和注入范围 • 提供自动化的演练能力 • 可以自动回收演练结果,进行预期验证 • 建立组织间,各职能各业务的演练协同机制 • 增强组织内,人员对演练的收益认识 • 增强培训,减少学习成本 紧急中止,严控爆炸半径,确保演练可 控。
10. 02 轻量级容灾演练体系
11. 轻量级容灾演练体系 容灾演练体系 技 术 支撑 基础混沌工具能力 一站式能力 风险场景/演练/观测/分析/沉淀 高级混沌工程能力 轻量级容灾演练 演练报告 混沌数据 性能数据 资源数据 报告输出 自定义展示 演练管理 演练计划 演练任务 监控系统 任务编排 实验关联 实验观测 基础过程监控 资源指标 注入效果 业务稳态 实验执行 SLO 经验沉淀 SLB 恢复效果 基础硬件故障 网关 业务异常 中间件故障 灾害模拟 跨网容灾 混沌实验 创建 分发 注入 中断 查看 恢复 日志 编排 一般场景 容器异常 网络丢包 ... 特化场景 指定中间件 不可用 跨可用区 访问阻断 内存异常 磁盘异常 网络异常 组 织 文 化 研发过程 应急响应 组织架构支撑 CI流程 故障定位 安全生产委员会 测试回归 演练溯源 稳定性负责人 混沌演练 攻防演练 系统类故障 故障链路模拟 安全生产要求 网络类故障 研发过程 随机故障模拟 故障演练规范 中间件故障 服务树 特化场景故障 演练大模型 作业平台 容灾演练 场景缺陷分析 多活演练 原子故障库 CPU异常 故障中心 跨领域赋能 演练领域问答 演练场景 CPU高负载 周边集成 技 术 落 地 应用程序异常 容器异常 变更管控 降级演练 场景演练建议 制度建设 容灾演练章程 文化宣贯 培训考试 专题分享 活动宣传
12. 组织支撑 基于组织架构支撑的演练协同,容灾演练制度建设,日常文化宣导,提升全员安全容灾/演练意识和响应规范。 组织支撑 制度建设 • 建立安全生产委员会 • 各种规章制度建立 • 全局稳定性决策、规划 • 容灾架构设计规范 • 安全生产规则的“立法、司法” • 容灾演练章程 • 整体应急协同、安全文化培养 • 故障演练规范 • 全局管控、容灾、演练系统的规划与管理 • ... 文化宣导 安全生产月 学院培训 孤岛行动 技术分享 TC:技术委员会 安全生产委员会 稳定性 负责人 稳定性 负责人 稳定性 负责人 业务研发 业务研发 业务研发 SRE
13. 流程支撑 通过建设标准的演练执行流程和演练全周期流程,指导业务更有效开展实验,平台更有效设计功能 参 与 方 稳定性负责人 演练前 演 练 执 行 流 程 演 练 全 周 期 流 程 业务梳理 方案确认 业务场景录入 流量方案确认 验证方案确认 预案方案确认 影响面评估 兜底方案确认 实验构建 • • • • • • 研发 SRE 测试 演练中 制定演练范围 环境 集群机器范围 配置演练流程 关联验证场景 演练执行 场景模拟 设计场景 演练操作 指标观测 配置断言 护栏设定 设定预期 非生产环境演练 构建演练场景 - 攻击范围 - 攻击内容 - 攻击环境 - 预期影响 指标/告警/业务/上下游梳理 • • • • • 演练后 巡检执行 演练验证 演练待办 生产环境演练 流量染色 攻击前验证 攻击注入 验证恢复 是否符合预期&问题记录 • • • • • 演练恢复 常态化演练 验证是否 有效恢复 日常演练 预案执行 突袭演练 待办跟进 不符合预期 二次验证 催办 常态化演练 流量染色&流量预切 攻击前验证 攻击注入 验证恢复(联动应急) 是否符合预期&问题记录 • • • • 确认业务稳定性 确定验证手段有效性 常态自动化演练 周期性突袭演练
14. 技术支撑 通过技术手段对六化落地,实现对组织协同、流程标准对有效落地,确保轻量化容灾演练工作保质保量保效开展 演练协议标准化 故障引擎自研化 实验参数精简化 演练覆盖全面化 演练过程可视化 演练流程自动化
15. 演练协议标准化 痛 点 • 各家的混沌实验参数设计各异 思 路 • 同一个混沌原子故障实现方式各异 • 纯自研成本过高,但内外部演练工具过多 各类混沌工具 ChaosBlade • 基于实验共性,抽象统一描述模型 • 对外兼容,对内统一,归一化 • 引入参数的适配器,实现差异转化 标准演练描述模型 标准演练交互模型 模型组成 交互行为 CPU MEM 演练对象 演练范围 实验注册 实验执行 Disk 。。。 演练参数 演练模式 实验恢复 实验审计 预检要求 。。。 实验查询 。。。 其他开源故障 NetWork Http Java 。。。 实验 交互 行为 抽象 • 实验注入:注入实验,生效攻击 • 实验恢复:撤销已注入的实验 • 实验查询:查询某次实验的实验状态、结果 • 实验验证:验证实验注入是否有效 BCM平台 混沌场景 多活跨网 集群故障 。。。 攻击内容 攻击时长 标准实验描述协议 通用转化 器 自研故障 强弱依赖 攻击范围 场景转化 器1 场景转化 器2 ... 标准实验交互协议 Tool Tool Tool ...
16. 故障引擎自研化 背景 随着演练体量增多,演练场景丰富,开源ChaosBlade虽然满足了大部分的业务演练诉求,也暴露了很多问题 踩过的坑 - 故障可靠性不高,降低演练成功率 思路 • 基于开源ChaosBlade进行二开改造 收益 • 提升对演练注入和演练过程的控制力度和稳定性 • DNS干扰演练,注入逻辑无效,经常逃逸 • 网络不可用故障,在对象过多时,注入命令超长导致失败 • 扩展演练故障的性能和注入范围的规模化 • CPU Load注入,生效步长节奏不匹配,导致负载不达预期 • 提升代码可维护性,加速开发迭代效率 • 通过tc实现的网络不可用,恢复不达预期 - 演练编排流程实现太简易,状态上报和控制缺失 • 管理过程类似http无状态请求,某步骤出问题后就会断层 - 缺少服务/资源鉴权,增加演练风险 • 面相的注入对象太裸露,无法与企业内部服务对象、集群对象 匹配,演练注入范围的权限控制成问题 - 缺乏观测性手段,出问题难排查 • 演练注入的组件链路很长,缺少过程中对指令转化、执行结果 的记录审计 • 演练过程中,针对整体实验、单个故障、注入对象的指标埋点 和状态上报缺失
17. 实验参数精简化 以网络演练为例 收到参数后转化而成的tc命令 通用痛 点 • 围绕演练对象的上下游填各种参数,成本较高,容易出错 • 针对实验本身填各种参数时,由于与演练对象无法直接对应,心智负担较重 举个例 子 • 网络相关故障,是最常见的演练场景 • 模拟网络命令故障的命令,像tc、iptables学习成本极高 • ChaosBlade 直接暴露tc参数:2种IP,3种端口,其中排列组合让人摸不着头脑 方案 参数 含义 参数 含义 destrination- ip 影响 IP deny-ips 影响 IP exclude-ip 豁免 IP exclude-ips 豁免 IP deny-endpoints 影响 IP:Port exclude-endpoints 豁免 IP:Port exclude-ports 无条件豁免端口 local-port 本地端口 remote-port 远程端口 exclude-port 豁免端口 • 抛弃“过程式”参数,秉承“声明式”思想,用户需 要什么样的参数,就设计暴露什么样的参数 • 基于新的参数方案,重新实现生成网络丢包、延 迟故障注入的tc命令 结果 • 网络演练效果所见即所得,心智负担大大降低 • 平台开发者和用户都可以基于此更方便地拓展出更 原生network loss场景部分参数 自研network loss场景部分参数 复杂的实验
18. 实验参数精简化 跨AZ断网容灾演练 服务级跨AZ断网容灾演练的步骤 模拟一个应用断网要考虑什么 切流到单可用区AZ01 • 要断多少服务 • • • 服务列表:服务POD IP、主机IP 哪些要断 • 验证AZ02的 系统功能 收到参数后转化成的场景参数 对向机房的流量:网段 哪些不断 • 预期内不断:DB跨机房写、KV跨机房写 • 预期外不断:未改造的依赖(服务、中间件、存储) AZ可用区间专线中断(DB白名单) 方案 转化 执行参数 IP隔离 白名单 Akso资 源信息 中间件 白名单 网络资 源信息 可用区 白名单 Redis资 源信息 注入 合成 K8S 容器 信息 percent 演练 目标 信息 exclude- endpoints interface timeout container 含义 deny-ips 阻断的目标 AZ IP CIDR exclude-endpoints 需要豁免的数据库实例 • 通过公司内网络资源对接,可以获取各可用区的网段信息 • 打通公司缓存/数据库等平台元信息,提供白名单自动配置能力 deny-ips 参数 自研network loss场景的具体使用 执行 混沌 故障 引擎 • 基于网络不可用故障原子,抽象封装封网对象,简化输入 结果 • 实现公司内部平台的跨可用区断网演练200+起 • 发现50+非预期内的技术问题,覆盖代码设计/架构规范/ 配置规范等多区域 • 完成容灾建设闭环,实现从容灾架构-》容灾建设-》容灾 演练多推进落地
19. 演练覆盖全面化 确保公司内部各事业部、各业务线的各IT对象,均可在短时间内进入可演练状态,覆盖全景全域全对象 服务架构视图 • 底层依托两个执行载 体:容器、服务器 • 对象圈选依托CMDB, 接 入 层 建议实现对各类业务 服务、集群类型进行 自动圈选 注入对象类型多 计 算 层 风险主动预防 • 统一的region、zone 管理,便于做区域映 射 • Proxy管理,实现跨网 调度 注入载体规模大 注入环境多样化 1W+ 服务 20+ 种类 集群 10W + 规模 几十 万 容器 多多 地可 域区 跨跨 专境 线。 业务 服务 基架 集群 服云 务主 器机 容器 国内 国外 存 储 层 故障被动防御 • 自动打标,快速接入各类集群 • 部署规范化,基于helm chart 快速部署 • 部分故障优化解决了很多故障 的性能瓶颈 • 流程编排自研化,解决了单次 注入的规模广度问题
20. 演练过程可视化 痛 点 • • • • 监控 SLO 业务 演练对象类型多:应用、集群、组件 对象指标平台多:单一指标/聚合指标/日志 指标描述方式不一 上下游影响难感知 Adapter Adapter Adapter 围绕演练对象的指标分类列表 思 路 标准监控模型 监控 实体 对象 指标1 指标2 指标3 ... 告警1 告警2 告警3 ... • • • • 统一标准对象描述 抽象指标获取行为:指标列表、指标实时数据 内部应急平台+自有护栏调度 关联演练对象的上下游告警 演练圈选范围 接口 监控接入 指标时序 数据查询 告警事件 通知 演练过程中的实时指标数据 B C M 演练对象 动态调用关系 静态拓扑关系 演练对象和关联资源状态、告警信息
21. 演练流程自动化 演练流程自动化 场景自动验证 UI自动化测试 集 成 测 试 多场景接口测试 • 页面UI展示验证 • 演练定时调度器,支持分钟级调度 • 模拟用户操作验证 • 按照预定编排流程自动推进演练的 • 功能特性验证 • 全链路接口验证 单应用接口测试 演练自动执行 • 依赖接口验证 执行、恢复、结果回收 • 演练护栏支撑,确保演练过程异常, 能够快速恢复 配置业务场景的各类自动验证手段 • 场景结果是否符 场景结果验证 合预期 • 链路逻辑是否满 场景逻辑验证 足要求 • 接口指标是否满 接口指标验证 足条件 • 单一接口验证 打通集成测试平台,实现功能全方位有效验证 预期自动验证 通过定时调度器,实现全时段全流程演练自动推进 配 置 自 动 演 练 计 划 规 则 基于预设场景结果,自动回收结论产出报告 业 务 场 景 验 证 结 果 场 景 预 期 结 果 回 收
22. 03 业务场景演练实践
23. 演练协同一体 围绕演练从配置、执行、防护、恢复和报告全流程,在一个页面完成管理交互,降低交互成本 协同线下化 -> 协同线上化 演练配置 -> 演练执行 -> 演练恢复 -> 验收报告 模拟故障场景 人 业 务 协 同 信 息 演 练 配 置 • 演练对象设定 • 演练范围圈定 • 演练流程编排 • 实验原子配置 观测护栏配置 • 观测指标设定 • 护栏断言配置 v v 系 统 报告验收 • 汇集于一个面板 • 数据层面:连接人、业务、系统和信息 • 消息层面:精细化到人、群、系统的通告 • 展示层面:集成演练的影响面、上下文、 实时状态、各项指标等 演 练 完 结 • 沉淀演练过程指标数据快照 • 业务场景预期结果判定 • 待办产出 演练执行 • 推进演练按照流程往下推进 • 展示演练过程的指标、注入、影响情况
24. 可用区级断网容灾演练 确保可用区级别故障来临时,业务和基架服务能够具备逃生和容灾能力 整体 节奏 先 断 东 西 目标制定 方案规划 关键节点 模拟专线故障 拉齐阵营 月度断网 挖出业务不合理依赖 验证组件切量能力 STEP 02 整 合 全 断 模拟POP/回源故障 验证非多活业务逃生能力 验证控制面逃生能力 模拟机房整体脱网 最真实、彻底的演练 风险皆可暴露,藏无可藏 • 多活自动容灾 • 多活手动切量 多活风险治理收尾 • 业务跨机房依赖 • 基础组件多活读写配置 无流量AZ01专线断网10分钟 • 流量、存储读写切AZ02 • 断AZ01专线 • AZ01单活业务受损情况评估 • 多轮演练和验证复盘 结果复盘 全体参与 以战养兵 AZ02断网 AZ02公网容灾演练 STEP 04 STEP 03 STEP 01 验证多活业务自动容灾 演练执行 循序渐进 AZ01公网容灾演练 验证多活整体有效性 非多活业务受损情况评估 再 断 南 北 现状摸排 • 多活自动容灾 • 多活手动切量 • 单活逃生 STEP 05 1%流量AZ01专线断网10分钟 • AZ01留1%流量,断AZ01专线 • Invoker、存储切量 • 1%流量受损、AZ02单活业务受损 • 写有损 STEP 07 STEP 06 1%流量AZ01脱网10分钟 • AZ01留1%流量 • 断AZ01专线、公网 • Invoker切量、存储切量 • 1%流量受损、AZ01单活业务受损
25. 集成测试演练 在上线前确保服务间强弱依赖关系不被意外破坏 基本流程: • 故障演练平台提供 OpenAPI 操作故障演练实验 准入阶段 构建阶段 测试阶段 发布阶段 • 业务 QA 设计测试用例,编排故障场景 接口自动化 • 演练实例选择,提供基于染色的自动圈定,与 CI 流程自动发布染色实例打通 • 在自动化脚本中开启、关闭对应演练实验 故障演练平台 OpenApi UI自动化 commit 关键点: GitLab hook • 找到适合快速且能自动验证的业务场景(比如:强弱依赖),在流水线中完成演练的执行与验收 • 实验仅对某一测试集群的全量应用生效,持续时间极短,不影响日常迭代和人工测试 Action coding • 尽可能使用前文提到的UI自动化测试、多场景接口测试、单应用接口测试等方式验证演练结果, 避免重复编写测试逻辑 Build test failed Pull 故障演练平台 release
26. S赛演练 场景分级 L0 L1 L2 • 部门核心用户场景所对应业务 • 需满足:月日均DAU >= xx W; • 如不满足条件,降级到L1 • 部门营收业务 • 需满足:月日均营收 >= xx W • 如不满足条件,降级到L1 • 虽未达到上述要求,但属于战略级方向 • 强依赖下游业务 • • • • • 部门L0业务主场景使用中依赖的主要业务 核心的二类业务 不满足L0的部门核心用户场景所对应业务 不满足L0的部门主要营收业务 强依赖下游业务 • 部门给用户提供的其他业务 • 强依赖下游业务 梳理场景地图 针对性开展专项演练 场景拆解后,针对单一场景将关联的业务逻辑 针对S赛种核心L0/L1场景,我们在进房、送礼、发弹 (微服务调用关系、接口依赖等)进行全局梳理 幕、首页等场景进行了故障演练、红蓝对抗,主动发 形成场景地图,帮助场景负责人和决策者快速了 现如下非预期问题: 解服务本身的依赖情况。 • 代码问题,弱依赖被错误地实现为强依赖,导致核 梳理规范 • 场景名称:xxx • 场景等级:P0/P1/P2 • 场景介绍 - 方式:通过抓包、代码翻阅、负责人确认的 方式明确下述内容 - 方法:5w2h法 - 场景依赖:接口服务缓存数据库消息队列 心链路不通 • 弱依赖未考虑降级方案,用户体验不佳 • 代码问题,对于弱依赖的降级方案不生效 • 对于强依赖故障,客户端能否做到容错、友好提示, 各端降级体验是否一致
27. 04 总结展望
28. 演练收效 提 升 情 况 演练从规划到落地时间:从周纬度降低到天纬度 部门演练覆盖率:从头部热点覆盖提升到全覆盖 业务应用&核心场景演练频次:从季度提升到周 演练有效性验收成本:从天纬度降低到分钟纬度 32个 10+ 混沌原子能力 演 练 数 据 部门 28个 6个 1000+ 100+ 基础故障 特化故障 应用 业务 CPU 内存 数据库 网络 可用区强弱依赖 磁盘 中间件断网 跨可用区断网 直播 域名服务故障 流量 生态 缓存 账号 支付 三国谋定天下 3000+ 100+ 演练次数 暴露问题隐患 1000+ 2000+ 人工演练 自动演练 60% 40% 基础架构 业务研发 多活服务存在不合理依赖 机房流量未按对应泳道走 OGV 基础架构 中间件未开启多活配置 服务强弱依赖标记有误 漫画 ... 服务迭代导致降级失效
29. 实践反思 • 演练之前要有明确的目的,不然演练结束会觉得没有效果 • 大规模推广时候,需要结合业务团队特性来量身定做方案,主动推动 • 强弱依赖演练、预案演练、多活演练,具备高密度、高关注度、高收益的特征 • 演练自动化的关键还是在于过程护栏的有效性和演练效果验证的自动化 • 需要有面向演练场景的自动化用例,可能需要专门去补充 • 接口类的自动化用例,可以考虑用流量录制的流量集去转化 • 不同系统处于不同阶段,需要以不同的混沌工程实验帮助提升稳定性建设
30.
31. THANKS 大模型正在重新定义软件 Large Language Model Is Redefining The Software

inicio - Wiki
Copyright © 2011-2025 iteam. Current version is 2.139.0. UTC+08:00, 2025-01-10 04:47
浙ICP备14020137号-1 $mapa de visitantes$