本地事务(单机事务)四个原则:
原子性:事务中所有操作,要么全成功,要么全失败
一致性:保证数据的一致性
隔离性:对同一资源操作的事务不能同时发生
持久性:对数据库做的一切操作将永久保存,无论是否出现故障
CAP定理:
Consistency(一致性):对某个指定的客户端来说,读操作能返回最新的数据。如果读操作时,正在进行写操作,此时读操作会等待,当写操作完后,读操作再进行并返回最新的数据。
Availability(可用性):客户端的请求,服务端并会有响应,此动作不会关系数据有没有同步,所有客户端获得的数据可能不是最新的数据。
Partition tolerance(分区容错性):在分布式系统中,由于网络等不稳定因素,导致系统服务间的数据没有同步,此时会出现数据上的错误,而这种数据上出错误是可以容忍存在。不稳定因素解决后,服务间的数据最终会同步。
BASE理论(Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)):
基本可用:分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。如,电商网站交易付款出现问题了,商品依然可以正常浏览。
软状态:允许系统中存在中间状态,这个状态不影响系统可用性,如订单的"支付中"状态、不同节点数据副本同步延迟等。
最终一致:最终一致是指经过一段时间后,所有节点数据都将会达到一致。如订单的"支付中"状态,早晚会变为“支付成功”或者"支付失败",使订单状态与实际交易结果达成一致,但需要一定时间的延迟、等待。
分布式事务--解决思路:
方法一:AP模式:各子事务分别执行和提交,允许出现结果不一致,然后采用弥补措施恢复数据即可,实现**最终一致**。
方法二:CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成**强一致**。但事务等待过程中,处于**弱可用**状态。
分布式事务--解决方案:
2PC两阶段提交:
一阶段:
事务协调者通知每个事物参与者执行本地事务
本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁
二阶段:
事务协调者基于一阶段的报告来判断下一步操作
如果一阶段都成功,则通知所有事务参与者,提交事务
如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务
TCC事务补偿:
TCC 其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作
TCC事务补偿的三个阶段
Try:预留业务资源/数据效验-尝试检查当前操作是否可执行
Confirm:确认执行业务操作,实际提交数据,不做任何业务检查。try成功,confirm必定成功
Cancel:执行业务出错时,需要回滚数据的状态下执行的业务逻辑
Seata事务管理中有三个重要的角色
TC (Transaction Coordinator)事务协调者:
用来维护全局和分支事务的状态,协调全局事务提交或回滚。
TM (Transaction Manager)事务管理器:
定义全局事务的范围、开始全局事务、提交或回滚全局事务。
RM (Resource Manager)资源管理器:
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata提供的四种分布式事务解决方案
XA模式:
强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
TCC模式:
最终一致的分阶段事务模式,有业务侵入
AT模式:
最终一致的分阶段事务模式,无业务侵入,也是**Seata的默认模式**
SAGA模式:
长事务模式,有业务侵入