Seata 分布式事务你懂吗?学习了大咖的笔记,公司说要给我涨薪 8K

news2024/12/28 21:22:36

分布式事务处理过程的-ID+三组件模型:

关于事务的基本概念

Seata 是阿里开源的分布式事务解决方案中间件,对业务侵入小,在应用中 Seata 整体事务逻辑基于两阶段提交的模型,核心概念包含三个角色:

  • TM:事务发起者。用来告诉 TC 全局事务的开始,提交,回滚。

  • RM:事务资源,每一个 RM 都会作为一个分支事务注册在 TC。

  • TC:事务协调者,即独立运行的 seata-server,用于接收事务注册,提交和回滚。

Seata 的运行分 AT 和 MT 两种模式。还有其他的模式如 SAGA,还未研究。

AT(Auto Transaction)模式

这个模式需要模块为 Java 语言,并且数据库支持本地事务。一个典型的分布式事务过程:

  • TM 向 TC 申请开启一个全局事务,全局事务创建并生成一个全局唯一的 XID。

  • XID 在微服务调用链路的上下文中传播。

  • RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。

  • TM 向 TC 发起针对 XID 的全局提交或回滚决议。

  • TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

MT(Manual Transaction)模式

这个模式适合其他的场景,因为底层存储可能没有事务支持,需要自己实现 prepare、commit 和 rollback 的逻辑

处理过程

为什么 Seata 在第一阶段就直接提交了分支事务?

Seata 能够在第一阶段直接提交事务,是因为 Seata 框架为每一个 RM 维护了一张 UNDO_LOG 表(这张表需要客户端自行创建),其中保存了每一次本地事务的回滚数据。因此,二阶段的回滚并不依赖于本地数据库事务的回滚,而是 RM 直接读取这张 UNDO_LOG 表,并将数据库中的数据更新为 UNDO_LOG 中存储的历史数据。

如果第二阶段是提交命令,那么 RM 事实上并不会对数据进行提交(因为一阶段已经提交了),而实发起一个异步请求删除 UNDO_LOG 中关于本事务的记录。

有些地方的官网文档写的可能比较难理解,那么接下来我会用简单的方式来描述一下如何搞定分布式事务

快速入门

譬如你有两个微服务,一个是库存模块 StorageService,一个是订单模块 OrderService,主业务是用户下单,然后需要分别调用上面的两个服务,完成减库存、用户扣款和下单操作。由于两个服务是不同的服务,并且是不同的数据库,那么这就是一个典型的分布式事务场景。我们希望要么全部成功,要么全部失败。

