分布式事务与分布式锁

news2024/11/15 19:45:50

 分布式事务          

   我要是一条狗 这块硬骨头 理都不想理,但是谁让我是一名程序员

本地消息表:说白了就是一个记录

   操作信息 存到库中 成功状态改为成功,失败定时任务重试调用

消息队列:rocketMQ 

 半事务的典范,mq中的战斗机!

  1.生产者订单系统发送一条half消息到broker

  2.创建订单,成功与否 向broker发送commit和rollback

  3.向broker提供回调接口,当broker一段时间内half消息没有收到操作命令,则主动调此接口来查询订单是否创建成功

  4.half消息commit了,另一个系统来消费,消费成功 消息销毁 分布式事务成功,上一篇有图可see

  5.失败则重试策略 再失败 死信队列 等待进一步处理

seata:二阶段提交

他来了她来了 高度警惕 over over

微服务框架/at模式/tcc模式/saga模式/xa模式/高可用 Apache Seata

 xa 强一致:acid 两阶段

无侵入,seata拦截并解析用户sql,保存其变更前后的数据镜像undo_log,自动生成事务提交/回滚

rm 本地事务隔离行保证全局隔离,串行化隔离级别下性能问题

tm申请全局锁 tc 生成xid,tm通过微服务调用链传给其他服务

rm本地事务xid分支事务注册到tc ,tc返回说准备吧 rm执行本地事务并告知tc结果

tm请求tc对xid提交或回滚

tc指挥xid所有分支提交 回滚

阿里开源的分布式事务框架 Seata

回滚:回滚日志

   分支事务对应数据库一个回滚日志undo_log,收到回滚据undo生成回滚操作

   收到提交,undo_log响应记录删除掉

rm和tc

监控拦截jdbc,监控到开启了本地事务 自动向tc注册 生成回滚日志 汇报执行结果

二阶段回滚失败

tc命令rm回滚,一个微服务挂掉了,all微服务不执行回滚,直到正常启动,tc重新执行全局回滚

AT 锁缩短 两阶段

加锁 快照

基于xa,两阶段提交,锁时间缩短;隔离级别:读未提交

     拦截解析sql,生成before image 执行sql 保存成after image,生成行锁,image组成undolog,数据更新 undolog放到同一个事务提交 释放本地锁定的资源

脏读

全局,tc记录 可访问其他字段 lock_table 

TCC 三阶段提交

人工编码try confirm cancel接口,实现数据恢复

try资源的检测和预留,修改某个资源 先进行预留

confirm 业务执行和提交,完成操作业务,try成功confirm一定能成功

cancel预留资源释放,try的反向操作

空回滚和业务悬挂:就是try阻塞了先执行的cancel然后再try 

   加一个表记录try和cancel情况,未try不canel

微服务18_分布式事务02:Seatda:四种模式XA、AT、TCC、SAGA_分布式事务 at、tcc、saga 和 xa-CSDN博客

Saga

第二阶段 提交rm不需要处理,回滚执行业务补偿回滚方法

分布式事务Seata原理 - 知乎

百度安全验证

两阶段三阶段

  基本完成sql语句操作未提交,都成功 通知all提交事务/回滚事务

  canCommit是否正常,preCommit操作sql,doCommit提交/回滚事务

      rm加超时机制解决阻塞

分布式锁

所有进程都能访问到的地方设置锁资源,竞争锁资源

redis:单线程处理网络问题

setNx key  value + expire key  locktime 设置key有效时长

getset key value先get再set返回value,没有返回空再将key设置为value

lua脚本

redlock:多节点申请锁,一半以上节点获取成功算获取成功

   redission用响应实现(aqs 看门狗 可重入 可续期)

zk

临时节点 有序  watch  cp

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

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

相关文章

IT部门领导的角色与责任:在挑战中塑造未来

前言 在当今快节奏的商业环境中,IT部门领导扮演着至关重要的角色。他们需要具备技术专长,同时也需要展现出卓越的领导力来有效地管理团队和应对各种挑战。 一、技术创新的引领者 1. 重要角色转变 随着信息技术的迅猛发展,IT部门领导已逐渐…

操作系统(第三周 第一堂)

目录 操作系统设计原则 操作系统的结构 简单结构 MS-DOS系统 ​编辑 UNIX系统 微内核 核心技术 缺点 操作系统设计原则 这一段希望大家自己可以好好看一下~~ 策略和机制的分离意味着操作系统可以进一步简化。在操作系统诞生之初,大家认为操作系统需要替用…

【有源码】buildroot根文件系统编译和常见问题

前言 编译好的含有QT5等工具包的buildroot根文件 仓库:https://gitee.com/wangyoujie11/atkboard_-linux_-driver 编译过程如下 1.下载源码,解压tar -vxjf xxx.tar.bz2 https://buildroot.org/ 这里以如下版本实验 2.在解压之后的buildroot-2019.02.…

Python学习:元组

Python 元组概念 Python 中的元组(tuple)是不可变的有序集合。它是一种数据类型,类似于列表(list),但在创建后不能被修改。元组使用圆括号 () 来表示,其中的元素可以是任意类型,并且…

MySQl基础入门⑬

