了解分布式事务与本地事物基本概念

news2024/11/14 14:15:41

一、本地事物

1、事物的基本性质

数据库事物的几个特性:原子性、一致性、隔离性、持久性,简称ACID

        原子性:一系列的操作整体不可拆分,要么全成功,要么同时失败。

        一致性:数据在事物的前后,业务整体一致。

        隔离型:事物之间互相隔离。

        持久性:一旦事物成功,数据一定要落盘在数据库。

 2.事物隔离级别

读未提交(READ UNCOMMITTED)

会读到未提交事物的数据,此现象称为脏读

读已提交(READ COMMITTED)

一个数据可以读取到另一个已提交的事物,多次读取会造成不一样的结果,此现象称为不可重复读问题。(Oracle,SQl Server的默认隔离级别)

可重复读(REPEATABLE READ)

MySQL的默认隔离级别,在同一事物里,select的结果是事物开始时时间点的状态,因此同样的select操作读取到的结果是一致的,但是会有幻读现象

幻读:一个事物按照条件查询数据时,没有对应的数据行,但是插入数据时又发现这行数据已经存在,好像出现了幻影。

序列化(SERIALIZABLE)

串行化顺序执行,MySQL数据库的InnoDB引擎会给读操作隐式加一把读共享锁,从而避免脏读、幻读和不可重复读问题。

3.事物传播行为

PROPAGATION_REQUIRED(默认):如果当前没有事物,就创建一个新的事务,如果当前存在事物就加入该事物。

PROPAGATION_SUPPORTS:支持当前事物,如果当前存在事物就加入该事物,如果不存在事物,就以非事物之行。

PROPAGATION_MANDATORY:支持当前事物,如果当前存在事物,就加入该事物,如果当前不存在事物,就抛出异常。

PROPAGATION_REQUIRES_NEW:创建新事物,无论当前存不存在事物,都创建新事物。

PROPAGATION_NOT_SUPPORTED:以非事物方式执行操作,如果当前存在事物,就把当前事物挂起。

PROPAGATION_NEVER:以非事物方式执行,如果当前存在事物,则抛出异常。

PROPAGATION_NESTED:如果当前存在事物,则在嵌套事物内执行。如果当前没有事物,则执行与PROPAGATION_REQUIRED类似的操作。

二、分布式事务

1.为什么有分布式事务

        在分布式环境下,一个事物可能涉及到多个模块服务之间调用,为了保障事务的原子性,分布式事务是最好的解决方案。

分布式事务是企业集成种的一个技术难点,也是每一个分布式系统中都会涉及到的一个东西,特别是在微服务架构中,无法避免

2.CAP定理与BASE理论

1.CAP定理

一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻是同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。

分区容错性(Partition tolerance):大部分分布式系统都分布在多个子网络。每个自网络叫做一个区。分区容错性的意思是,区间通讯可能失败。

CAP原则指的是,三个要素最多只能同时实现亮点,不可三者兼顾。 

一般来说,分区容错无法避免,因此我们可以任认为CAP的P总是成立的,CAP定理告诉我们,剩下的C和A无法同时做到。

2.面临的问题

大多数互联网应用场景,主机多,部署分散,集群规模越来越大,所以节点故障、网络故障是常态,而且要保障服务的高可用,即保证P和A,舍弃C。

3.BASE理论

即使无法做到强一致,但可以采用适当的弱一致性,即最终一致性

BASE是指

        基本可用:指分布式系统中出现故障的时候,允许损失部分可用性。需要注意的是,基本可用绝不等于系统不可用

        --响应时间上的损失:正常情况下搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于故障,查询结果的响应时间增肌到1-2秒。

        --功能上的损失:购物网站购物高峰时,为了保护系统的稳定性,部分消费者可能会被引导            到一个降级页面。

        软状态:指允许系统存在中间状态,该中间状态不会影响系统整体的可用性。分布式存储中一般一份数据会有多个副本,允许不同副本同步的延迟时就是软状态的体现。

        最终一致性:是指系统中所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

