阿里巴巴Seata

微服务系统中产生分布式事务的原因是因为不同的项目有自己独立的数据源,每个数据源之间互不影响,从而无法保证数据的一致性。举个例子,假设你去面试,面试过程中面试官觉得你很不错,发给了你Offer让你明天去上班,你也爽快的答应了。但是突然晚上你被车撞了,明天去不了了,你只需要打个电话和面试官说下就好了。但是系统不是人,把上面的场景换成系统就是B系统向数据库中插入了(Offer)记录,而A系统出现了异常,但是A,B不共用同一个数据源,所以A之前插入的(答应)这条数据会回滚,而B系统不会回滚,这就导致了数据的不一致性问题,而Seata你可以理解为电话的作用。

Seata的安装

  1. 首先你需要去官网下载Seata,默认你已下载完成。

  2. 下载完成后进入seata-server文件夹微服务架构师的成长之路(一)

  3. 进入conf目录,新建seata数据库并且运行db_store文件微服务架构师的成长之路(一)微服务架构师的成长之路(一)
    4.在你需要保持一致性的两个数据库中分别运行dbundo_log文件(注意:两个库都要有undo_log)微服务架构师的成长之路(一)

  4. 编辑file.conf文件,修改为数据库存储seata信息,并修改下面的数据库连接属性并保存;微服务架构师的成长之路(一)

  5. 编辑registry.conf文件,修改下面的注册中心地址,将Seata注册上去,这里使用的是nacos;微服务架构师的成长之路(一)

  6. 显示如下的两张图就说明seata启动成功啦;微服务架构师的成长之路(一)
    微服务架构师的成长之路(一)

SpringBoot整合Seata

  1. 首先需要在你的两个需要保持一致性的SpringBoot项目中都引入之前配置好的两个配置文件微服务架构师的成长之路(一)

  2. 在两个项目的配置文件中配置如下信息(注:如果你没用到配置中心,红线部分可以去掉) 微服务架构师的成长之路(一)
    3.两个项目中需要引入Seata的依赖(注:SpringBoot依赖需要与Seata版本相同,否则会报错)微服务架构师的成长之路(一)
    4.两个项目的启动类上需要加上这个注解信息让Seata代理Mysql数据源微服务架构师的成长之路(一)
    5.只需要在先执行的方法上写上该直接就OK啦,用起来是不是很简单呢微服务架构师的成长之路(一)

Seata解决分布式事务的原理

首先你必须了解Seata中的三个概念
TC-交易协调员(事务协调者)
维护全局和分支事务的状态,驱动全局提交或回滚。

TM-交易管理器(发起方)
定义全局事务的范围:开始全局事务,提交或回滚全局事务。

RM-资源经理(参与方)
管理分支事务正在处理的资源,与TC对话以注册分支事务并报告分支事务的状态,并推动分支事务的提交或回滚。

1.发起方在发起全局事务的时候,会向事务协调者申请一个全局的XID,你可以理解为全局事务ID。
2.发起方调用参与方的时候,会重写Feign客户端的请求头,将之前申请好的XID传给参与方。
3.参与方执行完事务后,会直接提交入库,但是也会向我们之前配置的undo_log表中插入提交信息。
4.发起方执行完自己的业务后,如果没报错,那么事务协调者会根据XID删除参与方undo_log表中的记录,全局事务执行成功;如果发起方报错,则事务协调者会根据之前XID找到之前插入的undo_log表中的记录逆向回滚Sql语句,从而保持发起方和参与方的数据最终一致性(注意:最终一致性!!!
)。

Seata总结

通过上面的学习,相信大家对Seata已经基本掌握。Seata解决分布式事务的核心思想就是采用最终一致性的思想(即在分布式系统中,数据可以短暂没有同步,但是最终一定要一致,毕竟走的网络传输,不可能实时刷新数据),通过undo_log表回滚指定XID的数据。总的来说,Seata还是一个非常不错的分布式事务解决框架,未来前景也很大。我们一起进步!

相关文章:

  • 2021-05-25
  • 2021-12-13
  • 2022-01-07
  • 2021-10-03
  • 2021-11-30
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-15
  • 2021-11-30
相关资源
相似解决方案