【分布式系统】聊聊分布式事务中原子性

news2024/12/29 11:03:00

什么是分布式事务

在分布式系统中,一个是计算问题,也就是将多个任务,通过流控技术把不同的流量分发给不同的服务器进行处理。另一个就是存储,而只要设计的存储,就必然会引入从单体事务中衍生除的分布式事务问题。
事务的本质是什么,其实就是处理数据的复杂度 转移到数据库层面,业务开发人员无序关注具体的细节,简化开发。

分布式事务有两种方式,一种是数据需要复制到多个副本中,而这种一般都通过单主复制来解决。另一种就是在不同的节点操作不同的数据,比如订单系统N1节点,支付系统N2节点。如何在出现异常情况下进行事务的回滚解决。或者一起成功提交。

从ACID中看分布式事务

在这里插入图片描述

一致性与持久性

ACID这里就不说了,在分布式系统中,和单体的一致性和持久性没有太大区别。为了实现一致性,通过前后进行写入日志进行提交和回滚。而持久性,一般都是在返回响应到客户端的时候,进行将数据持久化到非易失性存储设备中,或者使用WAL 先写入日志,后刷新回磁盘的方式。而这种机制其实对于Redis、Kafka都具备。

原子性

二阶段提交

两阶段提交,其实就是为了防止,在一次提交后,有部分节点出现故障而导致数据不一致的问题。
二阶段提交中有两个角色 一个是协调者,另一个是参与者。协调者负责进行决策。而参与者是具体的节点。
第一个阶段:准备阶段,协调者发送请求参与者,参与者是否准备好所需的事务资源准备等。如果准备好,响应。 如果有一个参与者没有响应,那么事务中断。都响应之后,在继续进入下一个阶段。注意这个阶段会执行事务操作。
第二个阶段 提交阶段,因为在准备阶段协调者,接收到所有参与者的准备响应。所以进行提交。如果有一个参与者没有提交成功,则直接回滚整个事务。否则事务提交成功。
在这里插入图片描述
其实整个过程就是 一个准备 一个提交阶段。但是对于二阶段提交来说,还是存在很多问题。
比如在准备阶段,可能有一个参与者超时不能响应,这种就需要设置容错机制来解决。超时等待时间。协调者如果是单机可能出现单点故障。以及在提交阶段,如果只有部分完成, 出现网络分区,脑裂问题,会导致数据不一致问题。所以综上所诉,二阶段还是存在一定的问题。所以需要三阶段提交来解决。

三阶段提交

在这里插入图片描述
三阶段其实就是三个过程。准备 预提交 提交
为了防止二阶段协调者故障问题,增加一个预提交的过程。
第一阶段,协调者向所有参与者发送资源是否准备好的请求,如果都返回成功,继续
第二阶段,协调者向所有参与者预提交,参与者进行执行事务,并返回结果。
第三阶段,协调者向所有参与者提交,事务完成
如果在任意一个阶段,有参与者没有返回结果。那么就终止。
二阶段提交是阻塞协议,三阶段是非阻塞协议,增加了可用性。

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

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

相关文章

css flex 上下结构布局

display: flex; flex-flow: column; justify-content: space-between;

战略方法论

父文章 人人都是战略家 2018年注册会计师公司战略与风险考点:swot分析_知识点_注册会计师 SWOT分析 一、基本原理 所谓SWOT分析,即基于内外部竞争环境和竞争条件下的态势分析,就是将与研究对象密切相关的各种主要内部优势、劣势和外部的机会和威胁等…

提高WordPress网站性能的24个技巧

你想加速你的WordPress网站吗?快速加载页面可改善用户体验、增加页面浏览量并帮助你优化WordPress SEO。在本文中,我们将分享最有用的WordPress网站性能速度优化技巧,以提高WordPress网站性能并加快你的网站速度。 与其他“X 优秀的 WordPres…

redis学习笔记(九)

文章目录 python对redis基本操作(1)连接redis(2)数据类型操作 python对redis基本操作 (1)连接redis # 方式1 import redisr redis.Redis(host127.0.0.1, port6379) r.set(foo, Bar) print(r.get(foo))# …

Xilinx DDR3学习总结——1、MIG核设置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx DDR3学习总结——1、MIG核设置 前言开发板 DDR信息MIG 设置前言 话说之前从来没有使用过DDR,工作中的项目都是流式处理的,没有一个大存储的需求,应该图像处理中DDR用的会比较多一些,但是一个这么…

SpringBoot05--axios网络请求

