如何记录混沌实验的 RTO/RPO 结果?

解读

面试官问“如何记录”,不是让你背定义,而是想看你在真实故障演练闭环里,能否把 Cloud SQL 的可观测性体系、混沌工程平台、国内合规要求三件事串起来,给出一条可落地、可审计、可复盘的链路。回答必须体现:

  1. 用什么原生工具抓指标;
  2. 如何把 RTO/RPO 算出来;
  3. 记录存在哪、格式怎样、谁签字、谁审计;
  4. 符合等保/银监/证监对日志留存≥180 天的硬性要求。

知识点

  1. RTO:故障发生到业务重新可用的时间;RPO:故障发生到可接受数据丢失的时间点。
  2. Cloud SQL 的point-in-time recovery依赖连续归档日志(WAL/Redo),粒度最短 5 分钟,决定 RPO 理论下限。
  3. Cloud Monitoring 默认采集database/up、replication lag、failover_request等 18 项黄金指标,可用于计算实际 RTO。
  4. Cloud Audit LogsDATA_WRITE事件包含每一次 failover 的operation_id、timestamp、region、target_instance,是法律认可的电子证据
  5. 国内账号体系必须使用Cloud Organization + 集团结算账号,否则个人账号无法出具有效审计报告
  6. 混沌实验平台(ChaosMesh、Gremlin 或阿里 AHAS)需通过Pub/Sub把实验元数据(实验ID、注入类型、开始/结束时间)同步到BigQuery 中国站(shanghai-region),实现跨云时间轴对齐
  7. 最终记录格式要满足等保2.0 第8.2.4 条“日志字段不可篡改、不可删除、不可人工修改”,因此必须启用Bucket Lock(WORM,保留期 1 年)。

答案

分五步落地,每一步都给出国内云环境可直接复制的配置:

  1. 实验前:基线快照
    在 Cloud SQL 实例开启自动备份窗口(北京时间 02:00–04:00),并通过gcloud sql backups create --async手动触发一致性快照,记录backupIdstartTime作为RPO=0的基线。
  2. 实验中:实时流式打点
    把混沌平台发出的故障注入事件通过Pub/Sub topic chaos-event 推到Dataflow 中国站作业,作业逻辑:
    • 解析injection_startinjection_end
    • 调用Monitoring API拉取实例的failover_completed事件;
    • 计算RTO = failover_completed.timestamp – injection_start
    • 计算RPO = 最新可用WAL时间戳 – injection_start(WAL 时间戳通过pg_last_wal_replay_lsn()mysql-binlog-index拿到)。
      结果以Avro格式写入BigQuery 表 chaos_rto_rpo.raw,分区字段experiment_id+DATE
  3. 实验后:不可篡改归档
    24 小时内把chaos_rto_rpo.raw导出为Parquet,上传到Cloud Storage 中国多区域桶 gs://audit-logs-china,并启用Bucket Lock策略(保留 365 天,ComplianceType = “Governance”),确保等保审计无法删除。
  4. 出具报告
    Data Studio 国内版模板自动生成PDF 报告,包含:
    • 实验场景、RTO、RPO、失败原因、改进项;
    • SHA256 校验值Bucket Lock 策略 ID,供第三方审计机构抽查。
  5. 权责分离
    报告经SRE 负责人 + 业务负责人 + 合规专员三签后,存入集团内部 Confluence 审计空间,并同步在腾讯云安骑士阿里云日志审计跨云双备,满足证监科技局〔2020〕41 号文“数据多重备份”要求。

拓展思考

  1. 如果实例跨北京/上海双区域,BigQuery 表需使用CMEK 中国密钥加密,否则数据出境合规会被监管挑战。
  2. SQL Server 企业版,Always On 的分布式可用性组RPO 可能<10 秒,但故障转移群集 IP 需备案,记得在工信部域名备案系统提前申请VIP 变更豁免
  3. 未来想自动化,可把Dataflow 作业封装成 Terraform 模块,通过Cloud Build 中国触发器实现“混沌实验即代码”,每次 MR 自动跑 RTO/RPO 回归,0 人工干预