
1) 【一句话结论】通过分布式事务方案(如Saga模式)结合消息队列与幂等机制,确保生产订单、库存、销售订单在分布式系统中的数据一致性,并辅以实时监控与告警机制。
2) 【原理/概念讲解】数据一致性的核心是“业务逻辑的原子性”,即生产订单创建、库存扣减、销售订单生成这三个操作要么全部成功,要么全部失败。在分布式系统中,单机事务无法覆盖跨服务(生产、库存、销售系统)的操作,因此需分布式事务方案。类比银行转账:当A转100元给B时,需A扣款、B到账两个操作,必须保证要么都完成,要么都不完成,否则就是不一致。这里的生产订单、库存、销售订单类似三个“操作”,需跨服务协调。
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 两阶段提交(2PC) | 领导者(协调者)控制所有参与者(生产、库存、销售服务)的提交/回滚 | 强一致性,但阻塞风险高,性能低 | 对一致性要求极高,业务逻辑简单(如库存扣减后必须立即确认) | 领导者故障导致全系统阻塞;参与者故障需手动恢复 |
| Saga模式 | 分阶段执行,每个阶段独立提交,失败时通过补偿事务回滚 | 最终一致性,无阻塞,适合复杂业务 | 业务逻辑复杂(如生产订单、库存、销售订单涉及多个阶段,失败后需补偿) | 补偿逻辑复杂,需保证幂等性;阶段间依赖强 |
4) 【示例】(Saga模式伪代码)
# 生产订单服务
def create_production_order(order_id, quantity):
# 1. 创建生产订单
create_prod_order(order_id, quantity)
# 2. 发送库存扣减请求
send_to_inventory(order_id, quantity)
# 3. 等待库存确认
confirm = wait_for_inventory_confirm(order_id)
if confirm:
# 4. 创建销售订单
create_sale_order(order_id, quantity)
return "success"
else:
# 5. 补偿库存
send_to_inventory(order_id, quantity, action="add")
return "failed"
# 库存服务
def process_inventory_decrease(order_id, quantity):
if check_stock(order_id) >= quantity:
decrease_stock(order_id, quantity)
send_confirm(order_id)
return "success"
else:
return "failed"
def process_inventory_increase(order_id, quantity):
increase_stock(order_id, quantity)
return "success"
5) 【面试口播版答案】
“面试官您好,要保证生产订单-库存-销售订单的数据一致性,核心是通过分布式事务方案(比如Saga模式)结合消息队列和幂等机制。具体来说,生产订单创建后,先通过消息队列通知库存系统扣减对应库存,库存系统处理成功后返回确认,生产订单服务收到确认后再创建销售订单。如果库存扣减失败,生产订单服务会发送补偿消息让库存系统恢复库存。同时,我们通过监控平台实时跟踪每个环节的状态,比如库存扣减的成功率、补偿事务的执行情况,一旦发现异常会触发告警,确保数据一致性。”
6) 【追问清单】
7) 【常见坑/雷区】