【分布式事务】Seata 简介

文章目录

  • 1.分布式事务解决方案之两阶段提交协议
  • 2.Seata 简介(两阶段提交协议的演变)
  • 3.Seata 术语

1.分布式事务解决方案之两阶段提交协议

2PC,即两阶段提交协议(Two-Phase Commit),是分布式系统中保证事务原子性的一种经典算法

2PC的设计目的是确保分布式事务能够在所有参与者上都成功提交,或者在所有参与者上都回滚,从而保证数据的一致性。这个协议分为两个阶段:

  • 准备阶段(Prepare Phase):在这个阶段,事务管理器会询问所有的事务参与者是否准备好提交事务。每个参与者都会尝试预执行事务,并保留必要的资源,然后向事务管理器报告是否可以提交。
  • 提交阶段(Commit Phase):如果所有参与者都报告可以提交,事务管理器就会发出正式提交的指令,参与者完成事务的真正提交。如果有任何一个参与者报告无法提交,事务管理器将指示所有参与者回滚事务。

举例:假设你在一个电商网站上购买了一件商品,这个操作涉及到了订单系统、库存系统 2 个不同的服务。这 2 个服务需要协同工作来共同完成这个购买操作。在这个场景中,如果任何一个服务出现问题,比如库存不足或者订单超时,那么整个购买操作就应该被回滚,否则就会出现数据不一致的问题。

  1. 准备阶段:事务管理器向所有参与者发送 Prepare 消息,每个数据库参与者在本地执行事务,并写好本地的 Undo/Redo 日志,此时事务没有提交。(日志在二阶段进行使用:Undo 用于回滚,Redo 用于提交)
  2. 提交阶段:如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或回滚操作,并释放事务处理过程中使用的资源。

成功:
在这里插入图片描述
失败:
在这里插入图片描述

2.Seata 简介(两阶段提交协议的演变)

官网地址:https://seata.apache.org/zh-cn/docs/user/quickstart/

3.Seata 术语

官网地址:https://seata.apache.org/zh-cn/docs/user/quickstart/
要了解 Seata,首先我们要了解一下 Seata 中几个代表了分布式事务处理中的关键角色及概念:

  • TC (Transaction Coordinator):事务协调者,负责维护全局和分支事务的状态,并驱动全局事务的提交或回滚。
  • TM (Transaction Manager):事务管理器(发起者,同时也是 RM 的一种),定义全局事务的范围,负责开始全局事务以及提交或回滚全局事务。
  • RM (Resource Manager):资源管理器(每个参与事务的微服务),管理分支事务处理的资源,与TC进行通信以注册分支事务和报告分支事务的状态,并负责驱动分支事务的提交或回滚。在Seata中,分支事务通常指的是本地事务,而分布式事务则是由多个分支事务共同组成的全局事务。

示例图
用户购买商品的业务逻辑。整个业务逻辑由 3 个微服务提供支持:

  • 仓储服务:对给定的商品扣除仓储数量。
  • 订单服务:根据采购需求创建订单。
  • 帐户服务:从用户帐户中扣除余额。
    在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拦截器未生效的问题

