事务:分布式事务与本地事务的区别

分布式事务章节

分布式事务:2PC与3PC的区别-CSDN博客

分布式事务:X/Open DTP分布式事务处理模型与分布式事务处理XA规范-CSDN博客

事务简介

事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。事务是由一组操作构成的可靠的独立的工作单元,事务应该具有4个属性:(A)原子性、(C)一致性、(I)隔离性、(D)持久性。这四个属性通常称为ACID特性。

事务的四个特征:

1、Atomic原子性

事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事务才算成功。

2、Consistency一致性

事务的执行不能破坏数据库数据的完整性和一致性,事务在执行之前和之后,数据库都必须处于一致性状态。

3、Isolation隔离性

在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。自身的数据是不会被其他的并发事务修改数据的。

4、Durability持久性

持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中对应数据的状态变更就应该是永久性的。即使发生系统崩溃或机器宕机,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束时的状态。

本地事务与分布式事务的区别

本地事务分布式事务
支持特性严格的ACIDCAP理论中的中的CP或者AP
一致性范围只能是单一的资源多个资源
复杂性简单复杂(通过复杂的协议及通信来确保一致性,故障处理难度高)
性能低(多个资源之间的通信及自身事务的性能都会有影响)

什么是本地事务

整个服务操作只能涉及一个单一的数据库资源或者资源管理器中执行的一些列数据库操作,这类基于单一资源操作单元的访问,并且由资源管理器本地管理被称为本地事务。本地事务的优点就是支持严格的ACID特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。在一个本地事务中,事务的开始、中间的操作和最终的提交与回滚都只是涉及单个数据源。本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。

什么是分布式事务?

分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,保证不同数据的一致性。

        对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题,即使这些操作分布在不同的网络环境和物理位置中。在分布式事务中,通常需要跨多个独立的服务或数据库进行协调,以确保所有参与事务的子事务要么全部成功完成,要么在任何一部分失败时,所有部分的操作都能回滚到事务开始前的状态,必须是一个整体性的事务,从而保持数据的一致性。

        例如目前的微服务体系当中:创建一个关于购买商品的订单,会涉及到订单服务,库存服务,支付服务等不同的服务。这些服务都有自己各自的数据库,并管理自己的本地事务。所有的过程作为一个分布式全局事务,这些过程中的操作要么全部成功,要么全部失败。

        相比于数据库事务或本地事务中的ACID,分布式事务有CAP理论:

C:一致性(Consistency),代表数据在任何时刻、任何分布式节点中所看到的都是符合预期的。确保所有用户或节点在同一时间看到的是系统的最新一致状态,即任何数据更新后,所有相关节点都能立即看到这一更新。
A:可用性(Availability),代表系统不间断地提供服务的能力。要求系统在任何正常操作情况下都必须响应客户端请求,并且能够提供有意义的服务结果,即使在部分节点出现故障时也能找到并返回一个可用的数据副本给客户端
P:分区容错性(Partition Tolerance),代表分布式环境中部分节点因网络原因而彼此失联后,即与其他节点形成“网络分区”时,系统仍能正确地提供服务的能力。

        CAP定理指出,在设计和实现共享数据的分布式系统时,无法同时保证一致性(Consistency)可用性(Availability)分区容错性(Partition Tolerance)这三个属性。该定理强调在实际应用中,系统必须在这些关键特性之间做出权衡,最多只能同时确保任意两个。

        现实业务环境中的分布式系统往往需要结合ACID(原子性、一致性、隔离性和持久性)事务特性和CAP原则来满足特定业务需求,而非机械地追求某一种绝对的系统模型。设计的核心目标是灵活适应不同的应用场景,以达到满足业务需求与技术挑战之间的平衡。

        分布式事务实现起来比本地事务复杂得多,因为它们需要解决网络延迟、节点故障以及不同数据库系统的兼容性等问题。常见的分布式事务解决方案包括两阶段提交(2PC, Two-Phase Commit)、三阶段提交(3PC, Three-Phase Commit)、补偿事务(TCC, Try-Confirm-Cancel)、Saga模式以及基于消息队列的最终一致性方案等。

总结

        最简单来讲,本地事务能够高效较简单得用于单个资源的处理。分布式事务用于多个资源的处理,比本地事务要更加复杂。

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

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

相关文章

[SWPUCTF 2018]SimplePHP1

打开环境 有查看文件跟上传文件,查看文件里面显示没有文件url貌似可以文件读取 上传文件里面可以上传文件。 先看一下可不可以文件读取 /etc/passwd不能读取,源码提示flag在f1ag.php 看看能不能读取当前的文件, 先把代码摘下来 file.php …

LPC系列一个定时器不同频率

1.背景 最近研究的LPC804里只有一个ctimer,很多时候用的捉襟见肘的,官方给了一份双匹配的参考例程,不过实际用处不大。不过我花了一晚上的时间,终于研究出来将一个定时器拆成四个定时器用的办法了。这个方法适用于用回调函数的LP…

Fastbee物联网项目新手快速入门

一,前提条件 后端环境准备如下: 正式环境推荐硬件资源最低要求4c8G,硬盘40G。JDK 1.8.0_2xx (需要小版本号大于200) 。Maven3.6.3。(IDEA启动时使用IDEA默认自带的版本即可)。 启动fastbee之前,请先确定…

go语言(十七)----json

