seata 事务方案


分布式事务三--AT模式 - zpk-aaron - 博客园

RocketMQ 消息中间件解决分布式事务。
消息中间件需要保证消息可靠性,消息幂等性,唯一性。处理失败需要主动些补偿机制,容易出错。
本地消息表 ( 异步确保 )
本地消息表是国外的 ebay 搞出来的一套 方案。
基于 XA 的两阶段提交方案
XA 它包含两个部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如 Oracle DB2 这些商业数据库都实现了 XA 接口,而事务管理器作为全局的协调者,负责各个本地资源的提交和回滚 。两 阶段提交方案应用非常广泛,几乎所有商业 OLTP (On-Line Transaction Processing) 数据库都支持 XA 协议。但是两阶段提交方案开发复杂、锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题。
TCC 解决方案
TCC 方案在电商、金融领域落地较多。 TCC 方案其实是两阶段提交的一种改进。其将整个业务逻辑的每个分支显式的分成了 Try Confirm Cancel 三个操作。
seata  
1 AT
AT 模式下,用户只需关心自己的 “业务 SQL”AT 模式分为两个阶段:一阶段:执行用户 SQL 二阶段: Seata 框架自动生成
优点: AT 模式的一阶段、二阶段提交和回滚均由 Seata 框架自动生成,用户只需编写“业务 SQL” ,便能轻松接入分布式事务, AT 模式是一种对业务无任何侵入的分布式事务解决方案。
2 TCC
TCC 分为三个阶段: Try :做业务检查和资源预留, Confirm :确认提交, Cancel :业务执行错误需要回滚的状态下执行分支事务的业务取消,预留资源释放
优点: 相对于 AT 模式, TCC 模式对业务代码有一定的侵入性,但是 TCC 模式无 AT 模式的全局行锁, TCC 性能会比 AT 模式高很多。
3 Sage
Sage 是长事务解决方案,事务驱动,
优点: 一阶段提交本地数据库事务,无锁,高薪能,补偿服务即正向服务的 “反向”,高吞吐,参与者可异步执行,高吞吐
4 XA
XA 模式是  Seata  将会开源的另一种无侵入的分布式事务解决方案
优点: 无侵入,将快照数据和行锁等通过 XA 指令委托给了数据库来完成

Seata 分为两部分, seata -server seata -client
seata -server
seata -server 目前稳定版本最新版为 1.3.0 版本, 1.3.0 版本在运行过程中发现一些问题, seata 开发的小伙伴已经对部分进行修复,升级包为 1.4.0- SNAPSHOT
seata -client
Client 即为我们的业务服务,业务服务在启动的时候会主动连接 seata -server 服务器。在使用使用时,保证和 server 版本一致。
AT 模式
因为 AT 模式是一种 0 侵入式的,只需要一个注解即可解决问题,使用方便。
AT 模式的部署不仅需要搭建 seata -server 服务器,还需要在 seata -client 端设置数据源代理,并在业务数据库创建 undo_log 表记录数据回滚信息。
seata 官网,也有相关部署以及所需要的 sql
Seata 官网: seata.io
seata -client 集成首先在 pom 中引入 jar
<!-- seata - ->
< dependency >
    <
groupId > com.alibaba.cloud </ groupId >
    <
artifactId >spring-cloud- alibaba - seata </ artifactId >
    <
exclusions >
        <
exclusion >
            <
groupId > io.seata </ groupId >
            <
artifactId > seata -spring-boot-starter</ artifactId >
        </
exclusion >
    </
exclusions >
    <
version >2.2.0.RELEASE</ version >
</
dependency >
< dependency >
    <
groupId > io.seata </ groupId >
    <
artifactId > seata -spring-boot-starter</ artifactId >
    <
version >1.3.0</ version >
</
dependency >
建议仅 引入 seata-all ,需要自行实现的东西太多。
spring - cloud -alibaba- seata 2.1.0 内嵌 seata-all 0.7.1
2.1.1 内嵌 seata-all 0.9.0 2. 2 . 0 seata-all 1 . 1 .0
建议 排除掉, 引入 seata -spring-boot-starter
spring-cloud- alibaba - seata 中会引入 spring-cloud-starter- openfeign 此实现 XID 在服务间传递。
Seata 代理数据源
自动装配的相关设置 —— 均已 1.1.0 版本为 开启 与关闭
对于使用 seata -spring-boot-starter 的方式,默认已开启数据源自动代理 , 如需关闭, 请配置 seata.enableAutoDataSourceProxy =false ,该项配置默认为 true 。如 需切换代理实现方式,请通过 seata.useJdkProxy =false 进行配置 , 默认为 false ,采用 CGLIB 作为数据源自动代理的实现方式。
对于使用 seata -all 的方式,请使用 @ EnableAutoDataSourceProxy 来显式开启数据源自动代理功能。如有需要,可通过该注解的 useJdkProxy 属性进行代理实现 方式的 切换。默认为 false, 采用 CGLIB 作为数据源自动代理的实现方式。
其他版本设置
1.0.0: client.support.spring.datasource.autoproxy =true
0.9.0:
support.spring.datasource.autoproxy =true
Seata 注解使用
@ GlobalTransactional 例如:
TCC 分为三个阶段: Try :做业务检查和资源预留, Confirm :确认提交, Cancel :业务执行错误需要回滚的状态下执行分支事务的业务取消,预留资源释放
Tcc 模式也需要 通过 GlobalTransactional 注解开启 事务,并 调用各个服务提供方的 try() 方法。
服务提供方
TwoPhaseBusinessAction 注解标记这是个 TCC 接口,同时指定 commitMethod rollbackMethod 的名称
BusinessActionContext TCC 事务中的上下文对象
BusinessActionContextParameter 注解标记的参数会在上下文中传播,即能通过 BusinessActionContext 对象在 commit 方法及 cancle 方法中取到该参数值

 

 

Saga 模式
Saga 模式是 SEATA 提供的长事务解决方案,在 Saga 模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现
XA 模式
XA 模式是  Seata  将会开源的另一种无侵入的分布式事务解决 方案。
优点: 无侵入,将 快照数据和行锁等通过 XA 指令委托给了数据库来 完成。
缺点: 性能 低。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值