Seata分布式事务原理

  • 1.初始Seata
  • 2.Seata 的架构
  • 3. 四种事务模式
    • 3.1 XA模式
    • 3.2 AT模式
    • 3.3 TCC模式
    • 3.4 SAGA模式
  • 4. 总结

1.初始Seata

Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

2.Seata 的架构

三个重要的角色:

TC (Transaction Coordinator):

  • 事务协调者: 维护全局和分支事务的状态,协调全局事务提交或回滚。

TM (Transaction Manager):

  • 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

RM (Resource Manager):

  • 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

3. 四种事务模式

XA模式: 强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
TCC模式: 最终一致的分阶段事务模式,有业务侵入
AT模式: 最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
SAGA模式: 长事务模式,有业务侵入

3.1 XA模式


RM一阶段的工作:

  1. 注册事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作:

1.检测各分支事务的执行状态
2.如果都成功,通知所有RM提交事务
3.如果有失败,通知所有RM回滚事务

RM接收TC指令,提交或回滚事务

XA模式的优点:

事务的强一致性,满足ACID原则。
常用数据库都支持,实现简单,并且没有代码侵入

缺点:

因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
依赖关系型数据库实现事务

3.2 AT模式

优点:

一阶段完成直接提交事务,释放数据库资源,性能比较好
利用全局锁实现读写隔离
没有代码侵入,框架自动完成回滚和提交

缺点:

两阶段之间属于软状态,属于最终一致
框架的快照功能会影响性能,但比XA模式要好很多

3.3 TCC模式

Try:资源的检测和预留;。
Confirm:完成资源操作业务,要求 Try 成功 Confirm 一定要能成功。
Cancel:预留资源释放,可以理解为try的反向操作。

TCC工作原理图:

优点:

一阶段完成直接提交事务,释放数据库资源,性能好
相比AT模型,无需生成快照,无需使用全局锁,性能最强
不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库

缺点:

有代码侵入,需要人为编写try, Confirm和Cancel接口,太麻烦
软状态,事务是最终一致
需要考虑Confirm和Cancel的失败情况,做好幂等处理

3.4 SAGA模式

Saga模式是 Seata 提供的长事务解决方案。
分为两个阶段:

一阶段:直接提交本地事务
二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚

优点:

事务参与者可以基于事件驱动实现异步调用,吞吐高
一阶段直接提交事务,无锁,性能好
不用编写TCC中的三个阶段,实现简单

缺点:

软状态持续时间不确定,时效性差
没有锁,没有事务隔离,会有脏写

4. 总结

