springCloudAlibaba之分布式事务组件---seata

Seata

  • Sea学习
    • 分布式事务
    • Seata
      • 二阶段提交协议
      • AT模式
      • TCC模式
    • Seata服务搭建

Sea学习

事务:事务是访问数据库并更新数据库中各项数据的一个程序执行单元。在关系数据库中,一个事务由一组或多组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。例如更新商品的接口,这就是一个事务,事务是对程序而言的。

  • 原子性:事务是一个不可分割的工作单元,事务中包括的诸多操作要么都做要么都不做。
  • 一致性:保持数据的一致
  • 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的并发执行的各个事务之间不能互相干扰。隔离性又分为四个级别,来保证事务之间的隔离性:读未提交、读已提交、可重复读、串行化(事务串行执行,不会产生并发问题)
  • 持久性:一个事务执行并提交后,就持久到数据库
    本地事务:大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务。本地事务的ACID特性由数据库直接支持。

分布式事务

两种分布式事务场景:1、同一服务不同数据库;2、同一数据库不同服务;此时都会产生分布式事务的问题。此时用本地数据库事务是无法支持分布式事务的。此时用Seata处理分布式事务问题
在这里插入图片描述

Seata

在这里插入图片描述

seata的三大角色
在seata的架构中,一共有三个角色:

  • TC:事务协调者
  • TM:事务管理器
  • RM:资源管理器
    管理分支事务处理的资源,与TC交谈以注册分支事务的状态,并驱动分支事务提交或回滚。其中,TC为单独部署的server服务端,TM和RM为嵌入到应用中的client客户端。

二阶段提交协议

常见的分布式事务解决方案:

  • seata阿里分布式事务框架
  • 消息队列
  • saga
  • XA
    他们都有一个共同点,都是遵循二阶段协议(2PC)。两阶段是指完成整个分布式事务,划分成两个步骤完成。
  • 1、准备阶段
  • 在这个阶段,事务的协调者会向所有涉及的数据库或者资源管理器发送准备请求。
  • 每个数据库或者资源管理器收到准备请求后,会执行相应的操作,并且记录准备状态。如果准备成功,就向协调者发送准备就绪的ask。
  • 协调者等待所有参与者都发送准备就绪的信号,如果有任何一个参与者未能准备就绪或者出现了错误,协调者将会发送回滚请求给所有参与者。
  • 提交阶段
  • 如果所有参与者都准备就绪,协调者会向他们发送提交请求。
  • 参与者接收到提交请求后,会正式提交事务,并且释放相关资源。
  • 如果有任何一个参与者未能接收到请求或者出现了错误,协调者将会发送回滚请求给所有参与者。
  • 图例
  • 第一阶段
    在这里插入图片描述
    在这里插入图片描述
  • 第二阶段
    在这里插入图片描述

在这里插入图片描述

就像是军训一样,准备阶段:教官让所有同学都立正站好,所有同学都得对齐站好,谁没有站好,全部同学都得重新立正,直到所有同学都准备好,然后,训练阶段:同学们都站一排齐步走,只要有一个没走齐的就重新开始;(👴已经尽力去解释了,我相信即使没有学过计算机的应该也知道这玩意是什么了,嘿嘿);看着是不是毫无压力,

AT模式

  • 一阶段
    befrore image:将要更新的数据查询出来。afer image:事务执行后,将执行完的数据查出来
    在这里插入图片描述
    在这里插入图片描述

  • 二阶段

  • 二阶段提交
    因为一阶段已经完成了提交动作,所以二阶段如果没有异常,则直接删除before image、after image、行锁
    在这里插入图片描述

  • 二阶段回滚
    根据before image拿到逆向sql回滚数据,回滚完成后删除befor image、after image、行锁
    在这里插入图片描述

TCC模式

在这里插入图片描述

Seata服务搭建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW轴承试验机测控系统

开发了一种基于LabVIEW软件开发的大功率风电机组增速箱轴承试验机测控系统。系统主要用于模拟实际工况,进行轴承可靠性分析,以优化风电机组的性能和可靠性。通过高度自动化的测控系统,实现了对试验机的精确控制,包括速度、振动、温…

Unity 笔试题分享

1. 请回答以下代码片段执行时是否会产生堆内存分配 a. void SetChar(string s){s.Replace(b, d);}b. void Update(Transform t){t.localPosition new Vector3(0, 0, 0);}c、 int Sum(List<int> l){int total 0;foreach (int i in l){total i;} return total;}d…

金融数据中心能力建设指引

金融数据中心能力建设指引 金融数据中心能力建设指引旨在通过高标准的基础设施建设、完善的数据管理、强大的信息安全防护和业务连续性规划&#xff0c;确保数据中心具备高效、安全、可靠的运行能力&#xff0c;支持金融业务的稳定发展。该指引强调技术创新、标准化管理、人才…

大数据湖一体化运营管理建设方案(49页PPT)

方案介绍&#xff1a; 本大数据湖一体化运营管理建设方案通过构建统一存储、高效处理、智能分析和安全管控的大数据湖平台&#xff0c;实现了企业数据的集中管理、快速处理和智能分析。该方案具有可扩展性、高性能、智能化、安全性和易用性等特点&#xff0c;能够为企业数字化…

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程

