分布式事务问题

分布式事务问题

1、什么是分布式事务

一次课程发布操作需要向数据库、redis、elasticsearch、MinIO写四份数据,这里存在分布式事务问题。

什么是分布式事务?

首先理解什么是本地事务?

平常我们在程序中通过spring去控制事务是利用数据库本身的事务特性来实现的,因此叫数据 库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。

本地事务具有ACID四大特性,数据库事务在实现时会将一次事务涉及的所有操作全部纳入到一个不可分割的执行单元,该执行单元中的所有操作 要么都成功,要么都失败,只要其中任一操作执行失败,都将导致整个事务的回滚。

理解了本地事务,什么是分1事务?

现在的需求是课程发布操作后将数据写入数据库、redis、elasticsearch、MinIO四个地方,这四个地方已经不限制在一个数据库内,是由四个分散的服务去提供,与这四个服务去通信需要网络通信,而网络存在不可到达性,这种分布式系统环境下,通过与不同的服务进行网络通信去完成事务称之为分布式事务。

在分布式系统中分布式事务的场景很多:

例如用户注册送积分,银行转账,创建订单减库存,这些都是分布式事务。

拿转账举例:

我们知道本地事务依赖数据库本身提供的事务特性来实现,因此以下逻辑可以控制本地事务:

Java
begin transaction
//1.本地数据库操作:张三减少金额
//2.本地数据库操作:李四增加金额
commit transation;

但是在分布式环境下,会变成下边这样:

Java
begin transaction
//1.本地数据库操作:张三减少金额
//2.远程调用:让李四增加金额
commit transation;

 

可以设想,当远程调用让李四增加金额成功了,由于网络问题远程调用并没有返回,此时本地事务提交失败就回滚了张三减少金额的操作,此时张三和李四的数据就不一致了。

因此在分布式架构的基础上,传统数据库事务就无法使用了,张三和李四的账户不在一个数据库中甚至不在一个应 用系统里,实现转账事务需要通过远程调用,由于网络问题就会导致分布式事务问题。

下边的场景都会产生分布式事务:

微服务架构下:

单服务多数据库:

多服务单数据库:

2. 什么是CAP理论

控制分布式事务首先需要理解CAP理论,什么是CAP理论?

CAP是 Consistency、Availability、Partition tolerance三个词语的缩写,分别表示一致性、可用性、分区容忍性。

使用下边的分布式系统结构 进行说明:

客户端经过网关访问用户服务的两个结点,一致性是指用户不管访问哪一个结点拿到的数据都是最新的,比如查询小明的信息,不能出现在数据没有改变的情况下两次查询结果不一样。

可用性是指任何时候查询用户信息都可以查询到结果,但不保证查询到最新的数据。

分区容忍性也叫分区容错性,由于网络通信异常导致请求中断、消息丢失,但服务依然对外提供服务。

CAP理论要强调的是在分布式系统中这三点不可能全部满足,由于是分布式系统就要满足分区容忍性,因为服务之间难免出现网络异常,不能因为局部网络异常导致整个系统不可用。

满足P那么C和A不能同时满足:

比如我们添加一个用户小明的信息,该信息先添加到结点1中,再同步到结点2中,如下图:

如果要满足C一致性,必须等待小明的信息同步完成系统才可用(否则会出现请求到结点2时查询不到数据,违反了一致性),在信息同步过程中系统是不可用的,所以满足C的同时无法满足A。

如果要满足A可用性,要时刻保证系统可用就不用等待信息同步完成,此时系统的一致性无法满足。

所以在分布式系统中进行分布式事务控制,要么保证CP、要么保证AP。

3. 分布式事务控制方案

学习CAP理论该如何控制分布式事务呢?

学习了CAP理论我们知道进行分布式事务控制要在C和A中作出取舍,保证一致性就不要保证可用性,保证可用性就不要保证一致,首先你确认是要CP还是AP,具体要根据应用场景进行判断。

CP的场景:满足C舍弃A,强调一致性。

跨行转账:一次转账请求要等待双方银行系统都完成整个事务才算完成,只要其中一个失败另一方执行回滚操作。

