什么是事务?

事务Transaction)是指数据库中的一组操作,这些操作要么全部成功执行,要么全部回滚,以保持数据的一致性和完整性。事务具有四个特性,通常称为 ACID 特性:

单体应用

下图是一个单体应用的 3 个模块,在同一个数据源上更新数据来完成一项业务,整个过程的数据一致性可以由数据库的本地事务来保证。

分布式应用

随着业务需求和架构的变化,单体应用进行了服务化拆分:原来的 3 个模块被拆分为 3 个独立的服务,每个服务使用独立的数据源。整个业务过程将由 3 个服务的调用来完成,如下图:

此时,每个服务自身的数据一致性仍有本地事务来保证,但是整个业务层面的全局数据一致性要如何保障呢?比如订单服务和账户服务,都有各自的数据库,必须保证操作的一致性,不能出现下单成功但是没记账的情况。这就是分布式系统所面临的分布式事务需求:

分布式系统需要一个解决方案来保障对所有节点操作的数据一致性,这些操作组成一个分布式事务,要么全部执行,要么全部不执行。