4.强一致性、弱一致性、最终一致性

        从客户端角度,多进程并发访问时,更新过的数据在不同进程如果获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续访问看到,这是强一致性。如果能容忍后续的部分或全部访问不到,是弱一致性。如果经过一段时间后要求能访问到最新更新的数据,则是最终一致性

三、分布式事务解决方案   

1.2pc模式

数据库支持的2PC(二阶提交),又叫XA Transactions.MySQL5.5版本后支持。

XA是一个两阶段提交协议,该协议氛围以下两个阶段。

第一阶段:事务协调器要求每个涉及到事务的数据库预提交此操作,并反映是否可以提交。

第二极端:事务协调器要求每个数据库提交数据。

如果有任何一个数据库否决此次提交,那么所有数据库都会被要求回滚他们在此事物中的那部分信息

2.柔性事物-TCC事物补偿型方案

刚性事物:运训ACID原则,强一致性。

柔性事物:遵循BASE理论,最终一致性; 

与刚性事物不同,柔性事物允许一定时间内,不同节点的数据不一致,但要求最终一致

  • 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
  • 二阶段 commit 行为:调用 自定义 的 commit 逻辑。
  • 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。

3.柔性事物-最大努力通知型方案

按照规律进行通知,不保证数据一定能够通知成功。但会提供可查询操作接口进行核对。这种方案是结合MQ进行实现,例如:通过MQ发送http请求,设置最大通知次数。达到通知次数后即不在通知。

4.柔性事物-可靠消息+最终一直性方案(异步确保型)

实现:业务处理服务在业务事物提交前,向实时消息服务请求发送消息,实时消息服务只鸡了消息数据,而不发送。业务处理服务在业务事物提交后,向实时消息服务确认发送。只有在得到确认发送执行后,实时消息服务才会真正的发送。

 

        

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

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

相关文章

SpringMVC上

SpringMVC介绍 MVC模型 MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分: Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用…

Typora教程

1 TyporaChina https://typorachina.com/guide/

【C语言必学知识点七】坚决不允许你还不知道C/C++程序如何对内存进行分区!!!

动态内存管理——详细解读C/C程序中的内存分区 导读一、C/C程序中的内存分区二、常见的动态内存的错误2.1 内存开辟失败后对空指针进行解引用2.2 对已开辟好的空间进行越界访问2.3 free不是有动态函数开辟的空间2.4 free动态内存开辟空间的一部分2.4.1 free函数的底层逻辑 2.5 …

【HarmonyOS】- 内存优化

文章目录 知识回顾前言源码分析1. onMemoryLevel2. 使用LRUCache优化ArkTS内存原理介绍3. 使用生命周期管理优化ArkTS内存4. 使用purgeable优化C++内存拓展知识1. Purgeable Memory总结知识回顾 前言 当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应…

Excel文档的读取【2】

读取了工作簿对象后,下一步就是读取指定的工作表。每个工作簿中,都包含一个或多个工作表。每个工作表,都有一个名称。阿珍收到的Excel文件,由两个工作表组成,分别为“销售商品”和“销售订单数据”。 使用print输出…

基于移动互联网的校内物业报修管理系统设计与实现(论文+源码)_kaic

基于移动互联网的校内物业报修管理系统设计与实现 摘  要 校园后勤服务对于学校的发展至关重要,它不仅是学校管理的基石,也是实现教育目标的关键因素,为学生提供优质的生活环境。如果学校能够提供出色的后勤保障,让师生无需担心…

【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程保时捷车主提车交车仪式感AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE软件 把AE模板导入…

240908-Linux通过ln设置软链接关联大模型文件

