Seata中文参考文档: http://seata.io/zh-cn/docs/overview/what-is-seata.html
前言
继上一篇文章 分布式事务解决方案及理论基础入门 介绍了分布式解决方案相关概念之后,本篇给大家带来Spring Cloud Alibaba开源的一款分布式解决方案框架Seata,本篇为Seata组件的相关概念介绍,如果想使用Seata实战解决分布式事务难题还请看下一篇文章。
一、什么是微服务架构
“微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建"
二、分布式事务的产生
1. 单体架构
一个用户完整的下单过程,在单体应用中,只需要一个在一个项目中,一个数据库里,通过调用下下单接口,下单时调用扣减库存方法和扣减账户余额来完成一笔订单。
2. 分布式架构
单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用不同的数据源,在业务操作上需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证,分布式事务由此产生。
三、Seata的4种事务模式
1. Seata是什么
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,默认使用AT模式,为用户打造一站式的分布式解决方案。
2. AT 模式
前提
整体机制
通过2PC两阶段提交协议的演变:
写隔离
读隔离
1)、在数据库本地事务隔离级别 读已提交(Read Committed) 或以上的基础上,Seata(AT 模式)的默认全局隔离级别是 读未提交(Read Uncommitted)。
理解: 在全局事务提交之前,本地事务会先提交,这时候查询数据,对于本地库是Read Committed,对于全局来说是 Read Uncommitted。
2)、如果要求全局的读已提交,目前 Seata 的方式是通过 SELECT FOR UPDATE 语句的代理。
3. TCC模式
TCC不依赖 RM 对分布式事务的支持,而是通过对业务逻辑的分解来实现分布式事务。
所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。
4. SAGA模式
概述
Seata提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
适用场景:
优势:
缺点:
不保证隔离性
基于状态机引擎的 Saga 实现。
目前SEATA提供的Saga模式是基于状态机引擎来实现的,机制是:
示例状态图:
5. XA 模式
前提
整体机制
在 Seata 定义的分布式事务框架内,利用事务资源(数据库、消息服务等)对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种 事务模式。
执行阶段:
完成阶段:
关于XA模式的介绍这里先简单提一下,更详细的信息查阅 :http://seata.io/zh-cn/docs/dev/mode/xa-mode.html
四、Seata模型介绍
Seata的整个过程模型如下图所示:
上图中主要有三种角色:
术语介绍:
典型的分布式事务处理流程包括以下步骤:
流程图如下:
五、关于Seata架构
早在2019年,阿里开源了分布式事务框架Seata,原名叫Fescar,后来跟蚂蚁TCC方案整合后改名为Seata,截止目前2020年11月3日,Seata已经更新到v1.4.0版本了,虽然在之前的版本发布中,存在一些潜在的问题,但是通过开源团队快速修复问题,并且快速迭代发布新版本之下,目前相对较稳定。
同时相比与其它分布式事务框架,Seata架构的亮点主要有几个:
六、参考文档
Seata中文官方文档: http://seata.io/zh-cn/docs/overview/what-is-seata.html
Seata-Server下载地址: https://github.com/seata/seata/releases
分布式事务Demo: https://github.com/seata/seata-samples
Seata源码地址: https://github.com/seata/seataSeata中文参考文档: http://seata.io/zh-cn/docs/overview/what-is-seata.html
自定义镜像是您使用实例或快照创建的镜像,或是您从本地导入的镜像。通过对已经...
微服务器是一种新型服务器系统,它拥有比一般的刀片服务器更高的密度,同时能耗...
自己的 域名 过期了,想要第一时间抢注回来怎么办?不知道过期的域名什么时候拍...
前两天被人问到这样一个问题: 松哥,为什么我的 Spring Boot 项目打包成的 jar ...
如何选择海外 服务器租用 ,选择海外 服务器租用 应该注意什么?服务器可以说是整...
加密货币的概念对于许多人仍然是比较陌生的。而比特币、莱特币等加密货币的吸引...
随着越来越多的组织将容器化应用程序转移到生产环境中,Kubernetes已经成为在私...
调用StartInstances启动一台或多台处于已停止(Stopped)状态的ECS实例,接口调...
本文转载自微信公众号「Java大数据与数据仓库」,作者刘不二。转载本文请联系Jav...
这款编辑器打包了 Java 的功能,并提供了大量的插件来简化你的工作流程。 Java ...