分布式事务:从ACID到BASE的演进

引子:一次支付失败引发的数据不一致 2021年某电商平台出现严重Bug:用户支付成功,但订单状态未更新,导致重复支付。 故障流程: 1. 订单服务:创建订单(成功) 2. 库存服务:扣减库存(成功) 3. 支付服务:调用支付(成功) 4. 订单服务:更新订单状态(失败,网络超时) 结果:支付成功,但订单状态仍为"未支付",用户再次支付 核心问题:微服务架构下,如何保证多个服务的数据一致性? 一、事务的本质:ACID四大特性 1.1 本地事务(单体架构) ACID特性: 原子性(Atomicity):要么都成功,要么都失败 一致性(Consistency):数据始终处于一致状态 隔离性(Isolation):并发事务互不干扰 持久性(Durability):提交后永久保存 示例: @Transactional public void createOrder(OrderRequest request) { // 1. 创建订单 Order order = new Order(); orderRepository.save(order); // 2. 扣减库存 Inventory inventory = inventoryRepository.findByProductId(request.getProductId()); inventory.setStock(inventory.getStock() - request.getQuantity()); inventoryRepository.save(inventory); // 3. 创建支付记录 Payment payment = new Payment(); paymentRepository.save(payment); // 如果任何一步失败,全部回滚 } 1.2 分布式事务的困境 微服务架构下: 订单服务 → Order_DB 库存服务 → Inventory_DB 支付服务 → Payment_DB 问题:三个独立的数据库,无法用本地事务保证一致性 二、CAP定理与BASE理论 2.1 CAP定理 CAP定理指出,分布式系统最多只能同时满足以下三项中的两项: ...

2025-11-03 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...