分布式事务Seata(别名Seta)(持续学习中)

1.为什么学习他? 当一台机器的时候,只需要本地事务回滚就好了,还有MonogoDB最好不要放敏感数据,特别是旧的版本,没有事务功能(ACID),
分布式事务,也是属于多线程问题,就是把多台机器变成一台机器(他拥有更多线程,但是也要考虑网络问题),redis在一台机器是单线程的,但是多台机器又回到了多线程问题…(CAP和BASE最终一致性理论)

2.行内对分布式事务的解决方案-----二段式提交

1.第一阶段 请求执行(写入 undo redo日志)
2. 第二阶段 提交 真正执行(各个机器 undo状态一致了就提交事务,部分redo就回滚)

3.二段式提交导致的问题

1.阻塞,一个事务 一致被占用导致其他事务阻塞(占着茅坑不拉屎)
2.数据不一致,所有事务都确认undo了,由于网络波动,部分事务请求执行不了
3.协调者没有高可用,被选举的协调者(没有从机高可用)宕机导致全部事务阻塞

4.什么是Seta(解决分布式事务) 图片的主要意思就是其他角色向TC注册得到XID保证事务唯一性

请添加图片描述
请添加图片描述

5.不同的解决方案 业务入侵(后期需要插入事务的代码) 无入侵(自动管理事务)

Seata提供了四种不同的分布式事务解决方案:

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

6.比较 性能好的要手动编写更多代码
在这里插入图片描述

7.操作
1.下载控制台,启动seata
https://seata.io/zh-cn/
2.mysql创建表
3.maven导入依赖

<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.4.2</version>
</dependency>//或者不整合springboot的<dependencies><!-- 其他依赖 --><dependency><groupId>io.seata</groupId><artifactId>seata-core</artifactId><version>1.4.0</version></dependency><!-- 其他依赖 -->
</dependencies>
4.写配置文件
# Seata 配置
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.enable-auto-configuration=true
seata.config.nacos.server-addr=127.0.0.1:8848
seata.config.nacos.namespace=seata
seata.config.nacos.group=SEATA_GROUP# 事务存储配置
spring.datasource.seata.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.seata.url=jdbc:mysql://localhost:3306/seata
spring.datasource.seata.username=root
spring.datasource.seata.password=123456

5.使用在service业务写注解

@Compensable
@Transactional
@Override
public void createOrder(Order order) {// 扣减账户余额accountService.decreaseBalance(order.getUserId(), order.getAmount());// 创建订单orderMapper.insert(order);
}

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

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

相关文章

AI 绘画 | Stable Diffusion 艺术二维码制作

前言 这篇文章教会你如果用Stable Diffusion WEB UI制作艺术二维码,什么是艺术二维码呢?就是普通二维码和艺术图片融合后的二维码图片,如下图所示。主要原理还是使用controlNet的control_v1p_sd15_qrcode_monster模型和光影模型control_v1p_sd15_brightness。 教程 准备…

Java IO流(四)(Autocloseable接口)

Autocloseable接口 实现Autocloseable的IO类在特定的情况下&#xff0c;可以自动释放资源。 JDK7时的写法&#xff1a; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class ByteStreamDemoJDK7 {public static void…

一文带你了解Linux学习网站:让你的编程之路更加顺畅!

介绍&#xff1a;Linux&#xff0c;通常指的是GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统。这个系统的核心由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;在1991年首次发布。Linux是基于POSIX和UNIX的多用户、多任务、支持多线…

AMC8竞赛历年真题集在线练习和解析,新增一套适合碎片时间练习卷

根据部分家长和孩子反馈&#xff0c;六分成长独家制作的AMC8历年在线真题集的在线试卷新增一套&#xff1a;每次从575道真题题库中抽取5道。更好地利用碎片化时间来做题&#xff0c;查漏补缺&#xff0c;了解AMC8竞赛的题目形式和考察知识点。 新试卷已经上线&#xff0c;之前拥…

洛谷P1287 盒子与球

题干&#xff1a; 现有 r 个互不相同的盒子和 n 个互不相同的球&#xff0c;要将这 n 个球放入 r 个盒子中&#xff0c;且不允许有空盒子。请求出有多少种不同的放法。 两种放法不同当且仅当存在一个球使得该球在两种放法中放入了不同的盒子。 数据范围&#xff1a; 0<n,r&l…

堆的相关时间复杂度计算(C语言)

目录 前言 建堆的时间复杂度 向上调整建堆的时间复杂度 向下调整建堆的时间复杂度 维护堆的时间复杂度 top K问题的时间复杂度 前言 在前面的三篇文章中我们成功的实现了堆排序的升降序以及基于堆的top K问题&#xff0c;现在我们来解决它们的时间复杂度问题 建堆的时间…

我有才专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

在当今数字化时代&#xff0c;知识付费平台已经成为人们获取专业知识、提升自身素质的重要渠道。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。因此&#xff0c;我们提出了专属定制适合个人的知识付费平台的概念&…

108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输…

2023年最新prometheus + grafana搭建和使用

一、安装prometheus 1.1 安装 prometheus官网下载地址 sudo -i mkdir -p /opt/prometheus #移动解压后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #创建一个专门的prometheus用户&#xff1a; -M 不创建家目录&#xff0c; -s 不让登录 useradd…

面向AOP(2)spring

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

ChatGPT是科学还是艺术?

OpenAI最近谈到GPT4变懒的问题&#xff0c;说“它更像是多人共同参与的艺术创作”&#xff0c;那到底大模型是科学还是艺术&#xff1f;

Spring Boot 3 集成 MyBatis详解

MyBatis是一款开源的持久层框架&#xff0c;它极大地简化了与数据库的交互流程。与类似Hibernate的ORM框架不同&#xff0c;MyBatis更具灵活性&#xff0c;允许开发者直接使用SQL语句与数据库进行交互。Spring Boot和MyBatis分别是两个功能强大的框架&#xff0c;它们的协同使用…