分布式事务:从“原子性“到“最终一致“

分布式事务:从"原子性"到"最终一致"

你去银行转账:

  • 你的账户 -100元
  • 对方账户 +100元

必须同时成功,或者同时失败,否则钱就不翼而飞了。

这就是事务的意义——要么全做,要么全不做。

什么是分布式事务?

1. 本地事务 vs 分布式事务

本地事务

单个数据库内的事务 BEGIN → 操作1 → 操作2 → COMMIT/ROLLBACK

分布式事务

跨多个服务/数据库的事务 服务A ──操作──▶ 数据库A │ └───────操作───────▶ 数据库B

2. 为什么复杂?

问题场景

用户下单流程: 1. 创建订单(订单服务 → 数据库A) 2. 扣减库存(库存服务 → 数据库B) 3. 扣减余额(账户服务 → 数据库C) 任何一个步骤失败,都需要回滚其他步骤!

挑战

  • 网络可能超时
  • 服务可能宕机
  • 部分成功怎么办?