1、结构体转json package mainimport ("encoding/json""fmt" )type Movie struct{Title string json:"title"Year int json:"year"Price int json:"rmb"Actors []string json:"actors" }func main() {movie : Mo…

《A++ 敏捷开发》- 6 估算软件规模

为什么要估规模 规模可以帮我们: 依据历史数据策划,例如估算工作量、工期。归一(Normalize)不同项目作比较。知道现在水平。 依据历史数据策划先把项目分成组件,参考以往类似的组件所花工作量,估算整个项目的总工作量。规模大小…

Spring框架-AOP底层实现原理

文章目录 AOP底层实现原理AOP实现原理分析Java设计模式(代理模式)静态代理JDK动态代理CGLIB动态代理 AOP操作术语 AOP底层实现原理 AOP实现原理分析 1、AOP采取横向抽取机制,取代传统的纵向抽取机制(继承关系)。 2、…

腾讯云一键部署搭建幻兽帕鲁联机服务器教程

幻兽帕鲁(Palworld)是一款多人在线游戏,为了获得更好的游戏体验,许多玩家选择自行搭建游戏联机服务器,但是如何搭建游戏联机服务器成为一个难题,腾讯云提供了游戏联机服务器一键部署方案,让大家…

Java笔记 --- 五、File

五、File 概述 将字符串变成File对象,再去使用里面的方法 父级路径:除了文件本身的路径 C:\Users\Desktop 子级路径:文件名 m.txt 常见的成员方法 判断、返回 length 只能获取文件的大小(字节数量) 创建、删除 delete方法默认只能删除…

搜索<2>——记忆化搜索与剪枝

Part 1:记忆化搜索 记忆化搜索其实就是拿个数组记录下已经得到的值,这样再遇到的时候直接调用即可。 P1464: 虽然此题好像不用记忆化也行,但我们还是老老实实写个记忆化吧。没什么困难的地方,就是它叫你怎么干你就怎么干,记得开…

【Java 数据结构】栈和队列

栈和队列 1. 栈(Stack)1.1 概念1.2 栈的使用1.3 栈的模拟实现1.4 栈的应用场景1.5 概念区分 2. 队列(Queue)2.1 概念2.2 队列的使用2.3 队列模拟实现2.4 循环队列 3. 双端队列 (Deque)4. 面试题 1. 栈(Stack) 1.1 概念 栈:一种特殊的线性表,其只允许在…

Cyberdog2 docker环境软件源无法被验证问题

搭建docker系统后更新软件源sudo apt-get update出现异常 经过查询GPT,使用如下方式成功解决 从keyserver.ubuntu.com获取缺失的公钥,并添加到apt-key中。具体命令如下: gpg --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C6…

怎么把文章变成视频?原来这么简单

大家有没有发现,在各个平台浏览文章的时候总会发现很多图文相结合的长篇文章,对于不喜欢看长图文的人来说,长篇的图文会带来很多的负担,于是就有很多人想要把长篇的图文转换成视频,那么该如何转换呢? 首先&…

CMake简明教程 笔记

推荐B站视频:1.1 Cmake构建项目的流程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1xa4y1R7vT?p1&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 >>目录 1)CMake初体验 CMake构建流程Windows下使用CMake构建项目Linux下使用CMake构…

C#,数据检索算法之插值搜索(Interpolation Search)的源代码

数据检索算法是指从数据集合(数组、表、哈希表等)中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文提供插值搜索(Interpolation Search)的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.…

08.Elasticsearch应用(八)

Elasticsearch应用(八) 1.为什么需要相关性算分 我们在文档搜索的时候,匹配程度越高的相关性算分越高,算分越高的越靠前,但是有时候我们不需要算分越高越靠前我们可能需要手动影响算分来控制顺序比如广告&#xff08…

一文搞懂Secure Boot (安全启动)

何为安全启动? 随着汽车新四化的发展,尤其是网联化及自动驾驶的推进,汽车网络信息安全显得越来越重要。 随着高级驾驶辅助(ADAS)及自动驾驶的推出,车辆动力及制动控制需要部分或全部授权给智能驾驶系统,而车辆又暴露…

怎么测试app?app的测试技巧是什么?

前言 今天笔者想和大家来唠唠app测试,现在的app有非常的多,这些app都是需要经过测试之后才能发布到应用市场中,app已经成为了我们日常生活中不可或缺的一部分了,但它的功能必须强大,才能受到消费者的重视,…

WordPress如何自定义日期和时间格式?附PHP日期和时间格式字符串

WordPress网站在很多地方都需要用到日期和时间,那么我们应该在哪里设置日期和时间呢?又如何自定义日期和时间格式呢?下面boke112百科就跟大家一起来学习一下PHP标准化的日期和时间格式字符串。 特别说明:格式字符是标准化的&#…

【控制算法笔记】卡尔曼滤波(一)——基本概念和一维卡尔曼估计实现(python,C++)

本文是个人学习笔记,包含个人理解,如有错误欢迎指正。 前言–关于Kalman Filter 在工程实践中卡尔曼滤波器的应用场景非常丰富,尤其是针对需要大量连续数据处理的自动驾驶和工业现场控制场景中,几乎离不开卡尔曼滤波的踪迹。 在多…

类和对象 第五部分第二小节:左移运算符重载

作用&#xff1a;可以输出自定义数据类型 代码案例&#xff1a; 1.成元函数重载&#xff1a; 利用成员函数重载写出来的代码为 void operate<<(cout)等于p<<cout&#xff0c;与预期效果不符。因此我们不会利用成员函数重载<<运算符&#xff0c;因为无法实现c…