← 返回题目列表

最终一致性系统要监控哪些指标?

高频 中等 第 12 / 25 题 更新于 2026/10/03
最终一致性可观测性对账补偿
学习 AI 实战项目

简化版

最终一致系统最重要的不是“消息是否消费”,而是业务状态多久收敛。 应监控未一致对象数量、年龄分布、最老年龄、各阶段延迟、重试和死信、版本水位差、对账差异与补偿吞吐。 指标必须按业务类型和风险分层,并能从业务 ID 追踪源提交、事件、消费、落库和修复全过程。

详细版

端到端指标包括 P50/P95/P99 convergence latency、out-of-sync count、oldest inconsistency age 和超窗数量。 链路指标包括 outbox backlog、MQ lag、消费失败、下游写入冲突、补偿积压与对账覆盖率。

只看队列 lag 会漏掉消费成功但业务写失败、错误数据被 ACK 或事件根本未发布。 用 reconciliation 作为独立验证面。 告警同时考虑数量、年龄和业务金额,避免一条高额资金差异被平均数掩盖。

完整版教学

一、定义“收敛完成”

先为每类流程定义源状态与目标状态。 例如订单 PAID 后,账务凭证存在且金额、版本匹配才算收敛。 消费者返回 200 不代表业务一致。

可观测性必须围绕业务不变量,而不是只围绕中间件健康。

二、黄金指标

指标含义
out_of_sync_count当前不一致对象数
oldest_age最老不一致持续时间
convergence_latency从源提交到目标确认
over_window_count超过 SLO 的对象
repair_rate单位时间修复数

同时按业务类型、风险等级和状态聚合。

三、分段延迟

source commit
-> event published
-> broker available
-> consumer received
-> target committed
-> reconciliation verified

为每段记录时间与 correlationId。 端到端慢时才能判断是 outbox、队列、消费还是目标库。

四、积压与净吞吐

队列每分钟新增 10 万、消费 12 万,净清理 2 万。 积压 100 万至少需要约 50 分钟,且前提是新增和消费速率保持稳定、净清理能力不再恶化。 恢复 ETA 要按净吞吐计算。 监控分区不均,平均 lag 会掩盖热点分区。

五、失败与重试

统计瞬时错误、业务拒绝、版本冲突、解析错误和永久失败。 观察 attempt 分布、next retry age、dead-letter 数与人工队列。 成功率 99.9% 在亿级事件下仍可能每天十万失败。 必须结合绝对数量和影响金额。

六、独立对账

对账不依赖同一事件链路,否则共同故障会同时失明。 按共同水位比较 count、金额、状态和哈希。 监控扫描覆盖率、上次成功时间、差异发现到修复时间。 修复后再次对账确认闭环。

七、追踪与基数

单个业务 ID 用日志/Trace 查询,不全部作为时序标签。 时序指标使用业务类型、区域、错误类等有限维度。 采样 Trace 不能替代全量计数与对账。 敏感数据进入日志前脱敏,correlationId 不含用户秘密。

八、常见误区与追问

  • 误区:MQ 无积压就一致。 业务写错后消息也可能已 ACK。
  • 误区:只看平均收敛时间。 尾部对象决定违约与风险。
  • 误区:重试成功率高就安全。 永久失败绝对数量仍可能很大。
  • 误区:Trace 抽样能替代对账。 抽样无法证明全量不变量。
  • 追问:最重要的告警是什么? 超窗数量与最老不一致年龄。
  • 追问:如何估算恢复时间? backlog 除以净处理吞吐。
  • 追问:如何定位单笔? 用业务键串起源、事件、消费、目标和补偿记录。

九、加强记忆

  1. 先定义业务何时算一致。
  2. 看数量、年龄、尾延迟和超窗。
  3. 分段观测发布、队列、消费与目标写入。
  4. 用净吞吐估算积压恢复。
  5. 独立对账验证全链路,Trace 负责单笔定位。