/** * 用户下单 */public void purchase(String userId, String commodityCode, int orderCount) {        //减库存        storageService.deduct(commodityCode, orderCount);        //扣款、生成订单        orderService.create(userId, commodityCode, orderCount);    }

复制代码

其中 OrderService 做了如下操作,扣减钱款、生成订单。库存 Service 就是减了一下库存。

那么要完成这次分布式事务,只需要在 purchase 方法上加个注解即可。看起来确实是一个注解,解决所有。

@GlobalTransactional    public void purchase(String userId, String commodityCode, int orderCount) {        ......    }

复制代码

有话说:

Springcloud Alibaba 里的 steata 分布式事务的简单讲解就是这样了,由于篇幅原因,很多朋友可能还觉得干货讲得还不够多,我手里有一份关于 SpringCloudAlibaba 笔记,里面系统的讲解了 springcloud Alibaba 的各种内容,应有尽有!

笔记内容

资料目录

Seata--分布式事务

1.分布式事务基础、2.本地事务、3.全局事务、4.最大努力通知等更多笔记内容

由于篇幅原因内容无法全部截出,可看文末获取方式。

第一章微服务介绍

随着互联网的发展,网站应用的规模不断的扩大,进而导致系统架构也在不断的进行变化。本章就讲述了每种架构系统是什么样子的,以及有什么的作用。

介绍 Spring cloud alibaba

第四章 Sentinel--服务容错篇

在微服务架构中,我们将业务拆分成一个个的服务,服务于服务之间可以互相调用,但是由于网络原因或者自身原因,服务并不能保证服务 100%可用,如果单个服务出现问题,调用整个服务就会出现网络延迟,此时若有大量网络进来,最终会导致服务瘫痪的,所以这篇便讲解了一个高并发带来的问题等。

 

总结

Seata 分布式事务只是 Springcloud Alibaba 里面的一部分,想要真正的了解它,一定要系统的了解它的整个内容。

俗话说,知己知彼百战百胜,想要克服“Seata 分布式”这一难题,先要了解 springcloud alibaba 整体的分布和内容,并抓住其关键和本质。

如果您对如何更好地系统性学习 Springcloud Alibaba 还没有好的办法,这份笔记可以很好地帮助到您!

资料已整理成文档,需要获取的小伙伴可以直接转发+关注后私信(学习)即可获取哦

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

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

相关文章

听说你还在自己做重复劳动?看我一键生成错误码映射

大家在工作中定义错误码的时候都是如何处理的? xdm 可以评论区交流交流 我看到过有的是这样定义错误码的: m : make(map[int]string)m[0] "OK"m[1] "链接失败"m[2] "文件类型错误"... 还看到过这样定义错误码的&#x…

腾讯云2核2G、2核4G、4核8G、8核16G、16核32G服务器价格出炉

腾讯云轻量应用服务器为轻量级的云服务器,使用门槛低,按套餐形式购买,轻量应用服务器套餐自带的公网带宽较大,4M、6M、7M、10M、14M及20M套餐可选,如果是云服务器CVM这个带宽价格就要贵很多了。 轻量应用服务器CPU内存…

Linux系统中如何实现串口的格式化功能方法

大家好,今天的话,主要和大家聊一聊,如何实现串口格式化功能实验。 目录 第一:串口格式化基本简介 第二:实验程序的操作 第三:具体的代码实现 第一:串口格式化基本简介 前面虽然实现了串口的功…

[附源码]计算机毕业设计基于vuejs的爱宠用品销售appSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【vue】中英文切换(多语言国际化)

一、安装i18n插件 npm install vue-il8n8.23.0 --save二、创建语言包文件夹与配置 (1)index.js中 import Vue from vue // 引入vue import VueI18n from vue-i18n // 引入i18n模块 import elementEnLocale from element-ui/lib/locale/lang/en // elem…

新手使用wvp-pro和ZLMediaKit的菜鸟说明(手把手教)

对于wvp-pro的使用,很多大佬都是白嫖菜鸟党,很多都第一次使用wvp,甚至第一次接触国标,连国标最基本流程都不清楚。所以写此文档以供各位菜鸟大佬点评指正 看此文档前提:(下文ZLMediaKit简称zlm&#xff09…

springBoot中日志的使用

springBoot中日志的使用 日志基础 首先你需要知道日志门面,日志实现,日志桥接器。 基于日志实现,常用的有logback,log4j2,这两个日志实现是的创始人是同一个,概念差不多,这里以log4j2为例,有如…

迭代器和生成器

文章目录迭代器和生成器图解迭代器和生成器的关系迭代器容器生成器yield函数生成器表达式总结迭代器和生成器 图解迭代器和生成器的关系 图1-1​ 不管是生成器还是我们的容器,最终都是迭代器,使用next方法进行有规律的获取元素,不需要将元素…

免费的在线3D CAD【BimAnt】

BimAnt托管了可以免费使用的在线三维CAD,采用BRep内核,支持几何约束求解,支持二维草图,支持挤压、放样、扫掠和旋转等操作。访问地址:BimAnt三维CAD。 一、添加基础图元 BimAnt三维CAD支持圆柱、圆锥、球体、圆环体…

STM32的最小系统组成的详解

经常使用STM32开发的工程师对于它的开发环境的最小系统是必须要有所了解的,特别是硬件工程师在设计硬件的时候对这个最小系统就要更加的深入了解了,如果最小系统的搭建都有问题,那以后的使用很难避免不出现问题。 话不多说,进入正…

【自省】使用Executors.xxx违反阿里Java代码规范,那还不写定时任务了?

一、背景 在《分布式锁主动续期的入门级实现-自省 | 简约而不简单》中通过【自省】的方式讨论了关于分布式锁自动续期功能的入门级实现方式,简单同步一下上下文: 客户端抢到分布式锁之后开始执行任务,执行完毕后再释放分布式锁。持锁后因客…

微服务守护神-Sentinel-热点-授权-系统规则

引言 书接上篇 微服务守护神-Sentinel-降级规则 ,上面介绍了Sentinel降级规则,本篇继续来Sentinel的热点、授权、系统规则。 热点规则 何为热点?热点即经常访问的数据。很多时候我们希望统计某些热点数据中访问频次最高的 Top K 数据&…

# String-security(配置异常处理器,封装JWT工具类)

1 JWT是做什么的? 为了在前后端分离项目中使用 JWT ,我们需要达到 2 个目标: 在用户登录认证成功后,需要返回一个含有 JWT token 的 json 串。 在用户发起的请求中,如果携带了正确合法的 JWT token ,后台需要放行&a…

ELK日志分析系统

目录 一.ELK概述 1.1 ELK简介 1.2 ELK日志组件 1.2.1 ELK组件介绍 1.3 日志处理步骤 二. Elasticsearch 集群部署 2.1 关闭防火墙 ​2.2 ELK Elasticsearch 集群部署(在Node1,Node2节点上操作) ​ 2.2.1 更改主机名​ 2.2.2 配置域名…

RCE漏洞简介

今天继续给大家介绍渗透测试相关知识,本文主要内容是RCE漏洞简介。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设备进行…

高级篇之如何升级5GCPE固件

高级篇之如何升级5GCPE固件1. 准备工作2. 安装5GCPE串口驱动3. 升级固件3.1 选择固件3.2 选择串口号3.3 下载固件3.4 下载固件意外情况4. 重新启动结束!LINKPI-5GCPE是LINKPI推出的可以做户外移动直播的 5G无线网关,可以支持三种模式: 网卡模…

计算机网络-分组交换与电路交换

有志者,事竟成 文章持续更新,可以关注【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。 文章目录一、分组…

普乐蛙VR航天科技馆太空体验馆VR太空舱体验馆vr飞碟遨游太空

什么是航天航空主题馆 普乐蛙VR航天航空体验馆系列 普乐蛙VR航天航空主题馆可以根据客户的需求,用航天航空的科技氛围方案进行布置,大多用最新的黑科技,让整个馆充满科技科幻的感觉,使人沉浸,容易进入主题。馆内设置不…

MySQL函数:列转行CONCAT、CONCAT_WS、GROUP_CONCAT的使用(精要)

前言 很久没有接触Mysql了。 今天心血来潮,突然想了解一下Mysql列转行,看了一些文章,重点不清晰,遂有下文! Mysql官网、 社区版下载( Windows版_mysql.8.0.31下载 ) 概述 Mysql内部提供了列转…

UNIAPP实战项目笔记50 登录和注册页面的布局

UNIAPP实战项目笔记50 登录和注册页面的布局 实际案例图片 登录页面布局 注册页面布局 显示登录和注册页面布局 页面布局的切换 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 login.vue部分 <template><v…