BCM混沌平台的建设与落地实践 谷林涛资深开发工程师 谷林涛 Bilibili资深开发工程师 2021加入B站。在职业生涯中,专注于稳定性平台的体系化、产品化工作。曾负责应急故障平台、变更管控、工单平台研发。目前的主要工作是负责从0-1建设混沌平台,专注公司混沌技术平台落地,提升公司业务稳定性。 01B站 混 沌 工 程 背 景 02从 演 练 的 生 命 周 期 说 起 03混 沌 平 台 的 架 构 设 计 与 核 心 能 力 04业 务 最 佳 实 践 B站混沌工程背景 B站混沌工程背景 缘由 验证 故障频发 技术改造 演练痛点 实战演练 可用区切换不生效应用之间依赖不合理中间件异常扩大影响 多活能力改造强弱依赖梳理中间件降级策略 演练工具多样演练成本高演练安全性不可控 模拟真实故障研发自驱执行常态演练保鲜 PART 02 从演练的生命周期说起 演练的标准流程 PART 03 混沌平台的架构和核心能力 设计目标 提供标准的SOP规范流程 降低用户成本,成为演练「专家」 赋能用户具备演练经验,帮助研发、测试、稳定性负责人、SRE等不同角色的人快速上手,支撑业务稳定性工作。 提供标准操作流程,闭环整个演练的生命周期,帮助用户完善演练前、中、后的关键事项。 提供常态化演练 保障演练安全可控 常态化演练又分为定时调度和突袭演练,意在反复验证已经通过的演练是否会在业务迭代的生命周期中失效。 监控和告警事件的快速介入,并支持紧急中止,控制爆炸半径,保障演练安全 整体架构 丰富的演练场景 标准的流程编排 可靠的护栏观测 核心能力 降低用户门槛 接入不同演练工具 统一演练流程 常态化演练 演练工具主要重心在原生场景的原子实现,而业务更关心的是故障的实际场景,平台需要搭建桥梁,降低用户的使用成本。 市面上有很多开源的演练工具,公司内部测试团队也根据公司框架自研了演练工具。平台需要做到快速接入。 制定标准的演练流程,并对用户透明,针对不同的故障,不同的攻击目标,都具有标准的演练SOP。 在完整的完成过演练过程后,平台提供常态化演练能力,保障迭代过程中,演练依旧能够通过验证。 背景 调研开源社区背景,抽象演练协议,快速接入丰富的演练工具 痛点 演练工具黑屏操作,演练参数构造复杂,普通用户学习成本高 方案 基于业务制定演练场景,提供参数构造转化器,打通内部平台,实现参数转化。 行为协议 实验注入:完成一次攻击实验撤销:撤销一次已注入的实验实验查询:查询某次实验的实验状态实验验证:验证实验注入是否成功 混沌平台能力设计 背景 混沌平台接口标准协议表达的更多是技术相关的底层参数,对演练同学来说,学习成本高,并且由于参数复杂,使用方式不正确会出现不符合预期的情况。因此需要有一个“桥梁”,解决这个问题。 方案 基于平台的演练场景事件描述和混沌平台协议标准的不一致,完成信息转化。降低用户的使用成本。 标准的演练监控和护栏 背景 公司内部具有不同的监控平台,都需要统一接入混沌平台,支撑业务演练的防护护栏。 设计 标准化监控模型,并接入公司内部多种监控平台、告警平台和日志平台。通过对监控系统的抽象,平台能快速接入业务所需的多个异构的监控平台,并通过规则配置实现异构监控的指标计算,以此多重保障演练的安全,杜绝扩大爆炸半径。 业务最佳实践 混沌底层能力——基于ChaosBlade实践 背景 ChaosBlade能满足我们业务的大部分演练诉求,但是在演练过程中发现如下问题: 1.观测性问题——ChaosBlade和ChaosBlade-operator及其他几个module的日志没有统一接入,在业务排查问题的时候,由于缺乏日志导致无法解决。 2.注入逻辑问题——比如在实战过程中,DNS干扰的演练无法正常恢复;网络不可用命令超长不符合预期;CPULoad注入不符合预期;网络问题恢复不符合预期 根据开源改造,自建BCM-Engine,由BCM-Agent和BCM-Blade组成,解决上述问题 3.没有相关的鉴权,也没有业务监控 最佳实践——跨可用区断网验证 背景 公司内部多活改造业务持续推进,但缺乏验证手段,需要混沌平台承载验证能力。 设计 通过公司内网络资源对接,可以获取可用区的IP网断,并打通公司缓存平台,数据库平台的数据元信息,提供白名单的能力配置,使用ChaosBlade的网络不可用的原子场景,提供能力。 结果 实现公司内部平台的跨可用区断网演练20+,发现50+不符合预期的业务问题,持续推进该场景的演练验证。 混沌底层能力——基于网络不可用的实践 背景 各种故障模拟场景都是可以基于网络不可用,但网络元信息数据获取以及攻击参数如何构建对普通用户来说具有一定成本和困难。并且Chaos网络不可用有一些“潜规则”,和每个用户沟通成本比较高。 方案 打通公司内部平台,集中元信息。并验证ChaosBlade场景的注入是否符合预期,降低业务的使用成本,复用平台能力 结果 阻断:数据库、缓存、应用依赖、域名、可用区形式:不可用、延迟(包含抖动) 一次演练流程 业务演练数据 场景 跨可用区断网验证;缓存不可用;缓存延迟;数据库不可用;数据延迟;域名不可用;依赖不可用,依赖延迟等业务场景 问题 验证出代码边界问题,发现数据库配置错误导致的切流异常,缓存超时不可用导致的业务异常,跨可用区不合理的依赖导致业务无法正常降级以及在历史工程中弱依赖影响了主流程等各种问题。 业务 完成业务演练,发现业务、架构、中间件不符合预期的问题,推进业务方持续迭代跟进。 高效运维社区DevOps时代 荣誉出品 感谢大家观看