开户操作:在业务系统开户同时要在运营商开户,任何一方开户失败该用户都不可使用,所以要满足CP。

AP的场景:满足A舍弃C,强调可用性。

订单退款,今日退款成功,明日账户到账,只要用户可以接受在一定时间内到账即可。

注册送积分,注册成功积分在24分到账。

支付短信通信,支付成功发短信,短信发送可以有延迟,甚至没有发送成功。

在实际应用中符合AP的场景较多,其实虽然AP舍弃C一致性,实际上最终数据还是达到了一致,也就满足了最终一致性,所以业界定义了BASE理论。

什么是BASE理论?

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。

基本可用:当系统无法满足全部可用时保证核心服务可用即可,比如一个外卖系统,每到中午12点左右系统并发量很高,此时要保证下单流程涉及的服务可用,其它服务暂时不可用。

软状态:是指可以存在中间状态,比如:打印自己的社保统计情况,该操作不会立即出现结果,而是提示你打印中,请在XXX时间后查收。虽然出现了中间状态,但最终状态是正确的。

最终一致性:退款操作后没有及时到账,经过一定的时间后账户到账,舍弃强一致性,满足最终一致性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】一维数组练习案例 - 五只小猪称体重

目录 1、缘起 2、案例描述 3、代码 4、总结 1、缘起 最近在黑马程序员 UP 主那里学习 C 编程语言,学习到了【第44节】一维数组练习案例 - 五只小猪称体重 知识点。找出五只小猪中最重的小猪,这不就是基本算法中的 "求最大值算法" 嘛。 为…

ChatGPT相关核心算法

ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合。本文将分别介绍作为其实现基础的 Transformer 模型、激发出其所蕴含知识的Prompt/Instruction Tuning 算法、其涌现出的思维链能力、以及确保其与人类意图对齐的基于人类反馈的强化学习算法。 1.基于Transformer的预…

STM32F4_时钟系统精讲

目录 1. 什么是系统时钟 2. 时钟树 2.1 LSI 2.2 LSE 2.3 HSI 2.4 HSE 2.5 PLLCLK 2.6 SYSCLK 2.7 HCLK 2.8 PCLK1 2.9 PCLK2 2.10 RTC/AWU 3 SysTick定时器 3.1 为什么会有Systick定时器? 3.2 SysTick定时器的作用 3.3 SysTick定时器的寄存器 4.…

DAMA-CDGA/CDGP数据治理认证考试地点一般有哪些?

