标准答案

  1. 搜索索引、统计、推荐、通知和缓存通常可以接受可见性延迟,但要定义最大陈旧时间和修复路径。
  2. 余额扣款、库存最终扣减、权限授予和关键状态确认通常需要同步的权威写入或明确的受理状态。
  3. 异步流程要暴露处理中状态、事件追踪和最终查询,不能把短暂不一致隐藏成错误或成功。
  4. 通过 Outbox、重试、对账、版本和补偿保证最终收敛。

题目解析

最终一致性需要明确收敛条件:没有新写入、消息能够持续重试、冲突可以解决且依赖系统最终可用。若消息永久丢失或业务冲突无人处理,就不能笼统地说“最终会一致”。

搜索索引、统计、推荐和通知通常可以接受短暂延迟,但要定义最大陈旧时间和用户可见状态。余额、库存、权限和支付结果则需要权威同步写入或明确的处理中状态。

Outbox、重试、版本、对账和补偿共同构成收敛机制。用户界面应区分已完成、处理中和失败,不能把尚未确认的结果伪装成成功。

常见误区

  • 误区:所有业务都异步化。改正:按错误代价和用户承诺选择同步确认、异步受理或混合流程。
  • 误区:没有定义最大延迟。改正:为可接受的不一致定义时间窗口、告警和超时后的用户行为。
  • 误区:发生永久失败仍声称最终一致。改正:把死信、人工处理和对账纳入收敛路径,并向用户暴露失败状态。

作者信息