本地事务流程
在深入分布式事务之前,先回顾一下本地事务。

从图中可以看出,本地事务由资源管理器(如 DBMS)在本地进行管理。
本地事务的优缺点
本地事务有其优势,也存在局限性。
优点: 支持严格的 ACID 属性。 可靠性高,实现效率高(仅限本地操作)。 只需在资源管理器(RM)中操作事务。 编程模型简单。
缺点: 缺乏分布式事务处理能力。 数据隔离的最小单元由 RM 决定,开发人员无法控制(例如只能到记录级别)。
ACID 属性
事务的核心在于 ACID 属性。

- A(Atomic)原子性:构成事务的所有操作要么全部完成,要么全部不执行,不存在部分成功的情况。
- C(Consistency)一致性:事务执行前后,数据库的一致性约束未被破坏。例如转账前张三转出 100 元,李四未收到,即破坏了数据正确状态。
- I(Isolation)隔离性:并发事务互不干扰,一个事务看不到其他事务的中间状态。通过配置隔离级别可避免脏读、不可重复读等问题。
- D(Durability)持久性:事务完成后,更改被持久化且不可回滚。
分布式事务
随着业务发展,系统从单体演变为微服务,数据库也从单机转向分布式。应用拆分为独立部署的服务后,需远程协作才能完成事务。
初始阶段,系统通常是单体架构,不同模块组织在同一项目中。

后续扩展为微服务架构,项目拆分为独立部署的微服务,每个服务拥有自己的数据库。

在程序中,我们常这样写代码:
@Transactional(rollbackFor = Exception.class)
public void submitOrder() {
orderDao.update(); // 更新订单信息
accountService.update(); // 修改资金账户金额
pointService.update();
accountingService.insert();
merchantNotifyService.notify();
}