记录一下自己出现的一个问题 配置好拦截器后 protected void addInterceptors(InterceptorRegistry registry) {log.info("开始注册自定义拦截器...");registry.addInterceptor(jwtTokenUserInterceptor).addPathPatterns("/**").excludePathPatterns(&q…

机器学习周记(第三十三周:文献阅读-时空双通路框架)2024.3.25~2024.3.31

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文摘要 1.3 论文模型 1.3.1 Spatial Encoder(空间编码器) 1.3.2 Temporal Encoder(时间编码器) 2 相关代码 摘要 本周阅读了一篇运用GNN进行时间序列预测的论文。论文…

【论文阅读】UniLog: Automatic Logging via LLM and In-Context Learning

注 由于其公司的保密政策,本文没有公开源代码,数据是公开的。 文章目录 摘要一、介绍二、背景和动机2.1、日志语句生成2.2、大语言模型2.3、上下文学习(In-Context Learning,ICL) 三、UNILOG3.1、模型骨干3.2、提示策略3.2.1、提…

大龄程序员的2024年3月总结:鸿蒙,发起GDE申请,金石计划获奖,月榜,技术文章

大家好,我是老A,一名工作十年的安卓开发; 又到了月末写总结的时候了,看过我文章的朋友应该会发现我没有写2月的总结,因为2月有春节假期,2月大部分时间都是在假期中度过的,所以就没有写2月总结&…

瓷砖通铺选择亮面还是哑光?了解这6点不难选。福州中宅装饰,福州装修

选择瓷砖通铺亮面还是哑光,可以从多个角度来考虑: ①空间感觉 亮面瓷砖通常会使空间看起来更加宽敞和明亮,而哑光瓷砖则给人大气、稳重的感觉。如果希望让空间显得更加宽敞,亮面瓷砖是一个不错的选择。 ②清洁与维护 亮面瓷砖更…

KNN算法 | K近邻:KD Tree、球树、KNN数据下采样策略

目录 一. KNN算法实现方式1. 蛮力实现(brute)2. KD树(kd_tree)3. 球树(ball_tree) 二. KD Tree算法1. 构建方式2. KD Tree 查找最近邻 三. 球树(Ball Tree)1. 构建方式 四. KNN评价1. 优点2. 缺点 五. 延申1. KNN数据下采样策略策略1策略2策略3策略4 Condensed Nearest Neighbo…

loadbalancer 引入与使用

在消费中pom中引入 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> 请求调用加 LoadBalanced 注解 进行服务调用 默认负载均衡是轮训模式 想要切换…

OpenStack部署

目录 一、安装环境 1.无网络使用该命令 2.修改主机名 3.配置hosts解析 4.配置本机免密 5.关闭防火墙和SElinux策略 6.关闭NewworkManager 7.修改yum源 7.1下载阿里源 7.2清空并加载缓存yum源 8.安装基本工具 9.系统升级 10.安装OPenStack的yum仓库 11.修改OPenSt…

Verilog语法之assign语句学习

assign语法主要是对组合逻辑的变量进行赋值的&#xff0c;就是把一个变量赋值给另一个变量&#xff0c;被复制的变量必须是wire类型的参数。 从仿真结果可以看出&#xff0c;data_in变量的值赋值给了data_out,assign语法就是赋值没有任何延迟&#xff0c;data_in是什么值&#…

数据结构--单链表(c语言实现)

一.单链表的设计 1.单链表的结构定义: typedef struct Node{int data;//数据域struct Node* next;//后继指针 }Node,*List; 2.单链表的设计示意图: 3.注意,单链表的最后一个节点的next域为NULL; 4.为什么要有一个头节点?(简单方便,不用传二级指针); 二.单链表的实现 //初始化 …

web练习仿小米页面

效果图&#xff1a; HTML代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

车载电子电器架构 —— 通信信号数据库开发

车载电子电器架构 —— 信号数据库开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自…

rocketmq管理工具rocketmq-console安装

rocketmq-console是一个图形化管理控制台&#xff0c;提供Broker集群状态查看&#xff0c;Topic管理&#xff0c;Producer、Consumer状态展示&#xff0c;消息查询等常用功能&#xff0c;这个功能在安装好RocketMQ后需要额外单独安装、运行。 中文文档地址&#xff1a;https:/…

Java中的多线程和线程安全问题

线程 线程是操作系统进行调度的最小单位。一个进程至少包含一个主线程&#xff0c;而一个线程可以启动多个子线程。线程之间共享进程的资源&#xff0c;但也有自己的局部变量。多线程程序和普通程序的区别&#xff1a;每个线程都是一个独立的执行流&#xff1b;多个线程之间是…

C++模板进阶操作 —— 非类型模板参数、模板的特化以及模板的分离编译

非类型模板参数 模板参数可分为类型形参和非类型形参。类型形参&#xff1a; 出现在模板参数列表中&#xff0c;跟在class或typename关键字之后的参数类型名称。非类型形参&#xff1a; 用一个常量作为类&#xff08;函数&#xff09;模板的一个参数&#xff0c;在类&#xff…

【 书生·浦语大模型实战营】学习笔记(一):全链路开源体系介绍

&#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料&#xff0c;配有全面而有深度的专栏内容&#xff0c;包括不限于 前沿论文解读、…

汇编语言——用INT 21H 的A号功能,输入一个字符串存放在内存,倒序输出

用INT 21H 的A号功能&#xff0c;输入一个字符串“Hello, world!”&#xff0c;存放在内存&#xff0c;然 后倒序输出。 在DOS中断中&#xff0c;INT 21H是一个常用的系统功能调用中断&#xff0c;它提供了多种功能&#xff0c;其中A号功能用于字符串的输入。 在使用这个功能时…

OSCP靶场--Internal

OSCP靶场–Internal 考点(CVE-2009-3103) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.40 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-31 07:00 EDT Nmap scan report for 192.168.216.40 Host is up…

pymysql进行数据库各项基础操作

目录 1、mysql数据库简介2、基于mysql数据库的准备工作3、通过pymysql进行表的创建4、通过pymysql进行数据插入5、通过pymysql进行数据修改6、通过pymysql进行数据查询7、通过pymysql进行数据删除 本文内容是通过pymysql来进行时数据库的各项基础操作。 1、mysql数据库简介 …

西南交大swjtu算法实验4.2|分治

1. 实验目的 编写一个分治算法来搜索 m*n 矩阵 matrix 中的一个目标值 target&#xff0c;该矩阵 具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 通过该实例熟悉分治算法的分析求解过程&#xff0c;时间复杂度分析方法&#xff0c;以及如何设计 分治…