Seata分布式事务原理相关推荐

  1. seata分布式事务原理_又见分布式事务之Seata

    前言 分布式微服务中事务问题,是一直困扰着大家的.之前老顾已经介绍过如何利用rocketmq的事务消息解决事务问题,今天老顾再来介绍另一个方案:提供小伙伴们另一个选择. 解决方案有哪些? 分布式事务方 ...

  2. Seata 分布式事务的使用和原理浅析

    Seata 分布式事务的精简使用教程和原理浅析 一.说明 二.Seata 简介 2.1.Seata 是什么? 2.2.Seata 的整体架构 2.2.1.主要角色 2.2.2.整体架构和工作流程图 2 ...

  3. Spring Cloud Alibaba 综合应用:Seata 分布式事务实战教程

    在前面的章节,我们分别讲解了 Spring Cloud Alibaba 中主要的组成部分,其中包括:注册中心与配置管理组件 Nacos.Ribbon 客户端负载均衡.OpenFeign 与 Dubbo ...

  4. SpringCloud分布式事务,版本二:添加 Seata 分布式事务版本

    基于 Seata 1.4.0 版本 首先贴出此项目地址:Seata 分布式事务版本 先了未添加事务项目再看此版本:未添加事务版本 此文章是基于上一篇的项目基础上添加的内容,所以务必先看上一篇 Seat ...

  5. 一文彻底说明分布式事务原理

    一文彻底说明分布式事务原理 文章目录 一文彻底说明分布式事务原理 前言 1. 单数据源事务 & 多数据源事务 2. 常见分布式事务解决方案 2.1. 分布式事务模型 2.2. 二将军问题和幂等 ...

  6. 分布式事务解决方案分布式事务原理

    分布式事务解决方案&分布式事务原理 0. 前言 1. 单数据源事务 & 多数据源事务 2. 常见分布式事务解决方案 2.0.什么是分布式事务 2.1. 分布式事务模型 2.2. 二将军 ...

  7. 全面剖析Seata 分布式事务 AT 与XA

    前言 昨天有小伙伴私信小编说想小编出一期Seata分布式事物XA与AT模式的解析,经过昨晚的熬夜加班整理,今天将为大家带来Seata 分布式事务 XA 与 AT 的全面剖析.文章分为:XA模式是什么? ...

  8. Seata分布式事务XA与AT全面解析

    Seata 分布式事务 XA与AT Seata 是一款开源的分布式事务解决方案,star高达17300+,社区活跃度极高,致力于在微服务架构下提供高性能和简单易用的分布式事务服务. 注:本期分享借鉴于 ...

  9. 分布式事务:分布式事务原理概述

    1.什么是分布式事务 分布式事务就是指事务的资源分别位于不同的分布式系统的不同节点之上的事务: 2.分布式事务产生的原因 2.1.数据库分库分表 在单库单表场景下,当业务数据量达到单库单表的极限时,就 ...

  10. 分布式事务:RocketMQ实现分布式事务原理

    之前讲过有关分布式事务2PC.3PC.TCC的理论知识,博客地址: 1.分布式事务(1)---2PC和3PC原理 2.分布式事务(2)---TCC原理 这篇讲有关RocketMQ实现分布式事务的理论知 ...

最新文章

  1. mysql query browswer_MySQL数据库新特性之存储过程入门教程
  2. 二维码检测哪家强?五大开源库测评比较
  3. DCIC 2021数据挖掘新赛题开放!
  4. Linux的shell编程
  5. git修改文件名大小写的方法。
  6. java加载机制_详解Java类加载机制
  7. C++使用using与typedef定义别名
  8. php两个数组递归排序,PHP数组递归排序实现方法示例
  9. 计算机语言语法语义,程序设计语言语义
  10. 数字信号处理——CFAR检测器设计(1)
  11. 2020中兴捧月傅里叶派记录
  12. 【011】Excel宏编程相关封装模块(新建文件、关闭文件、新增/删除工作薄)_004_#VBA
  13. 数学建模:线性规划—投资的收益和风险模型 (Python 求解)
  14. 2021 年职业院校技能大赛“网络安全”项目 江西省比赛任务书
  15. 来自阿里巴巴佛系Java程序员的指南,附项目源码
  16. 【小家Spring】注意BeanPostProcessor启动时对依赖Bean的“误伤”陷阱(is not eligible for getting processed by all...)
  17. 为什么upupoo显示服务器维护中,首先,电脑能正常上网,有的网站可以上传图片,但就是不能显示上传图片的功能按钮,网页打开都正常。...
  18. EFCore:关于DDD中值对象(Owns)无法更新数值
  19. Html help安装步骤,HTML Help
  20. C# 程序关闭托盘图标不会自动消失

热门文章

  1. 联想Yoga C930 NM-B741 EYG70 Ariel-SVT笔记本点位图TVW
  2. c html中让图片反色,图片反色.html
  3. Ext4文件系统架构分析
  4. python字体和图片合成
  5. 账务实时交易系统设计思考
  6. Unity素材、动画设计类常用插件
  7. 锅炉正反平衡计算热效率
  8. 【经验分享】统计学算法大全及方法适用场景(必看)
  9. 基于java水果网店管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  10. Shiro 完整教程及样例demo