分布式事务(7)之Seata简介

一、分布式事务解决方案

       2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

  1. 准备阶段(Prepare phase)

  2. 提交阶段(commit phase)

        举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如意,囊中羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四都是铁公鸡,形成了尴尬的一幕:

        准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。

        提交阶段:老板出票,两人拿票纷纷落座就餐。

        例子中形成了一个事务,若张三或李四其中一人拒绝付款,或钱不够,店老板都不会给出票,并且会把已收款退回。

  • 准备阶段(Prepare phase):事务管理器给每个事务参与者发送prepare消息,每个事务参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务是没有提交的;
  • (Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数据文件)

  • 提交阶段(Commit pahse):如果事务管理器收到了所有参与者的执行失败或者是超时消息,直接给每一个事务参与者发送回滚(rollback)消息;否则,发送(commit)消息,事务参与者根据事务管理器的指令执行提交或者回滚事务,并释放资源。

具体步骤如下:

成功:

失败:

二、Seata 简介

        官网: Apache Seata

        概念: Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

         在我们的微服务系统中,对应业务被对应的拆分成独立模块,在官方提供的架构图中,我们可以看出当前是三个服务:

  • 仓储服务:对给定的商品进行增删操作记录数量
  • 订单服务:根据采购者的需求创建订单
  • 账户服务:从用户账户中扣除余额、积分等

        在这套架构中,用户下单购买商品的业务,就需要三个服务来完成,每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题就没办法保证,Seata就是来进行解决这种问题的解决方案。

2.1Seata 术语

        要了解Seata,首先我们要了解一下Seata的几个关键的概念:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务的提交或者回滚;
  • TM(Transation Manager)事务管理者(事务发起者),定义全局事务的范围:开始全局事务、提交或回滚全局事务;
  • RM(Resource Manager)-资源管理器,就是每一个参与事务的微服务,负责分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务回滚或者提交。

 

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

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

相关文章

智慧医疗时代来临,全视通给大家介绍智慧病房

随着科技的不断发展,智慧医疗已经成为医疗行业的一个重要趋势。智慧医疗技术的应用,不仅提高了医疗服务的效率和质量,也使得患者的就医体验更加舒适和便捷。在智慧医疗时代,智慧病房呼叫系统作为其中的一项重要技术,已…

用html编写的小广告板

用html编写的小广告板 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

