首页 > 其他分享 >SpringCloudAliBaBa Seata学习

SpringCloudAliBaBa Seata学习

时间:2024-01-16 23:47:34浏览次数:32  
标签:事务 Seata 协调者 学习 响应 提交 SpringCloudAliBaBa 参与者 分布式

分布式事务

使用场景 同一个事务对两个数据库操作,事务肯定是会失效的 因为一个事务就是一个数据库连接,不同的连接就是不同的事务

Seata 是什么?

Seata是一款分布式事务解决方案,用AT模式是阿里推荐的
事务模式:TCC、SAGA、XA

常见分布式事务解决方案

1、seata 阿里分布式框架
2、消息队列
3、saga
4、XA

这四种都是 两阶段(2PC)的协议:完成整个分布式事务需要两个步骤完成

2PC 协议?

预处理Prepare
参与方 数据库或应用

提交Commit

处理流程:一、预处理

询问:协调者向各个参与者 发起询问 是否可以执行事务操作,然后等待各个事务响应
执行:各个参与者收到协调者的事务请求后,执行事务操作,并将undo、redo信息 记录在事务日志表中
预处理sql执行任务是否满足条件(为什么这样设计:1、提交的话 对数据覆盖)
响应:如果参与者成功执行了事务并写入Undo、Redo信息,则向协调者返回yes响应,当然参与者也可能宕机 不响应。如果响应为No,则协调者触发回滚

二、提交/回滚机制

commit通知:请求协调者向所有参与者发送了Commit请求
事务提交: 参与者收到commit请求后,执行事务提交、提交完成后释放事务执行期间占用的所有资源
反馈结果:参与者执行事务提交后向协调者发送Ask响应(没用100%的成功率)
完成事务:接收到所有参与者的Ack响应后,完成事务提交

2PC的问题

1、参与者在等待协调者发送指令时 其实是在等待其他参与者的响应。在此过程中其参与者是不能做其他操作的 也就是阻塞了
2、协调者可能会挂掉
3、数据不一致:如果参与者之一宕机,则无法向协调者发送消息 就无法判断事务成功失败

AT协议(Auto Transaction)

AT模式是一种无侵入的分布式事务解决方案、我们只需要编业务SQL就行
一阶段:
Setta会拦截"业务SQL",提取元数据,在数据被更新前,update user set name ="李五" where name ="李四"
将其保存为befor image(select * from user where nbame ='李四'。
再业务数据更新之后,再将其保存为"after image" 最后生成行锁。以上操作全部在一个数据库内完成,保证操作的原子性
二阶段:提交
提交的话 因为业务sql在阶段一已经提交至数据库,所以seata框架只需要将保存的快照数据和行锁删掉完成数据清理就行了
回滚:
数据校验:after image 和数据库对比(防止脏数据)
还原数据:before image -> 逆向SQL ->数据还原
删除中间数据:见提交

标签:事务,Seata,协调者,学习,响应,提交,SpringCloudAliBaBa,参与者,分布式
From: https://www.cnblogs.com/czh4869/p/17968863

相关文章

  • Java就业学习 Day2 每日一问:我真能找到工作吗/(ㄒoㄒ)/~~
    Java开发能力:今天只看了面向对象这一节的东西,确实有了好多新的理解。①和equals的区别:说实话我现在才弄懂。。比较的其实是地址,所以如果一个变量可以用==,但对象就不行。②重载与重写的区别:重载是构造器重载,构造器的参数不同。而重写是重写方法,形象来说就是父类的方法我不满意,我......
  • 自动化运维工具ansible 学习教程
    什么是ansibleAnsible是一个自动化的IT应用工具,用于自动化配置管理、部署、编排和协调系统和应用程序。它采用基于任务的语法,可以通过SSH或托管到远程节点的代理控制台自动执行各种操作。Ansible基于Python编写,并且易于学习和使用,可以实现基础设施即代码(Infrastructurea......
  • OpenMP学习 第四章 线程与OpenMP编程模型
    第四章线程与OpenMP编程模型编译器指令为了将顺序程序转换为并行程序,修改代码的最小干扰方式是通过编译器指令.在C/C++中,指令通过编译器表示#pragmaompparallel[clause[[,]clause]...]#pragmaompparallelprivate(x){//codeexecutedbyeachthread}大部分......
  • FastAPI学习-30 项目代码中添加自己的日志内容
    前言前面一篇【FastAPI学习-29uvicorn使用log_config参数设置logger日志格式】已经学会了配置uvicorn的日志。如何在fastapi项目代码中添加自己的日志呢?添加日志创建一个logger实例,名称为"fast"fromfastapiimportFastAPIimportlogginglogger=logging.getLo......
  • 大三寒假学习进度笔记7
    今日开始学习DataFrame的创建#coding:utf8frompyspark.sqlimportSparkSessionfrompyspark.sql.typesimportStructType,StringType,IntegerTypeimportpandasaspdif__name__=='__main__':spark=SparkSession.builder.\appName("......
  • 线程池源码学习
    使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以......
  • 机器学习-概率图模型系列-最大熵模型-37
    目录1.熵的定义2.最大熵模型算法3.逻辑回归与最大熵之间的关系参考:https://www.cnblogs.com/pinard/p/6972299.html最大熵模型(maximumentropymodel,MaxEnt)也是很典型的分类算法了,它和逻辑回归类似,都是属于对数线性分类模型。在损失函数优化的过程中,使用了和支持向量机......
  • 搜索学习笔记+杂题 (进阶一 dfs/bfs的进阶)
    前言:没啥好说的了。所以只能来写博客了。搜索杂题:相关题单:戳我二、进阶dfs/bfs1、dfs进阶——折半搜索(meetinthemiddle)由于深搜的时间复杂度在每种状态有两个分支的情况下是\(O(2^n)\)。所以一般暴力深搜的数据范围就在\(20-25\)之间。而对于有一大类的题,它的搜索思......
  • 机器学习周刊第六期:哈佛大学机器学习课、Chatbot Ul 2.0 、LangChain v0.1.0、Mixtral
    ---date:2024/01/08---吴恩达和Langchain合作开发了JavaScript生成式AI短期课程:《使用LangChain.js构建LLM应用程序》大家好,欢迎收看第六期机器学习周刊本期介绍10个内容,涉及Python、机器学习、大模型等,目录如下:1、哈佛大学机器学习课2、第一个JavaScript生成......
  • C++学习日记 2024-1-16
    开始学习C++几天了,之前没有记录,从现在开始,记录一下学习过程复习与回忆:1.引用与指针共同优点:只用引用与指针,在传递参数时,可以减少拷贝,减少内存消耗,提高效率指针优点:指针比引用更强大,所有引用能做的事,指针都能做,指针缺点:危险,指针可以为空,指针指向地址,同一地址可以......