分布式事务:基本概念

news2024/11/29 0:36:29

文章目录

  • 一、基础概念
    • 1、什么是事务
    • 2、本地事务
    • 3 、分布式事务
    • 4、分布式事务产生的场景
  • 二、分布式事务基础理论
    • 1、CAP理论
      • (1)理解CAP
      • (2)CAP组合方式
      • (3)总结
    • 2、BASE理论
  • 三、分布式事务解决方案之2PC(两阶段提交)
    • 1、什么是2PC
    • 2、解决方案
      • (1)传统2PC
      • (2)seata实现2PC
    • 3、seata实现2PC事务
      • (1)业务说明
      • (2)程序组成部分
      • (3)创建数据库
  • 四、

一、基础概念

1、什么是事务

事务可以看做事一次大的活动,它由不同的小的活动组成,这些活动要么全部成功,要么全部失败。

2、本地事务

在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。

数据库事务的四大特性ACID:

  • A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。
  • C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。比如:张三向李四转100元,转账前后数据是正确状态这叫一致性。如果出现张三转出了100元,李四账户没有增加100元这就出现了数据错误,就没有达到一致性。
  • I(Isolation):隔离性,数据库中的事务一般都是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事务不能看到其他事务运行过程的中间状态。通过配置事务隔离级别可以避脏读、重复读等问题。
  • D(Durability):持久性,事务完成之后,该事务对数据的更改会被持久化到数据库,且不会被回滚。

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

3 、分布式事务

随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用

分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。

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

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

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

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

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

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

4、分布式事务产生的场景

1、跨JVM进程产生分布式事务:典型的场景就是微服务架构;微服务之间通过远程调用完成事务操作。 比如:订单微服务和库存微服务,下单的同时订单微服务请求库存微服务减库存。

2、跨数据库实例产生分布式事务:单体系统访问多个数据库实例;当单体系统需要访问多个数据库(实例)时就会产生分布式事务。 比如:用户信息和订单信息分别在两个MySQL实例存储,用户管理系统删除用户信息,需要分别删除用户信息及用户的订单信息,由于数据分布在不同的数据实例,需要通过不同的数据库链接去操作数据,此时产生分布式事务。

3、多服务访问同一个数据库实例:比如:订单微服务和库存微服务即使访问同一个数据库也会产生分布式事务,原因就是跨JVM进程,两个微服务持有了不同的数据库链接进行数据库操作,此时产生分布式事务。

二、分布式事务基础理论

通过前面的学习,我们了解到了分布式事务的基础概念。与本地事务不同的是,分布式系统之所以叫分布式,是因为提供服务的各个节点分布在不同机器上,相互之间通过网络交互。不能因为有一点网络问题就导致整个系统无法提供服务,网络因素成为了分布式事务的考量标准之一。因此,分布式事务需要更进一步的理论支持,接下来,我们先来学习一下分布式事务的CAP理论。

在讲解分布式事务控制解决方案之前需要先学习一些基础理论,通过理论知识指导我们确定分布式事务控制的目标,从而帮助我们理解每个解决方案。

1、CAP理论

(1)理解CAP

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

  • 一致性(consistency)
    在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(Availability)
    在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • 分区容惜性(Partitiontolerance)
    大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。
    分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

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

  • CP要求一致性(有一个没同步好就不可用)。
  • AP要求高可用。

下边我们分别来解释:

为了方便对CAP理论的理解,我们结合电商系统中的一些业务场景来理解CAP。如下图,是商品信息管理的执行流程:
在这里插入图片描述
整体执行流程如下:

  • 商品服务请求主数据库写入商品信息(添加商品、修改商品、删除商品)。
  • 主数据库向商品服务响应写入成功。
  • 商品服务请求从数据库读取商品信息。

C - Consistency:
一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态。

上图中,商品信息的读写要满足一致性就是要实现如下目标:

  • 商品服务写入主数据库成功,则向从数据库查询新数据也成功。
  • 商品服务写入主数据库失败,则向从数据库查询新数据也失败。如何实现一致性?
    • 写入主数据库后要将数据同步到从数据库。
    • 写入主数据库后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,以免在新数据写入成功后,向从数据库查询到旧的数据。

分布式系统一致性的特点

  • 由于存在数据同步的过程,写操作的响应会有一定的延迟。
  • 为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源。
  • 如果请求数据同步失败的结点则会返回错误信息,一定不会返回旧数据

A - Availability :
可用性是指任何事务操作都可以得到响应结果,且不会出现响应超时或响应错误。上图中,商品信息读取满足可用性就是要实现如下目标:

  • 从数据库接收到数据查询的请求则立即能够响应数据查询结果。
  • 从数据库不允许出现响应超时或响应错误。如何实现可用性?
    • 写入主数据库后要将数据同步到从数据库。
    • 由于要保证从数据库的可用性,不可将从数据库中的资源进行锁定。
    • 即时数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据,如果连旧数据也没有则可以按照约定返回一个默认信息,但不能返回错误或响应超时。

分布式系统可用性的特点:

  • 所有请求都有响应,且不会出现响应超时或响应错误。

P - Partition tolerance :
通常分布式系统的各各结点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间通信失败,此时仍可对外提供服务,这叫分区容忍性。

上图中,商品信息读写满足分区容忍性就是要实现如下目标:

  • 主数据库向从数据库同步数据失败不影响读写操作。
  • 其一个结点挂掉不影响另一个结点对外提供服务。如何实现分区容忍性?
    • 尽量使用异步取代同步操作,例如使用异步方式将数据从主数据库同步到从数据,这样结点之间能有效的实现松耦合。
    • 添加从数据库结点,其中一个从结点挂掉其它从结点提供服务。
      分区容忍性分是布式系统具备的基本能力。

(2)CAP组合方式

(3)总结

2、BASE理论

三、分布式事务解决方案之2PC(两阶段提交)

1、什么是2PC

2、解决方案

(1)传统2PC

(2)seata实现2PC

3、seata实现2PC事务

(1)业务说明

(2)程序组成部分

(3)创建数据库

四、

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

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

相关文章

【Java日志系列】Logback日志框架

目录 前言 一、Logback简介 二、Logback组件 三、快速入门 四、配置文件的使用 1. 配置文件中的标签 1.1 logger标签 1.2 root标签 1.3 appender标签 1.4 filter标签 1.5 encoder标签 1.6 property标签 2. 常见的Appender 2.1 ConsoleAppender 2.2 FileAppender…

瓜子二手车源码开发

瓜子二手车作为国内知名的二手车交易平台,其开发需求与功能架构主要围绕提升用户体验、保障交易安全、优化交易流程以及提供全面服务等方面展开。以下是对瓜子二手车开发需求与功能架构的详细分析 一、开发需求 用户需求: 便捷性:用户希望能…

ReTagList标签列表(API)

组件实现基于 Vue3 + Element Plus + Typescript,同时引用 vueUse + lodash-es + tailwindCss (不影响功能,可忽略) 基于ElTag实现的Tag列表,支持Tag列表多选,动态Tag列表 ReTagList标签列表 基础 简单展示Tag列表,可通过size指定尺寸 查看 /demo/tag-list/basic.md …

叉车门口拐角盲区防撞系统,精准微波距离测距,助力企业安全生产

叉车流动性强、作业场所不固定,是特种设备管理的薄弱环节。如何管住叉车、管好叉车,保障作业人员安全一直都是重点话题,引入智慧叉车,使用智能化监管,很多城市相继开展智慧叉车试点工作,给叉车装上“智慧大…

机械学习—零基础学习日志(如何理解概率论4)

当已知一个概率,求解另外一个函数的概率。以下是离散型的概率计算方法。 这里是连续型的,已知概念密度,计算对应的另外一个函数的概率。 这里需要求解对应的原始函数。 这里我们做一道练习题。 《概率论与数理统计期末不挂科|考研零基础入门…

精选这五款热门好用的骨传导耳机,帮你避免踩坑的麻烦!

相信大家都已经深有体会,拿那种常规的入耳式无线蓝牙耳机来做运动耳机,很难满足运动需要。如果选择前两年流行的颈挂式无线运动蓝牙耳机,虽然简单轻巧,但也是入耳式设计,长时间佩戴耳朵不舒服。这样看来,运…