上一遍文章内容 查询结果排序 创建一个新的数据库(假设名为xl): CREATE DATABASE xl;接下来,切换到新创建的数据库,并创建一个关于修仙者的表,命名为修仙者信息,包含至少6个中文字段&#xf…

鸿蒙一次开发,多端部署(八)典型布局场景

虽然不同应用的页面千变万化,但对其进行拆分和分析,页面中的很多布局场景是相似的。本小节将介绍如何借助自适应布局、响应式布局以及常见的容器类组件,实现应用中的典型布局场景。 说明: 在本文 媒体查询 小节中已经介绍了如何通…

一、rv1126开发之视频输入和视频编码

RV1126 H264/HEVC编码流程 一、RV1126编码的流程图: 二、每个代码模块详细讲解 2.1. VI模块的创建 VI模块的初始化:关键在于VI_CHN_ATTR_S结构体,这个结构体是VI设置的结构体。这个结构体的成员变量包括:pcVideoNode&#xff0…

【Java Web基础】一些网页设计基础(五)

文章目录 1. 图片在盒子内部垂直居中2. 底部设计,图片或子元素居中于父盒子(水平、垂直),随着屏幕大小放大或缩小3. 使用thymeleaf的th:each会导致样式失效错乱问题 1. 图片在盒子内部垂直居中 用弹性盒子实现垂直居中及用css实现…

html5cssjs代码 035 课程表

html5&css&js代码 035 课程表 一、代码二、解释基本结构示例代码常用属性样式和装饰响应式表格辅助技术 一个具有亮蓝色背景的网页,其中包含一个样式化的表格用于展示一周课程安排。表格设计了交替行颜色、鼠标悬停效果以及亮色表头,并对单元格设…

使用Oxygen编辑器的项目来做团队协作

▲ 搜索“大龙谈智能内容”关注公众号▲ 扫码见我视频号上的视频 今天,分享一种在Oxygen中使用项目文件进行团队协作的高效方法。这种方法不仅能帮助我们轻松共享文件和文件夹,还能确保团队成员使用统一的项目级别选项和发布配置,从而提高工…

模板高级使用(非类型模板参数,特化,分离编译)

文章目录 模板没有实例化取内嵌类型报错问题非类型模板参数模板的特化函数模板的特化类模板的特化1.全特化2.偏特化 模板的分离编译 模板没有实例化取内嵌类型报错问题 首先在这里分享一个模板的常见报错问题。就是模板的在没有实例化的情况下去取模板类里面的内嵌类型这时候的…

【面试题】HashMap为什么可以插入null而Hashtable就不可以(源码分析)

首先hashmap可以插入null值,但是hashtable和hashcurrentHashmap是不支持的;这是因为在 hashmap对插入key为null进行了特殊处理,当插入的值为null的时候会将哈希值设置为0 但是hashtable会直接抛出异常: 并且hashmap是线程不…

2024全国水科技大会【发言单位】天健水务集团(杭州)有限公司

天健水务,始创于2003年,下属浙江天行健水务有限公司、杭州天勤水处理技术有限公司、杭州天行健新能源有限公司,是一家致力于现代化水处理设备与系统研发、生产及工程应用的国家高新技术企业。以天健智造、天健工程、天健运维的“一站式全流程…

uniapp ios证书失效

前面是按照网上查找的方法 作者大大的地址 1、一个ios账户(688付费版) 2、登录 Apple Developer 3、创建Identifiers ps:创建时需继承苹果的sdk,只需要一个就行 点击continue再点击Register即可 4、创建.cer证书 &…

软件测试简历,你真的会写简历吗?一周疯狂面试6家...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 简历元素 一份合格…

SqlServer数据库复习总结资料

基于课堂上学到的以及书上的看到的,总结出的数据库复习资料 一、数据库概述 基本概念 1.数据 数据(Data)是事物的符号表示,可以是声音、图像、文字、数字,也可以是计算机代码。 2.数据库 数据库(DataBase…

WebSocket 使用示例,后台为nodejs

效果图 页面代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>WebSocket Client</title&g…

java NIO群聊系统

demo要求&#xff1a; 1&#xff09;编写一个NIO群聊系统&#xff0c;实现服务器端和客户端之间的数据简单通讯&#xff08;非阻塞&#xff09; 2&#xff09;实现多人群聊 3&#xff09;服务器端&#xff1a;可以监测用户上线&#xff0c;离线&#xff0c;并实现消息转发功…

利用autodl服务器跑模型

1. 租用服务器 本地改模型 服务器 将改进好的、数据集处理好的模型压缩为zip文件上传到阿里云盘打开服务器AUTODL服务器&#xff0c;在主页中选择容器实例 在此位置进行开关机操作&#xff0c;若停止服务器&#xff0c;必须关机&#xff0c;不然会一直扣钱 2. 运行模型 选择…

【Unity】捕捉PC桌面的插件

【背景】 之前介绍了如何用一款名为uWindowCapture的Unity免费插件在Unity的Canvas上展示PC桌面。经过一段时间的使用,本篇继续分享此插件的一些功能和限制。 在此感谢作者Hecomi。 【特征和限制】 一般局域网络环境只能最多达到15帧的帧率,所以别幻想用来窜流游戏或者看电…