分布式事务 Seata 框架的 AT 模式
大纲
分布式事务
seata 架构
1.分布式事务
在分布式系统架构中,复杂的业务需要跨库操作,要保证全局的事务一致性问题就得需要解决分布式事务问题。
1.1 XA 规范
XA 规范中,规定了三种角色:AP 应用程序、RM 资源管理器(数据库)、TM 事务管理器。XA 规范定义了 RM-TM 的通信接口。
1.2 2PC 两阶段提交
2PC 和 XA 规范没有必然联系,但是 2PC 模式是对 XA 规范的一种抽象实现和优化。2PC 一共有 2 个阶段:预提交和 commit。
2PC 存在几个严重的问题:
1.3 3PC 三阶段提交
3PC 是 2PC 的改进版本,但是没有本质区别,和 2PC 不同的是:
1.4 TCC
Try-Confirm-Cancel,本质也是业务服务化的两阶段提交协议,TCC 一共有 3 个步骤,第一阶段需要由应用程序来进行对资源的预留,当所有参与者的 try 接口都成功了,那么事务管理器就会提交事务进行 confirm,否则进行 cancel 回滚资源释放。TCC 的 try 阶段一般需要将资源进行一个前置快照将事务数据的改变记录下来,后续在提交或者回滚的时候基于这个记录进行一致性对齐操作。
1.5 柔性事务
柔性事务指的是服务基本可用、软状态/中间态、最终一致;核心思想就是分布式环境下无法保证强一致性,而是结合自身的业务场景做一些妥协。常见的柔性事务解决方案有:最大努力通知、补偿、最终一致性/异步确保、两阶段提交式。
C/C++Linux服务器开发高级架构师/C++后台开发架构师免费学习地址
另外还整理一些 C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以自行添加:Q群:720209036 点击加入~ 群文件共享
2.Seata
Seata 是一个阿里开源的分布式事务解决框架。它支持 AT、TCC、Saga、XA 多种模式。Seata 的组织架构中有三个角色:
TC(Transaction Coordinator)事务协调器:维护全局的事务和分支事务的信息,控制全局事务的提交或者回滚,TC 是需要独立部署的一个服务,而 TM 和 RM 是一个 client 客户端依赖到项目里。
TM(Transaction Manager)事务管理器:全局事务的开启和边界的定义。
RM(Resource Manager)资源管理器:对本地分支事务的管理,负责和 TC 交互和报告事务状态,执行具体的提交或者回滚
3.Seata AT 模式(主流)
Seata 支持多种分布式事务模式,官方主推的是 AT 模式,AT 模式是一种无侵入式的、类似于自动化的隐式 TCC 模式。AT 模式一共分为 2 个阶段:
业务数据和 undoLog 记录在同一个事务中并提交,随后释放本地锁和连接资源。
如果需要提交,则异步提交。如果需要回滚,则本地执行 undoLog 进行反向补偿。
3.1 AT 模式的优点
一阶段本地事务 Commit 之前需要拿到全局事务锁
;如果没有拿到全局锁则提交不了本地事务,尝试获取全局锁有时间次数限制,超过阈值则执行本地事务的回滚。
3.2 AT 模式的不足
参考资料
推荐一个零声教育 C/C++后台开发的免费公开课程,个人觉得老师讲得不错,分享给大家:C/C++后台开发高级架构师,内容包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
评论