浏览器主动发送请求,服务器接收请求之后返回数据,通过vue进行数据绑定 请求成功,返回的数据会包装到response里面去(返回成response的data属性) 好的这边不太懂 在xxx.vue组件被创建和挂载(渲染&#xff09…

在idea运行python文件

在idea运行python文件 如果在idea运行python文件而没有弹出run的选项,则点击File->Settings…->Plugins,在里面搜索python,如果没有显示则在Maketplace进行搜索, 接着Install,然后restart

C++ STL list

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C之 STL list介绍和模拟实现 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;上次我们详细的介绍了vector&#xff0c;今天我们继续来介绍…

某大厂笔试(小*的车站的最近距离)

有一个环形的公路&#xff0c;上面共有n站&#xff0c;现在给定了顺时针第i站到第i1站之间的距离&#xff08;特殊的&#xff0c;也给出了第n站到第1站的距离&#xff09;&#xff0c;小*想着沿着公路第x站走到第y站&#xff0c;她想知道最短的距离是多少&#xff1f; 输入描述…

无涯教程-Perl - print函数

描述 此函数将LIST中的表达式的值打印到当前的默认输出文件句柄或FILEHANDLE指定的句柄中。 如果设置,则$\变量将添加到LIST的末尾。 如果LIST为空,则打印$_中的值。 print接受一个值列表,列表中的每个元素都将被解释为一个表达式。 语法 以下是此函数的简单语法- print…

谷歌发布多平台应用开发神器:背靠 AI 编程神器 Codey,支持 React、Vue 等框架,还能代码补全

一、概述 8 月 8 日&#xff0c;谷歌宣布推出 AI 代码编辑器 IDX&#xff0c;旨在提供基于浏览器的人工智能开发环境&#xff0c;用于构建全栈网络和多平台应用程序。谷歌在创建 IDX 时并没有构建新的 IDE&#xff08;集成开发环境&#xff09;&#xff0c;而是使用 VS Code 作…

网络安全(黑客)自学路线/笔记

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全…

代码随想录算法训练营第55天|动态规划part12|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结

代码随想录算法训练营第55天&#xff5c;动态规划part12&#xff5c;309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结 309.最佳买卖股票时机含冷冻期 309.最佳买卖股票时机含冷冻期 思路&#xff1a; 区别在第i天持有股票的当天买入的情况&#xff0c…

【Kubernetes】神乎其技的K8s到底是什么,为什么被越来越多人使用

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

户外骨传导耳机推荐,盘点最适合户外佩戴的五款耳机

现在天气越来越暖和了&#xff0c;很多人选择外出徒步、越野或者骑行&#xff0c;在这些活动中往往都会搭配一个骨传导耳机&#xff0c;来让运动过程变得更加有趣。在选购骨传导耳机时&#xff0c;人们通常会考虑音质、舒适性、价格等因素&#xff0c;为了让大家选到更适合自己…

Kafka API与SpringBoot调用

文章目录 首先需要命令行创建一个名为cities的主题&#xff0c;并且创建该主题的订阅者。 1、使用Kafka原生API1.1、创建spring工程1.2、创建发布者1.3、对生产者的优化1.4、批量发送消息1.5、创建消费者组1.6 消费者同步手动提交1.7、消费者异步手动提交1.8、消费者同异步手动…

yolov5目标检测多线程Qt界面

上一篇文章&#xff1a;yolov5目标检测多线程C部署 V1 基本功能实现 mainwindow.h #pragma once#include <iostream>#include <QMainWindow> #include <QFileDialog> #include <QThread>#include <opencv2/opencv.hpp>#include "yolov5.…

phpspreadsheet excel导入导出

单个sheet页Excel2003版最大行数是65536行。Excel2007开始的版本最大行数是1048576行。Excel2003的最大列数是256列&#xff0c;2007以上版本是16384列。 xlswriter xlswriter - PHP 高性能 Excel 扩展&#xff0c;功能类似phpspreadsheet。它能够处理非常大的文件&#xff0…

056B R包ENMeval教程-基于R包ENMeval对MaxEnt模型优化调参和结果评价制图(更新)

056B-1 资料下载 056B-2 R包ENMeval在MaxEnt模型优化调参中的经典案例解读 056B-3 R软件和R包ENMeval工具包安装 056B-4 R软件和R包ENMeval安装报错解决办法 056B-5 环境数据格式要求和处理流程 056B-6 分布数据格式要求和处理流程 056B-7 基于R包ENMeval对MaxEnt模型优化…

12.pod生命周期和存储卷

文章目录 pod生命周期pod启动阶段故障排除步骤&#xff1a; 存储卷emptyDir存储卷 hostPath存储卷nfs共享存储卷总结&#xff1a; pod生命周期 pod启动阶段 一般来说&#xff0c;pod 这个过程包含以下几个步骤&#xff1a; 调度到某台 node 上。kubernetes 根据一定的优先级算…