简介&#xff1a; 最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 测试环境&#xff1a;NginxPHP7.0MySQL5.6 ![CYA]CPZMY8NK8YADA.png](https://img-blog.csdnimg.cn/img_convert/1e38b378e1aa6e834f56ec9a83df064c.png)

Django学习(1)Model

模型 1、Django操作指令 2、Django模型字段类型 3、Django模型字段类型属性 4、Django模型Meta属性

计算机组成原理-常见计算题含IEE754

一、补码加减运算 二、溢出判断 采用一位符号位 采用双符号位 三、定点数的移位运算 算术右移 算数左移 反码的算术移位 补码的算术移位 四、浮点数的表示 一个右规的例子 五、IEEE754 移码

读AI未来进行式笔记09职业再造

1. 职业再造 1.1. 着AI向越来越多的行业稳步进军&#xff0c;越来越多的人逐渐被AI技术取代&#xff0c;那么人类接下来所能从事的工作是什么&#xff1f; 1.2. 缺乏专业指导&#xff0c;许多人被发展迅猛的AI替代&#xff0c;连续挫败导致自杀率居高不下 1.2.1. 除了经济收…

2024年江苏三支一扶公告已出,招440人!

本次江苏省将招募440名高校毕业生&#xff0c;安排到乡镇&#xff08;街道&#xff09;从事支教、支农、支医、帮扶乡村振兴、水利、就业和社会保障服务工作&#xff08;以下简称“三支一扶”计划&#xff09;&#xff0c;服务期限为2年。 招募程序 招募工作按照个人报名、资格…

数据结构之线性表(3)

数据结构之线性表&#xff08;3&#xff09; 上文我们了解了线性表的静动态存储的相关操作&#xff0c;此篇我们对线性表中链表的相关操作探讨。 在进行链表的相关操作时&#xff0c;我们先来理解单链表是什么&#xff1f; 1.链表的概念及结构 链表是一种物理存储结构上非连…

【UCOS-III】中断管理

引言&#xff1a;中断是学习 C/OS-III 的过程中一个重要的部分&#xff0c;任务切换、系统时钟节拍等等&#xff0c;都是利用 中断来完成的&#xff0c;并且&#xff0c;既然是 RTOS&#xff0c;那么对中断的响应也应该是十分迅速的。C/OS-III 有一 套中断管理的方法&#xff0…

echarts组件x轴坐标显示不全解决方法

1.旋转: 修改前: option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun,Mon, Tue, Wed, Thu, Fri, Sat, Sun,Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130,120, 200, 150, 80, 70, 1…

每日一练——删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; int removeDuplicates(int* nums, int numsSize) {int i 0;int j 0;while(numsSize--){if(nums[i] ! nums[j]){i;nums[i] nums[j];j;}else j;}return i 1; }

Golang | Leetcode Golang题解之第142题环形链表II

题目&#xff1a; 题解&#xff1a; func detectCycle(head *ListNode) *ListNode {slow, fast : head, headfor fast ! nil {slow slow.Nextif fast.Next nil {return nil}fast fast.Next.Nextif fast slow {p : headfor p ! slow {p p.Nextslow slow.Next}return p}}r…

AI数据分析:根据Excel表格数据绘制柱形图

工作任务&#xff1a;将Excel文件中2013年至2019年间线上图书的销售额&#xff0c;以条形图的形式呈现&#xff0c;每个条形的高度代表相应年份的销售额&#xff0c;同时在每个条形上方标注具体的销售额数值 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#…

eNSP学习——RIP的路由引入

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建公司B的RIP网络 3、优化公司B的 RIP网络 4、连接公司A与公司B的网络 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版_ensp…

[Leetcode]同时进行正向和逆向迭代匹配解决回文链表问题

题目链接:234. 回文链表 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 题解&#xff1a; currentNode 指针是先到尾节点&#xff0c;由于递归的特性再从后往前进行比较。frontPointer 是递归函数外的指针。若 currentNode.val ! frontPointer.val 则返回 false。…

876. 链表的中间结点-链表

876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 快慢指针 class Solution { public:ListNode* middleNode(ListNode* head) {ListNode* slow head;ListNode* fast head;while(fast ! nullptr && fast->next ! nullptr){slow slow->next;fast …

用MATLAB绘制地球围绕太远运动而月球围绕地球运动

绘制 MATLAB代码: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 初始化参数 num_frames 1000; % 动画帧数 G200; dt 0.01; % 时间步长% 设置太阳、地球和月球的初始位置和半径 sun_position [0, 0]; earth_radius …

Leetcode881. 救生艇

Every day a Leetcode 题目来源&#xff1a;881. 救生艇 解法1&#xff1a;贪心 排序 双指针 排序后&#xff0c;使用双指针分别指向数组首尾&#xff0c;每次取两个指针指向的元素之和与 limit 比较&#xff0c;如果小于等于 limit&#xff0c;则两个指针同时向中间移动一…