springboot003图书个性化推荐系统的设计与实现(源码+调试+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的图书个…

nacos只发现不发布服务fiddler请求转发到本地

https://blog.csdn.net/qq_38826019/article/details/109583854 nacos配置文件参数 spring.cloud.nacos.discovery.register-enabled : false fiddler转发 regex:http://xxx:8080/api/xxx/(?.)$ http://localhost:9209/${param}

掌握ChatGPT润色绝技:什么是人工智能写作以及如何使用它来完成写作任务

如对AI写论文感兴趣&#xff0c;欢迎添加作者wx讨论 : ryan_2982 人工智能 (AI) 的出现开创了技术进步的新时代&#xff0c;彻底改变了包括写作和内容创作在内的各个行业。人工智能写作和人工智能提示已成为可以简化和增强写作任务的强大工具。在这篇博文中&#xff0c;我们将…

matplotlib 入门教程

一. matplotlib 简介 Matplotlib是一个Python 2D绘图库&#xff0c;它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib试图让简单的事情变得更简单&#xff0c;让无法实现的事情变得可能实现。 只需几行代码即可生成绘图&#xff0c;直方…

求购EV代码签名证书,看看性价比最优选项要多少钱?

在当今的数字化时代&#xff0c;EV代码签名证书作为一种强化软件安全防线的顶级数字证书&#xff0c;承担着验证软件源码真伪和完整性的重要任务。对于软件开发者和公司来说&#xff0c;购置EV代码签名证书无疑是必不可少的&#xff0c;而其年度费用也成为各方密切关注的核心议…

【计算机网络】DNS/ICMP协议/NAT技术

文章目录 一、DNS(Domain Name System)1.DNS背景2.域名3.浏览器中输入url后,发生的事情 二、ICMP协议1.什么是ICMP协议2.ICM功能3.ICMP的报文格式4.ping命令5.traceroute命令 三、NAT技术1.NAT技术背景2.NAT IP转换过程3.NAPT4.NAT技术的缺陷5.NAT和代理服务器 四、TCP/IP五层模…

React PureComponent 和 React.memo()区别

1 注意 ● PureComponent和memo仅作为性能优化的方式存在 ● 不要依赖它来阻止渲染&#xff0c;会产生BUG ● PureComponnet 和memo 都是通过对 props 值的浅比较来决定该组件是否需要更新的。 2 PureComponent 和React.memo() 区别 PureComponent 和React.memo()都是React优化…

Idea安装gideabrowser插件

Idea安装gideabrowser插件 一、安装二、设置教程 一、安装 gideabrowser链接地址 二、设置教程 在人生的舞台上&#xff0c;奋力拼搏&#xff0c;才能演绎出最精彩的人生之歌。面对挑战和困难&#xff0c;不妥协、不气馁&#xff0c;只争朝夕&#xff0c;方显坚韧与智慧。努…

如何使用Docker部署WBO容器并实现固定公网地址访问本地白板界面

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

fpmarkets澳福归类总结不同十字星K线的含义

不同的十字星K线代表了不同的含义&#xff0c;各位投资者你们知道这些十字星K线的含义吗&#xff1f;今天fpmarkets澳福就归类总结一下。 首先墓碑十字星和蜻蜓十字星归为一类&#xff0c;重点以墓碑十字星作为参考&#xff1a; 墓碑十字星是一种熊市反转烛台模式&#xff0c;当…

MySQL:错误ERROR 1045 (28000)详解

1.问题说明 有时候我们登录Mysql输入密码的时候&#xff0c;会出现这种情况&#xff1a; mysql -u root -p Enter Password > ‘密码’ 错误&#xff1a;ERROR 1045 (28000): Access denied for user ‘root’‘localhost’ (using password: YES) 或者&#xff1a;错误…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分&#xff1a;数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接&#xff0c;形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

[图论] 树上不重复权值的路径数

解题思路 整体思路&#xff0c;枚举路径上每个点&#xff0c;记录这个点 u 可以向上延伸到多远&#xff0c;如果可延伸到 x 点&#xff0c;则这个点对答案的贡献为 dep[u] - dep[x](下文的maxx) 1 为什么枚举是向上延伸&#xff1f;因为可以记录已走过路径中已有的权值&…

【k8s配置与存储--配置管理】

1、ConfigMap的配置 1.1 ConfigMap介绍 ConfigMap 是一种 API 对象&#xff0c;用来将非机密性的数据保存到键值对中。使用时&#xff0c; Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。 ConfigMap 将你的环境配置信息和容器镜像解耦&#xff0c;便于应用配…

STM32 I2C学习

IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步、串行、半双工通信总线。 同步&#xff1a;需要时钟线 串行&#xff1a;数据一位一位地发送 半双工&#xff1a;同一时间只能接受或发送&#xff0c;不能同时发送或…

input框 自动获取焦点

<el-input style"width:200px" autofocus v-model"leftListname"></el-input> element-ui 的 el-input 组件的 autofocus 属性在某些情况下不能实现自动聚焦,有几个可能的原因: 1. autofocus 在移动设备上不被支持。如果是在移动设备上访问,au…

Redis 发布订阅详解

Redis 发布订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。 Redis 有两种发布订阅模式 基于频道&#xff08;Channel&#xff09;的发布订阅基于模式&#xff…

ChatGPT学习第三周

&#x1f4d6; 学习目标 ChatGPT在各行各业的应用 探索ChatGPT在不同领域&#xff08;如教育、客户服务等&#xff09;的实际应用案例。 ChatGPT的局限性和挑战 讨论ChatGPT面临的挑战&#xff0c;包括偏见、误解及其限制。 ✍️ 学习活动 学习资料 《人工智能通用大模型(…