科普篇 | 如何查找参考基因组信息

前 言 很多老师会发现,高通量测序后需要生信分析的过程中,需要填写一个信息分析表。而信息分析表中有一个对生信分析很重要的信息——基因组文件及注释文件。通常这类文件我们都是需要老师提供对应的下载链接,以便于生信直接利用这个链接去…

Git介绍及配置

目录 Git GitHub GitLab Gitee 配置Git 安装git 初次运行 Git 前的配置 注册一个代码托管平台 用户信息 获取 Git 仓库 初始化仓库 克隆现有的仓库 https方式: ssh方式: 上传本地项目至Git仓库 https方式 ssh-key方式 添加个人公钥​ …

【python】PyQt5中的QFrame控件,控制图形的边框样式、阴影效果、形状等属性

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

【Redis】Redis 底层的数据结构(结合源码)

众所周知,Redis 是一个高性能的开源内存数据库,支持多种数据结构(如字符串、哈希、列表和集合),提供持久化选项以确保数据安全,并具备高可用性和分布式功能。 下面我们就来了解一下其底层所使用到的数据结…

包装类和简单泛型

一、包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 注意:除了 Integer 和 Character, 其余基本类型的…

微信怎么恢复好友?找回失联好友,5个有效方法奉上!

微信,这个我们日常沟通不可或缺的工具,但有时会因为一些小疏忽,让我们不小心与好友失去了联系。可能是误删了好友,也可能是换了手机没来得及备份,导致那些熟悉的面孔从列表中消失。 那么,微信怎么恢复好友…

软件设计师全套备考系列文章9 -- 算法设计与分析

软考-- 软件设计师(9)-- 算法设计与分析 文章目录 软考-- 软件设计师(9)-- 算法设计与分析前言一、章节考点二、分治法三、回溯法四、贪心法五、动态规划法 前言 考试时间:每年5月、11月,软件设计师每年都…

当《黑神话:悟空》中的天命人,被AI换脸成老外…

前言 挡不住,根本挡不住! 《黑神话:悟空》,这款由游戏科学公司制作的, 以中国神话为背景的角色扮演游戏,8月20日一上线, 就连续霸榜Steam、WeGame 等平台销量榜首, 肉饼的朋友圈…

软件测试学习笔记丨多表查询及子查询

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31940 一、多表简介 定义:结合两个或多个表来执行SQL数据库操作,这通常涉及到一个或多个表的关联,基于某些共享的列(通常是键)之间…

C++面试基础系列-polymorphic多态性

系列文章目录 文章目录 系列文章目录C面试基础系列-polymorphic多态性Overview1.polymorphic多态性2.编译时多态的实现示例代码:函数重载示例:运算符重载示例:模板示例: 3.运行时多态的实现示例代码 4.编译时多态的优点关于作者 C…

高校考勤小程序的设计与实现---附源码131039

摘 要 随着计算机的发展及网络技术的应用,当今社会正快速向信息自动化社会前进,信息自动化的作用也闲的的尤为重要,特别是各行业的管理领域,智能化信息处理已是提高效率、规范管理、客观审查的最有效方法。近年来,随着…

双模显示器是什么?原来是可变化的显示屏

随着科技的进步和人们对高品质视觉体验需求的增加,显示技术正在经历一场深刻的变革。近年来,双模显示器逐渐引起了广泛关注,成为显示器设计的新趋势。那么什么是双模显示器呢?它都有哪些优势?下面就一起来了解一下。 …

C++学习笔记----4、用C++进行程序设计(三)---- 类间关系

作为一名程序员,会不可避免地碰到不同的类具有相同的特点,或者看起来相互之间有一定的关系。面向对象的编程语言提供许多技术来处理类间的这种关系。比较令人迷惑的部分就是理解 这些关系到底是什么?有两种主要的类间关系--复合关系&#xff…

【三维语义分割模型】PAConv

【版权声明】本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。 参考书籍:《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“【python三维深度学习】python…