微服务数据管理与容错 — 软件工程选择题
题目
某订单流程依次调用库存服务预留库存、支付服务扣款,各服务独立管理数据库,且不使用分布式全局事务。支付请求可能已成功但响应超时,系统还需在服务故障恢复后避免重复扣款并最终处理订单。以下哪种方案最合适?
A. 各服务共享同一数据库,调用失败时由订单服务直接回滚所有表
B. 使用 Saga 管理本地事务与补偿;支付以订单号作幂等键,并通过事务性发件箱可靠发布事件
C. 超时即无限次重发支付请求,不记录请求状态,待服务恢复后再核对
D. 将库存与支付数据复制到订单数据库,由订单服务定期覆盖各服务数据