seata学习

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

一:AT

AT 模式是一种无侵入的分布式事务解决方案。在 AT 模式下,用户只需关注自己的“业务 SQL”,用户的 “业务 SQL” 作为一阶段,Seata 框架会自动生成事务的二阶段提交和回滚操作。
1)一阶段,各个分支向TC汇报执行情况
2)二阶段,TC根据汇报情况,决定执行成功还是回滚,然后通知各个RM执行相应的操作

大概过了下源码,总结下AT的流程

  1. springboot启动时,初始化TMClient(负责一阶段)和RMClient(负载二阶段)和服务器通信
  2. 在拦截器中看调用的controller方法是否有GlobalTransactional注解,如果有就请求TM生成一个xid,然后放到一个threadlocal的对象中
  3. 在本地每次执行sql的过程中,如果发现有xid,则向TM报告分支信息,并把sql的前镜像和后镜像插入本地undo表中,提交本地数据
  4. 调用其他的服务时,如果是http调用,则会吧xid放到http的header中发送过去,其他服务在拦截器中获取并设置到threadlocal对象中,下面操作数据的流程,和3一样了
  5. 如果其中有某个分支执行失败,则TM通知各个RM执行回滚操作,RM通过undo来对比数据是否有脏数据,如果没有就执行rollback,如果有则会执行失败,需要人工干预
  6. 如果所有分支成功,则TM通知各个RM执行commit操作,由于sql已经提交到库,所以基本就是删除本地的undo
  7. 如果controller方法抛出异常,也会执行rollback

二:TCC

AT 模式基于 支持本地 ACID 事务 的 关系型数据库:
一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。

相应的,TCC 模式,不依赖于底层数据资源的事务支持:
一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
二阶段 commit 行为:调用 自定义 的 commit 逻辑。
二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。

三:SAGA

Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
适用场景:

  • 业务流程长、业务流程多
  • 参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口

优势:

  • 一阶段提交本地事务,无锁,高性能
  • 事件驱动架构,参与者可异步执行,高吞吐
  • 补偿服务易于实现

缺点:

  1. 不保证隔离性(应对方案见后面文档)

四:和springcloud 集成配置文件说明及注意点

  1. 每个微服务库中需要有undo表
  2. 每个微服务需要有自己的seata配置文件registry.conf,file.conf
  3. spring.cloud.alibaba.seata.tx-service-group=AAA(application.yml)和service.vgroupMapping.AAA(file.conf)要配置一直(AAA内容要配置一直),要不找不到TC,具体原因可以参考http://seata.io/zh-cn/docs/user/transaction-group.html
  4. registry.type=nacos说明client需要到nacos中找TC
  5. registry.type=file说明client需要通过file.conf中的default.grouplist = "192.168.100.18:8091"找TC

详细的配置项说明可以参考http://seata.io/zh-cn/docs/user/configurations.html

五:实战

可以参考官网http://seata.io/zh-cn/docs/overview/what-is-seata.html和demo:https://github.com/seata/seata,里面有seata和各个框架的集成的dmeo

参考网站:
https://github.com/seata/seata
http://seata.io/zh-cn/docs/overview/what-is-seata.html
https://www.jianshu.com/p/ea454a710908

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在微服务架构中,分布式事务是一个比较复杂的问题,阿里Seata是一个比较好的解决方案。下面是阿里Seata的配置流程: 1. 下载Seata Server 在阿里Seata的官方网站中下载Seata Server的压缩包。 2. 解压Seata Server 将Seata Server的压缩包解压到指定目录下。 3. 修改Seata Server配置文件 修改解压后的Seata Server目录下的conf目录下的file.conf文件。主要需要修改的是store.mode参数,将其修改为db,表示使用数据库存储分布式事务相关数据。 4. 创建数据库 根据Seata Server的配置文件中的store.db配置项,创建一个数据库,并将数据库连接信息配置到Seata Server的配置文件中。 5. 执行数据库脚本 在Seata Server的压缩包中,有一个db_store脚本文件,按照其中的说明,执行该脚本文件,完成数据库表的创建。 6. 启动Seata Server 在Seata Server的bin目录中执行seata-server.bat或seata-server.sh启动Seata Server。 7. 在微服务中配置Seata 在微服务中引入Seata的相关依赖,并在配置文件中配置Seata的相关参数,如:seata.tx-service-group、seata.service.vgroup-mapping和seata.service.grouplist。 8. 配置微服务数据库 在微服务的数据库中,为每个分布式事务增加一个undo_log表,用于记录分布式事务的操作日志。 以上就是阿里Seata的配置流程,需要注意的是,Seata的配置和使用需要一定的技术能力和经验,建议在实际使用前进行充分的学习和实践。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值