Seata:分布式事务解决方案
文章目录
第一章:什么是分布式事务?
想象你在淘宝下单买了一台空调,这个动作背后涉及三个系统:
- 库存服务:扣减一台库存。
- 订单服务:生成订单记录。
- 支付服务:从你的账户扣款。
如果库存扣减成功,但支付失败,这时候该怎么办?分布式事务就像一场“多方会议”,必须保证所有参与者要么全部同意(提交),要么全部取消(回滚)。
Seata(Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的分布式事务解决方案,专门解决这类跨服务的“数据一致性”难题。
第二章:Seata 的 AT 模式——像餐厅点餐流程
场景类比:
你去餐厅点了份牛排,服务员会先确认厨房有食材(预留资源),然后让你签字确认(提交事务)。如果厨房突然没牛排了,服务员会取消订单(回滚事务)。
AT 模式原理:
- 一阶段:执行本地事务,并生成回滚日志(像服务员记下你的订单)。
- 二阶段:根据全局事务状态,提交或回滚所有分支事务(像后厨开始做菜或取消订单)。
代码示例:用 AT 模式实现下单
// 订单服务:创建订单
@GlobalTransactional // 声明全局事务(像服务员说“这桌我来负责”)
public void createOrder(Order order) {
// 1. 扣减库存(调用库存服务)
inventoryService.deduct(order.getProductId());
// 2. 生成订单(本地事务)
orderDao.insert(order)