标准答案
- 跨库强一致事务需要协调者、参与者、超时与恢复协议,任何网络或节点故障都可能放大等待和不可用。
- 先检查业务是否真的需要多个库在同一瞬间提交,许多流程只需要状态可追踪、最终收敛和可补偿。
- 常见方案是在本地事务中写业务数据和外发事件,再可靠发布给下游,消费者通过幂等记录处理重复。
- 状态机应区分已受理、处理中、成功、失败和待补偿,避免把异步过程伪装成同步成功。
- 对无法补偿的资金、合规或库存边界,应重新划分数据所有权或把关键操作收敛到同一事务资源。
题目解析
两阶段提交在理论上能提供强协调,但实际系统还要面对锁住的资源、协调者故障、参与方超时和运维诊断。把它作为默认方案会让每个服务依赖其他服务的可用性。
最终一致性不是“以后再说”。它要求事件有唯一标识、投递可重试、消费者幂等、失败可观测、补偿有业务语义,并能对账发现遗漏。
常见误区
- 为了避免设计补偿,直接用跨库事务把外部 RPC、消息和数据库绑在一起。
- 宣称最终一致,却没有状态查询、重试、死信和人工处理路径。