在Linux中,您可以使用ln命令来创建软链接(符号链接)。软链接是一种特殊类型的文件,它指向另一个文件或目录。以下是如何设置软链接的步骤: 创建软链接 基本语法: ln -s [目标文件或目录] [软链接的名称]示…

【SpringBoot】电脑商城-12-订单功能

创建订单 1 订单-创建数据表 1.使用use命令先选中store数据库。 USE store;2.在store数据库中创建t_order和t_order_item数据表。 CREATE TABLE t_order (oid INT AUTO_INCREMENT COMMENT 订单id,uid INT NOT NULL COMMENT 用户id,recv_name VARCHAR(20) NOT NULL COMMENT …

碎碎念,只是一些关于人工智能的随笔记录。

🥮随笔 本篇将毫无逻辑,只是写到哪儿算哪儿,只是用来记录着玩儿。 关键学习期的概念 关键学习期(Critical Learning Periods)是一个在生物学和人工智能领域都有研究的概念。在生物学中,关键学习期指的是…

CAN总线的位同步详细讲解

接收方数据采样 (1)CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长 (2)发送方以约定的位时长每隔固定时间输出一个数据位 (3)接收方以约定的位时长每隔固定…

数据结构与算法——Java实现 4.数组

目录 一、数组 — 概述 1.定义 2.特点 3.公式 小测试 二、数组的性能 1.空间占用 2.随机访问 三、动态数组 1.实现动态数组 2.新增元素(最后一个元素位置) 3.新增元素、数组扩容 4.检查数组容量 5.类中定义的其他方法 ① 按索引查找元素 ② 返回数组长度…

python例子:相片处理工具(可视化)

作品名称:相片处理工具(可视化) 开发环境:PyCharm 2023.3.4 python3.7 用到的库:sys、os、cv2、numpy、math和random 作品简介:运行例子后,先选择需要处理的图片,然后可对图片进…

鸿蒙开发中实现自定义弹窗 (CustomDialog)

效果图 #思路 创建带有 CustomDialog 修饰的组件 ,并且在组件内部定义controller: CustomDialogController 实例化CustomDialogController,加载组件,open()-> 打开对话框 , close() -> 关闭对话框 #定义弹窗 (CustomDial…

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线…

springboot学习(10)(自定义starter)(自定义mybatis的starter)(解决:java:错误:不支持发行版本?)

目录 一、引言 (1)为什么要学习自定义starter? (2)如何自定义starter? 二、制作一个自定义mybatis-starter (1)需求 (2)步骤 (3)开始实…

SQL各子句的执行顺序

FROM 、WHERE 、GROUP BY 、HAVING、 SELECT、ORDER BY 、LIMIT 执行顺序如下: FROM 子句:确定查询的基础表和视图。 WHERE 子句:基于指定的条件过滤记录。 GROUP BY子句:按指定的列分组结果集中的记录。 HAVING子句&#xff…

网上订餐新体验:SpringBoot技术驱动

1 绪论 1.1 研究背景 随着互联网技术的快速发展,网络时代的到来,网络信息也将会改变当今社会。各行各业在日常企业经营管理等方面也在慢慢的向规范化和网络化趋势汇合[13]。电子商务必将成为未来商务的主流,因此对于餐饮行业来说,…

Spring2~~~

注解配置Bean Spring的 IOC 容器检查到注解就会生成对象&#xff0c;但这个注解的具体含义不会识别 配置自动扫描的包 <!--配置容器要扫描的包1. component-scan 要对指定包下的类进行扫描, 并创建对象到容器2. base-package 指定要扫描的包3. 含义是当spring容器创建/初始…

类和对象(中)- C++

个人主页点这里~ 1. 类的默认成员函数 在C中&#xff0c;当你定义一个类时&#xff0c;即使没有显式地声明它们&#xff0c;编译器也会为该类生成一些默认成员函数。这些默认成员函数在特定情况下非常有用&#xff0c;尤其是当你进行对象拷贝、赋值、销毁或动态内存管理时。 …