Seata解决分布式的方案
1AT模式 数据最终一致 AT模式使用起来更加简单,无业务侵入,性能更好
AT 模式是 Seata 创新的一种非侵入式的分布式事务解决方案,Seata 在内部做了对数据库操作的代理层,我们使用 Seata AT 模式时,实际上用的是 Seata 自带的数据源代理 DataSourceProxy,Seata 在这层代理中加入了很多逻辑,比如插入回滚 undo_log 日志,检查全局锁等。
2XA模式 通过保持数据库连接达到数据强一致性
在 Seata 定义的分布式事务框架内,利用事务资源(数据库、消息服务等)对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种 事务模式
与 Seata 支持的其它事务模式不同,XA 协议要求事务资源本身提供对规范和协议的支持,所以事务资源(如数据库)可以保障从任意视角对数据的访问有效隔离,满足全局数据一致性。此外的一些优势还包括:
- 业务无侵入:和 AT 一样,XA 模式将是业务无侵入的,不给应用设计和开发带来额外负担。
- 数据库的支持广泛:XA 协议被主流关系型数据库广泛支持,不需要额外的适配即可使用。
XA prepare 后,分支事务进入阻塞阶段,收到 XA commit 或 XA rollback 前必须阻塞等待。事务资源长时间得不到释放,锁定周期长,而且在应用层上面无法干预,性能差。
3 SAGA 模式 Saga 模式是 SEATA 提供的长事务解决方案,在 Saga 模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
-
一阶段提交本地事务,无锁,高性能
-
事件驱动架构,参与者可异步执行,高吞吐
-
补偿服务易于实现
-
不保证隔离性
4 TCC模式 TCC 模式是 Seata 支持的一种由业务方细粒度控制的侵入式分布式事务解决方案,是继 AT 模式后第二种支持的事务模式,最早由蚂蚁金服贡献。其分布式事务模型直接作用于服务层,不依赖底层数据库,可以灵活选择业务资源的锁定粒度,减少资源锁持有时间,可扩展性好,可以说是为独立部署的 SOA 服务而设计的。
TCC 完全不依赖底层数据库,能够实现跨数据库、跨应用资源管理,可以提供给业务方更细粒度的控制。
TCC 是一种侵入式的分布式事务解决方案,需要业务系统自行实现 Try,Confirm,Cancel 三个操作,对业务系统有着非常大的入侵性,设计相对复杂。
Seata的AT模式的执行流程
1 seata 的at 模式执行流程:
首先每个事务会被注册到tm上进行事务的管理,之后业务进行之后,rm事务资源管理器在执行完sql后会直接提交同时一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源
在数据库中的undolog中会有之前数据的快照,之后向tc事务协调者报告事务状态,在执行完后,
二阶段:
- 提交异步化,非常快速地完成。
- 回滚通过一阶段的回滚日志进行反向补偿。
tm会根据事务状态来决定是否回滚或全局的提交,提交就会去删除undolog中的快照,如果是回滚就会用undolog中的快照来进行回滚。
,
标签:事务,seata,数据库,XA,回滚,模式,相关,Seata From: https://www.cnblogs.com/atjx90/p/18462841