据目前数据统计,进行过DAMA-CDGA/CDGP数据治理认证考试的地区主要是一线城市及直辖市,主要有:北京、上海、广州、深圳、西安、杭州、成都、重庆、武汉、厦门、太原、甘肃、长沙等。(*当所在城市报名人数达到25人以上方可增加考场开…

C++基本语法

C 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类…

SpringBoot2基础入门 --- 了解自动配置原理

一、SpringBoot特点 1.1、依赖管理 父项目做依赖管理 依赖管理 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent>…

固定资产AFAB进行折旧选择页面的各个选项分别是什么意思?

固定资产AFAB进行折旧选择页面的“记账运行原因”的4个选项&#xff0c;及下面的各个选项分别是什么意思&#xff1f; 一、“记账运行原因”的4个选项&#xff1a; 1&#xff0c;计划内记账运行&#xff08;Planned posting run&#xff09;&#xff1a;上期折旧成功运行&…

测试---

1.加载测试专用属性 1.在启动测试环境时可以通过properties参数设置测试环境专用的属性 SpringBootTest(properties {"test.valuekllda"}) public class PropertiesTest {Value("${test.value}")private String msg; ​Testpublic void testPro(){System…

初识MQ——springCloud

目录 同步通讯 同步调用存在的问题 优点 异步通讯 优势 缺点 MQ常见框架 同步通讯 同步调用存在的问题 1、耦合度高 2、性能下降 3、资源浪费 4、级联失败 优点 时效性强 &#xff0c;可以立即得到结果 异步通讯 异步调用常见实现就是事件驱动模式 优势 1、解除耦合 2、…

【关于Linux中----多线程(一)】

文章目录认识线程创建线程线程优点和缺点创建一批线程终止线程线程的等待问题认识线程 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&a…

高通开发系列 - linux kernel内核升级msm-4.9升级至msm-4.19(1)

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 报错和警告问题中断警告的解决方案Unknown SOC ID问题解决方法msm-vidc panic错误系统时钟功能RPM功能调试共享内存smem调试之前移植过…

SpringCloud Alibaba Nacos

文章目录第一章 SpringCloud Alibaba1.1概述1.2 主要功能1.3 组件第二章 SpringCloud Alibaba Nacos服务注册与配置中心2.1 Nacos简介2.2 安装Nacos2.3 Nacos作为服务注册中心一、服务提供者二、服务消费者三、服务注册中心对比2.4 Nacos作为服务配置中心一、Nacos基础配置项目…

【C++笔试强训】第六天

选择题 1. 解析&#xff1a;十进制转换为八进制就是不断的除8&#xff0c;取余数。十进制转换成其他进制的数就是除以进制&#xff0c;取余。 解析&#xff1a;注意printf的转换&#xff0c;%%只会打印一个%&#xff0c;所以选A。 解析&#xff1a;由于()的原因p先和*结合&…

某面试官分享经验:看求职者第一眼,开口说第一句话,面试结果就差不多定了,准确率高达90%以上...

我们以前分享过许多经验&#xff0c;但大多是站在打工人的视角上&#xff0c;今天给大家带来一个面试官的经验&#xff1a;1. 看求职者第一眼&#xff0c;开口说第一句话&#xff0c;面试结果就差不多定了&#xff0c;准确率高达90%以上。2. 绝不考八股文&#xff0c;如果问技术…

docker安装MongoBD(超详细)

一、安装docker 推荐文章&#xff1a;https://blog.csdn.net/Sumuxi9797926/article/details/127313307?spm1001.2014.3001.5502 二、创建主机挂载配置目录 data目录存放mongodb数据库文件&#xff0c;删除重启容器不会丢失 mkdir -p /docker/mongodb/data && cd …

马云回国,首谈ChatGPT

马云今天回国了&#xff0c;这是一个备受关注的消息。 作为中国最具代表性的企业家之一&#xff0c;马云在过去的二十多年里&#xff0c;带领阿里巴巴从一个小小的创业公司&#xff0c;发展成为全球最大的电商平台之一&#xff0c;同时也推动了中国互联网行业的发展。 他的回…

Redis高可用之持久化

目录 一、高可用 什么是高可用 二、Redis持久化 持久化功能 RDB持久化 触发条件 bgsave执行流程 AOF持久化 执行流程 命令追加 文件写入和文件同步 文件重写 文件重写流程 三、RDB和AOF的优缺点 RDB持久化的优缺点 优点 缺点 AOF持久化优缺点 四、Redis性能管…

修改Hive运⾏⽇志的存放位置

默认情况下&#xff0c;Hive的运⾏⽇志存放在/tmp/root/hive.log ⽬录下&#xff08;root是当前⽤户登录 ⽤户名&#xff09;。修改hive的⽇志存放到/export/servers/hive/logs⽬录下。1. cd /export/server/hive/conf/,找到下面的文件修改/export/server/hive/conf/hive-log4j…

STM32——毕设远程室内灯光控制系统

运程室内灯光控制系统一、功能设计二、硬件选择三、按键说明四、产品主界面展示一、功能设计 本毕设以STM32 F103C8T6为主控核心板智能灯光控制系统,开发的简单易行的智能灯光控制系统,由智能手机通过蓝牙或无线与单片机系统的蓝牙或无线模块进行通信控制单片机板子上的led进行…

Fail-Fast机制和ConcurrentModificationException并发修改异常

目录说明Fail-Fast机制Fail-Fast机制的理解如何解决Fail-Fast错误机制的问题说明 Fail-Fast机制和ConcurrentModificationException并发修改异常是我们在编写代码的时候经常遇到的问题和异常&#xff0c;我们需要搞清楚这个机制是什么东西并且为什么会抛出这个异常&#xff0c;…