本文主要是介绍SpringCloudAlibaba Seata分布式事务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分布式事务
事务是数据库的概念,数据库事务(ACID:原子性、一致性、隔离性和持久性
);
分布式事务的产生,是由于数据库的拆分和分布式架构(微服务)带来的,在常规情况下,我们在一个进程中操作一个数据库,这属于本地事务
,如果在一个进程(java程序)中操作多个数据库,或者在多个进程中操作一个或多个数据库,就产生了分布式事务;
(1)数据库分库分表就产生了分布式事务;
(2)项目拆分服务化也产生了分布式事务;
Seata介绍
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务;
Seata为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案;
目前使用的流行度情况是:AT > TCC > Saga > XA;XA的流行度是我自己编的。。。
我们可以参看seata各公司使用列表:
https://github.com/seata/seata/issues/1246 大部分公司都采用的AT事务模式;
Seata已经在国内很多团队开始落地,其中不乏有大公司;
Github:https://github.com/seata/seata
官网:http://seata.io/
当前最新版本:1.3.0
Seata架构
在Seata的架构中,一共有三个角色:
- TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚;
- TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务;
- RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交互以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚;
其中TC为单独部署的 Server
服务端,TM和RM为嵌入到应用中的 Client 客户端;
在Seata中,一个分布式事务的生命周期如下:
-
TM请求TC开启一个全局事务,TC会生成一个XID作为该全局事务的编号,XID会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一起;
-
RM请求TC将本地事务注册为全局事务的分支事务,通过全局事务的XID进行关联;
-
TM请求TC告诉XID对应的全局事务是进行提交还是回滚;
-
TC驱动RM将XID对应的自己的本地事务进行提交还是回滚;
TC Server运行环境部署
我们先部署单机环境的 Seata TC Server,用于学习或测试,在生产环境中要部署集群环境;
因为TC需要进行全局事务和分支事务的记录,所以需要对应的存储,目前,TC有三种存储模式( store.mode ):
- file模式:适合单机模式,全局事务会话信息在内存中读写,并持久化本地文件 root.data,性能较高;
- db模式:适合集群模式,全局事务会话信息通过 db 共享,相对性能差点;
- redis模式:解决db存储的性能问题;
我们先采用file模式,最终我们部署单机TC Server如下图所示:
Seata运行环境部署
下载Seata:http://seata.io/zh-cn/blog/download.html
解压:tar -zxvf seata-server-1.3.0.tar.gz
切换cd seata
默认seata-server.sh脚本设置的jvm内存参数2G,我们再虚拟机里面做实验,可以改小一点;
在bin目录下启动:./seata-server.sh
默认配置下,Seata TC Server 启动在 8091 端口;
因为我们没有修改任何配置文件,默认情况seata使用的是file模式进行数据持久化,所以可以看到用于持久化的本地文件 root.data;
华为公司一直贯彻选拔制,因为人才不是靠培养,而是自我成长,我们要创造人才成长的土壤,就如“一杯咖啡吸收宇宙能量”。我们不要给高级专家担负太多管理人才的责任,不要搞“拉郎配”,要给他们自由度,他有多大能量就发挥多大能量。
任正非
这篇关于SpringCloudAlibaba Seata分布式事务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!