学习分布式事务文章:分布式事务上;分布式事务下;分布式系列文章
阅读笔记:
事务定义:事务是指在数据库在执行过程中的一个逻辑单位,由有限个操作序列构成。
事务拥有的四个特性(ACID):原子性(Atomicity),一致性(Consistency),隔离性(lsolation),持久性(Durability)
本地事务:单一的服务操作基于单一的数据库资源访问的事务,我们叫本地事务。
分布式事务的背景:在分布式应用环境中,越来越多的应用要求对多个数据库资源,多个服务的访问都能纳入到同一个事物中,分布式事务应运而生。
原子性: XA 协议使用2PC(两端提交),两端提交是为了保证分布式事务的原子性。
准备阶段:TM 向每个 RM 发送准备消息。如果 RM 的本地事务操作执行成功,则返回成功;如果 RM 的本地事务操作执行失败,则返回失败。
提交阶段:如果 TM 收到了所有 RM 回复的成功消息,则向每个 RM 发送提交消息;否则发送回滚消息;RM 根据 TM 的指令执行提交或者回滚本地事务操作,释放所有事务处理过程中使用的锁资源。
一致性:一致性有两层语义,一层是确保事务执行结束后,数据库从一个一致状态转变为另一个一致状态。另一层语义是事务执行过程中的中间状态不能被观察到。
XA模型流程
- 应用程序(AP,Application)向 TM 申请开始一个全局事务。
- 针对要操作的 RM,AP 会先向 TM 注册(TM 负责记录 AP 操作过哪些 RM,即分支事务),TM 通过 XA 接口函数通知相应 RM 开启分布式事务的子事务,接着 AP 就可以对该 RM 管理的资源进行操作。
- 当 AP 对所有 RM 操作完毕后,AP 根据执行情况通知 TM 提交或回滚该全局事务,TM 通过 XA 接口函数通知各 RM 完成操作。TM 会先要求各个 RM 做预提交,所有 RM 返回成功后,再要求各 RM 做正式提交,XA 协议要求,一旦 RM 预提交成功,则后续的正式提交也必须能成功;如果任意一个 RM 预提交失败,则 TM 通知各 RM 回滚。
- 所有 RM 提交或回滚完成后,全局事务结束。
TCC 模型
TCC(Try-Confirm-Cancel)分布式事务模型相对于 XA 等传统模型,其特征在于它不依赖资源管理器(RM)对分布式事务的支持,而是通过对业务逻辑的分解来实现分布式事务。