4. 自动化测试验证流程总览
GameDay 自动化流程将混沌工程实验与基线核验固化为可重复、可量化的5个阶段。每个阶段都有明确的输入、输出和自动化触发条件,确保从计划到复盘形成完整闭环。
4.1 五阶段流程总览
下表列出了每个阶段的核心目标、关键活动及自动化产出物:
| 阶段 | 核心目标 | 关键活动 | 自动化产出物 |
|---|---|---|---|
| ① 计划 | 定义实验范围与基线 | 选择目标服务、确定故障类型、设定SLO阈值 | 实验配置文件(YAML/JSON) |
| ② 注入 | 执行故障注入 | 调用混沌引擎(如ChaosBlade/Litmus)注入CPU/网络/进程故障 | 注入事件日志、时间戳 |
| ③ 观测 | 采集系统状态与指标 | 拉取Prometheus/Grafana/APM数据,记录异常事件 | 时序指标快照、链路追踪数据 |
| ④ 核验 | 对比基线,判定是否通过 | 执行断言引擎,比对SLO与故障影响范围 | 核验报告(Pass/Fail + 偏差明细) |
| ⑤ 复盘 | 归档结果,驱动改进 | 生成实验总结、关联工单、更新风险矩阵 | 复盘文档、改进项列表 |
关键原则: 每个阶段必须幂等且可重入。若核验阶段失败,流程应自动终止后续注入并触发回滚,而非继续执行。
4.2 自动化流程整体架构
下图展示了GameDay自动化流程的组件关系与数据流向。核心引擎通过API网关串联5个阶段,各阶段模块独立部署,通过消息队列解耦。
4.3 阶段间数据流与关键接口
每个阶段通过标准化的接口协议进行数据交换,确保上下游解耦。以下为各阶段之间的核心数据流:
- 计划 → 注入: 传递实验配置(故障类型、目标IP/服务、持续时间、注入强度)。
- 注入 → 观测: 传递注入事件ID、时间戳、故障范围标签,用于关联指标。
- 观测 → 核验: 传递聚合后的指标快照(P99延迟、错误率、吞吐量)及链路追踪摘要。
- 核验 → 复盘: 传递核验结果(Pass/Fail)、偏差百分比、违反的SLO列表。
- 复盘 → 计划: 反馈改进项与风险等级调整,用于优化下一轮实验配置。
自动化触发条件: 核验阶段若判定为 Fail,引擎自动触发以下动作:
1. 停止当前所有注入任务;
2. 调用回滚脚本恢复故障注入前的状态;
3. 生成告警通知并创建高优工单;
4. 将实验标记为“失败-需人工介入”。
1. 停止当前所有注入任务;
2. 调用回滚脚本恢复故障注入前的状态;
3. 生成告警通知并创建高优工单;
4. 将实验标记为“失败-需人工介入”。
4.4 整体架构组件说明
下表列出了架构图中各核心组件的职责与技术选型参考:
| 组件 | 职责 | 技术选型参考 |
|---|---|---|
| 核心编排引擎 | 维护实验状态机、超时控制、阶段调度、回滚触发 | Argo Workflows / Temporal / 自研状态机 |
| 混沌引擎 | 执行故障注入(CPU/网络/磁盘/进程) | ChaosBlade / LitmusChaos / Chaos Mesh |
| 指标采集器 | 拉取系统指标与应用性能数据 | Prometheus + Grafana / Datadog / SkyWalking |
| 断言引擎 | 执行基线对比与SLO判定 | 自研断言框架 / PromQL + 阈值规则 |
| 通知服务 | 发送实验状态变更与告警 | 钉钉机器人 / 企业微信 / Slack Webhook |
| 工单系统 | 自动创建改进任务与故障单 | Jira API / 禅道 / ServiceNow |
4.5 流程自动化关键设计原则
- 幂等性: 每个阶段可重复执行,不会因重试导致状态不一致。
- 超时熔断: 每个阶段设置最大执行时间,超时后引擎自动标记为失败并进入回滚。
- 可观测性: 引擎本身暴露 Prometheus 指标(阶段执行时长、成功率、重试次数)。
- 配置驱动: 实验参数全部通过 YAML 配置,无需修改代码即可调整实验范围。
- 安全隔离: 注入阶段仅在隔离环境(测试集群/沙箱)执行,禁止直接操作生产环境。
常见陷阱: 不要将核验逻辑与观测逻辑耦合。观测只负责采集和存储,核验只负责对比和判定。混在一起会导致基线调整时需要同时修改两个模块,增加维护成本。