一、什么是分布式事务
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。一个大的操作由 N 多的小的操作共同完成。而这些小的操作又分布在不同的服务上。针对于这些操作,要么全部成功执行,要么全部不执行。
二、为什么会有分布式事务
举个例子:
转账是最经典的分布式事务场景,假设用户 A 发起一笔跨行转账给用户 B,银行系统首先扣掉用户 A 的钱,然后增加用户 B 账户中的余额。如果其中某个步骤失败,此时就有可能会出现两种异常情况:
- 用户 A 的账户扣款成功,用户 B 账户余额增加失败。
- 用户 A 的账户扣款失败,用户 B 账户余额增加成功。
实际上,两种情况都是不允许发生的,此时就需要事务来保证转账操作的成功。
在单体应用中,只需要@Transactional就可以开启事务来保证整个操作的原子性。
但实际的应用架构中,不可能是单体的服务,如分布式微服务架构:
比如下单服务,扣库存服务等等,必须要保证不同服务状态结果的一致性
,于是就出现了分布式事务。
三、分布式理论
CAP定理
在一个分布式系统中,以下三点特性无法同时满足:
一致性(C):
在分布式系统中的所有数据备份,「在同一时刻是否拥有同样的值」。(等同于所有节点访问同一份最新的数据副本)
可用性(A):
在集群中一部分节点「故障」后,集群整体「是否还能响应」客户端的读写请求。(对数据更新具备高可用性)
分区容错性(P):
即使出现「单个组件无法可用,操作依然可以完成」。
具体地讲在分布式系统中,在任何数据库设计中,一个Web应用「至多只能同时支持上面的两个属性」。显然,任何横向扩展策略都要依赖于数据分区。因此,设计人员必须在一致性与可用性之间做出选择。
BASE 理论
分布式系统,往往追求的是可用性,它的重要程序比一致性要高,那么如何实现高可用性呢?
那就是 BASE 理论,它是用来对 CAP 定理进行进一步扩充的。BASE 理论指的是: