RPO 怎么校验
RPO 校验要用业务数据说话:在切换或恢复后的库上,查关键表里最新业务记录的时间戳,与故障发生时刻相减,差值就是实际的数据丢失窗口。流程指标(复制延迟、备份频率)说明设计意图,业务时间戳差值才是真实结果,两者都要看。
基本信息
| 口径 | 以业务可见数据为准:订单、交易、日志中的业务时间字段,而不是备份或任务时间 |
|---|---|
| 多表校验 | 对每个关键表与关键链路分别取最新时间戳,取最差的那一个作为结论 |
| 执行时机 | 切换或恢复完成后立即执行,早于业务放量之前 |
| 产出 | 实测丢失窗口与 RPO 目标对比,超出即列入问题清单 |
典型使用场景
- 切换演练收尾:确认提升后的库确实带上了切换前的最新业务数据
- 备份恢复验证:恢复完成后核对业务时间戳,量化丢失窗口
- 复制策略调整前后对比:验证同步或半同步改造是否真的降低了丢失窗口
- 对客户承诺的兑现证明:用实测数据支撑 RPO 承诺,而不是口头保证
- 故障复盘:把真实故障的丢失窗口与演练值对比,识别系统性偏差
校验查询示例
校验查询示例
# 关键表最新业务时间戳(用业务字段,不是备份或写入时间)
SELECT max(created_at) AS last_business_ts, now() AS check_ts
FROM orders;
# 与故障时刻比对,在恢复或切换后的库上执行:
# 丢失窗口 = 故障时刻 - last_business_ts
# 对多个关键表重复执行,取差值最大的那个作为结论校验维度对照
| 维度 | 做法 | 常见问题 |
|---|---|---|
| 主体数据 | 订单、交易等核心表取最新业务时间 | 用入库时间代替业务时间,结果偏乐观 |
| 辅助链路 | 日志、消息、缓存回写表分别取时间戳 | 只看主库,忽略下游链路的滞后 |
| 时钟基准 | 各节点时间同步状态先核对 | 跨机时钟未同步导致差值失真 |
| 结论口径 | 取各表中最大差值为实测丢失窗口 | 只取平均值,掩盖个别链路的严重滞后 |
复制指标是过程指标,业务时间戳差值是结果指标:延迟为 0 也可能存在事务级丢失,两者都要有记录。
依赖服务器本地时钟做比对时先确认 NTP 同步状态;时钟不同步的场景下,时间戳差值本身不可信。