分布式事务详解

概述

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

举个例子,使用传统本地事务完成转账逻辑,任一步骤出问题都会回滚

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

但在分布式系统下,就变成这样

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

如果执行到第二步,远程调用成功了,李四增加了金额,但因为网络延迟没能及时响应,那么本地系统就会认为事务失败,从而回滚张三减少金额的操作

分布式事务产生的场景

1. 微服务架构

典型的场景就是微服务之间通过远程调用完成事务操作,比如:订单服务和库存服务,下单的同时,订单服务请求库存服务减库存

2. 单体系统访问多个数据库实例

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

3. 多服务访问同一个数据库

比如:订单服务和库存服务访问同一个数据库也会产生分布式事务,两个服务持有不同的数据库链接进行操作,产生分布式事务

2PC(两阶段提交)

Two-Phase Commit,两阶段提交,指将整个事务流程分为两个阶段,准备阶段(prepare-phase)、提交阶段(commit-phase)

举例:张三和李四聚餐,饭店老板要求先买单,才能出票,两人就商议 AA。只有张三和李四都付款,老板才能出票安排就餐

  1. 准备阶段:老板要求张三付款,张三付款,老板要求李四付款,李四付款
  2. 提交阶段:老板出票,两人拿票就餐

该例形成一个事务,若张三或李四其中一人拒绝付款,或钱不够,老板都不会出票,并且会把已收款退回。整个事务过程由事务管理器和参与者组成,老板就是事务管理器,张三和李四就是事务参与者。事务管理器负责
决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚

部分关系数据库如 Oracle、MySQL 都支持两阶段提交协议:

  1. 准备阶段:事务管理器给每个参与者发送 Prepare 消息,每个数据库参与者在本地执行事务,并写本地的 Undo/Redo 日志,此时事务没有提交(Undo 日志记录修改前的数据,用于数据库回滚,Redo 日志记录修改后的数据,用于提交事务后写入数据文件)
  2. 提交阶段:如果事务管理器收到了参与者的执行失败或者超时消息,直接给每个参与者发送回滚消息;否则,发送提交消息;参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的锁资源

XA 规范

2PC 提供了解决分布式事务的方案,但不同的数据库实现却不一样。为了统一标准,国际开放标准组织 Open Group 定义分布式事务的模型(DTP)和 分布式事务协议(XA)

DTP 模型由以下元素组成:

  • AP(Application Program):应用程序,可以理解为使用 DTP 分布式事务的程序
  • RM(Resource Manager):资源管理器,可以理解为事务的参与者,一般指一个数据库实例,通过资源管理器控制数据库

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QEMU使用步骤

1、安装虚拟机环境:ubuntu-16.04.7-desktop-amd64.iso,下载地址:Index of /ubuntu-releases/16.04.7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2、安装gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz到/opt目录&#xf…

1.Electron初始与安装

这里写目录标题 一、前言二、下载三、简要总结 一、前言 原文以及该系列后续文章请参考:安装Electron 随着前端的不断强盛,现在的前端已经不再满足于网页开发了,而是在尝试能否使用前端的开发逻辑来开发PC端的桌面软件。 即用html、js、css…

BDD - Python Behave 用户自定义配置文件

BDD - Python Behave 用户自定义配置文件 引言默认 behave.ini 配置文件自定义配置文件json 格式的配置文件ini 格式的配置文件 实例应用项目结构代码BDD/Features/user_data.feature 文件BDD/steps/user_data_steps.py 文件BDD/environment.py 文件默认配置文件 behave.ini自定…

初识Qt | 从安装到编写Hello World程序

文章目录 1.前端开发简单分类2.Qt的简单介绍3.Qt的安装和环境配置4.创建简单的Qt项目 1.前端开发简单分类 前端开发,这里是一个广义的概念,不单指网页开发,它的常见分类 网页开发:前端开发的主要领域,使用HTML、CSS …

2024年【T电梯修理】报名考试及T电梯修理复审考试

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理报名考试参考答案及T电梯修理考试试题解析是安全生产模拟考试一点通题库老师及T电梯修理操作证已考过的学员汇总,相对有效帮助T电梯修理复审考试学员顺利通过考试。 1、【多选题】增加旧电梯曳引…

OpenAI突然发布首款文生视频模型——Sora;谷歌发布Gemini 1.5,迈向多模态大模型新时代

🦉 AI新闻 🚀 OpenAI突然发布首款文生视频模型——Sora 摘要:OpenAI发布了首个AI视频模型Sora,可以根据文字指令生成神级效果的长视频,引发了广泛关注和震惊。 Sora模型通过深入理解语言和图像,能够创造出…

AI使用 G-API 实现面部美化算法

介绍 在本教程中,您将学习: 示例面部美化算法的基础知识; 如何使用 G-API 推断管道内的不同网络; 如何在视频流上运行 G-API 管道。 先决条件 此示例需要: 装有 GNU/Linux 或 Microsoft Windows 的 PC(支持 Apple macOS&#xf…

紫微斗数双星组合:天同太阴在子午

文章目录 前言内容总结 前言 紫微斗数双星组合:天同太阴在子午 内容 紫微斗数双星组合:天同太阴在子午 性格分析 天同太阴在子午宫同度,二星皆属水,主智、主多情。天同星为感性的星曜,太阴星性质梦幻,二…

百模大战怎么样了?

百度入场最早,paddlegan/paddlepaddle多年前就布局了中小模型,ERNIE1.0 大模型早在2019年就发布了,只不过效果差,成本高没弄起来。 后来借着chatgpt的东风,百度几乎国内第一时间发布了国产大模型文心一言,文…

java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 宠物医院系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

【论文精读】GPT2

摘要 在单一领域数据集上训练单一任务的模型是当前系统普遍缺乏泛化能力的主要原因,要想使用当前的架构构建出稳健的系统,可能需要多任务学习。但多任务需要多数据集,而继续扩大数据集和目标设计的规模是个难以处理的问题,所以只能…

SpringIOC之support模块ResourceBundleMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…