分布式事务 学习

分布式事务

关系型数据库事务(本地事务)

  • 原子性:构成事务的所有操作,要么都执行完成,要么都不执行/
  • 一致性:在事务执行前后,数据库的一致性约束没有被破坏。
  • 隔离性:并发的两个事务的执行互不干扰
  • 持久性:事务完成后,事务对数据的更改会被持久化到数据库,且不会被回滚。

分布式事务 :涉及多个事务之间网络远程协作的事务

微服务之间通过网络(HTTP)通信。

产生场景:
  • 微服务架构,跨JVM进程产生分布式事务
  • 单体系统访问多个数据库实例,跨数据库实例
  • 多服务访问同一个数据库实例,跨JVM进程,两个微服务持有不同的数据库连接。

CAP理论: 一致性、可用性、分区容忍性

分布式事务控制到哪个程度呢?

  • 具备P市,C、A不能共存
一致性

强一致性: 任何事件查询每个结点的数据都一致。

分区容忍性
  • 通常,分布式系统的各结点部署在不同的子网,就是网络分区。不可避免地会出现,因为网络问题导致结点间通信失败。节点间通信失败时,仍然可对外提供服务就是分区容忍性。
    目标:
  • 主数据库向数据库同步数据失败不印象读写操作。
  • 其中一个结点挂了,不影响其他节点
    实现:
  • 异步取代同步(结点间松散耦合)
  • 一主多从
    分区容忍性是分布式系统具备的基本能力
AP

放弃一致性

CP

放弃可用性

CA

放弃分区容忍性,不进行分区。不考虑网络不同或者结点挂掉的情况。不是标志的分布式系统。常用的关系型数据库

BASE理论(AP的扩展)

强一致性和最终一致性

Basically Available、 Soft state、Eventually consistent

柔性事务

  • 出现故障时,允许部分不可用,包装核心功能可用
  • 最终一致性
  • 软状态: 比如支付中、数据同步中… …

分布式事务解决方案

2PC

两阶段提交协议[准备阶段、提交阶段]
整个事务过程由事务管理器和参与者组成
事务管理器决策事务的提交和回滚。事务参与者负责自己本地事务的提交和回滚。
在这里插入图片描述
在这里插入图片描述

2PC解决方案:
XA方案

2BC的传统方案在数据库层面实现。

DTP分布式事务处理模型
  • 角色:
  • AP:应用程序,使用DTP分布式事务的程序。
  • RM:资源管理器
  • TM:事务管理器
  • 基于数据库的XA协议来实现2PC又称为XA方案,XA : 2PC接口协议。

TM向AP提供应用程序编程接口,AP通过TM提交及回滚事务
TM交易中间件通过XA接口来通知RM数据库事务的开始、结束以及提交、回滚

问题:依赖于数据库,要求数据库支持2PC协议;准备阶段没有正式提交。资源锁需要等两个阶段结束才会释放。

Seata方案

开源的分布式事务框架。性能较好。对业务0侵入。提供2PC及TCC模式的分布式事务解决方案

在这里插入图片描述

TCC: [try cancel Confirm]

try阶段都成功就认为一定能成功;如果Confirm失败则重试,或人工介入处理;
如果有try失败,就回滚成功try的资源。因为try时做了资源预留等操作。

在这里插入图片描述

  • 幂等问题:幂等是指:同一个操作,无论请求多少次,其结果都相同。解决:增加执行状态,每次执行前都查询该状态。
  • 空回滚:没调用try,却调用了Cancel方法。出现原因:一个分支事务所在服务宕机或网络异常,分支事务记录为失败,这时其实没有执行try方法,但是故障恢复后,分布式事务进行回滚调用二阶段的Cancel方法,从而形成空回滚。解决:第一阶段Try方法中插入记录表示第一阶段执行了,Cancel接口读取该记录,判断是否执行了Try.
  • 悬挂:对于分布式事务,其二阶段Cancel比Try接口先执行。出现原因:
    在这里插入图片描述
TCC解决方案

在这里插入图片描述
Hmily

在这里插入图片描述

可靠消息最终一致性方案

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

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

相关文章

【Java小知识点】类加载器的区别

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理Java类加载器的区别🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下🫰&#x1faf…

【SpringCloud微服务项目实战-mall4cloud项目(5)】——mall4cloud-leaf

mall4cloud-leaf 基于美团leaf的生成id服务 分布式id介绍具体代码及使用项目中的生成id模式具体代码分布式id生成使用 分布式id介绍 分布式ID(Distributed ID)是在分布式计算环境中生成的唯一标识符或标识号。在分布式系统中,通常需要唯一标…

Node学习笔记之path模块

path 模块提供了 操作路径 的功能,我们将介绍如下几个较为常用的几个 API: API 说明 path.resolve 拼接规范的绝对路径常用 path.sep 获取操作系统的路径分隔符 path.parse 解析路径并返回对象 path.basename 获取路径的基础名称 path.dirname…

【深度学习】数据集最常见的问题及其解决方案

简介 如果您还没有听过,请告诉您一个事实,作为一名数据科学家,您应该始终站在一个角落跟你说:“你的结果与你的数据一样好。” 尝试通过提高模型能力来弥补糟糕的数据是许多人会犯的错误。这相当于你因为原来的汽车使用了劣质汽…

SL8541 android系统环境+编译

1.Ubuntu系统的安装 最好使用ubuntu18.0.4 2.工具环境包的安装 // 安装Android8.1源码编译环境 sudo apt-get install openjdk-8-jdk --------------ok sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g-multilib --------------ok sudo…

nrf52832 PWM配置

PWM使用时sdk_config.h文件中配置如下:#define PWM_ENABLED 1 sdk_config.h 文件中添加下列配置 // <e> NRFX_PWM_ENABLED - nrfx_pwm - PWM peripheral driver // #ifndef NRFX_PWM_ENABLED #define NRFX_PWM_ENABLED 0 #endif // <q> NRFX_PWM0_ENABLED - Enab…

USGS MODIS 蒸散量数据集

USGS MODIS 蒸散量 这里提供的蒸散量 (ET) 数据集是遥感技术的结果&#xff0c;主要利用 MODIS 热图像和全球天气数据集。该数据集对应于 Climate Engine 使用的全球 ET 产品的第 5 版。它为 2003 年至 2023 年期间的 ET 时空动态提供了宝贵的见解。该数据集的基石是可操作的简…

【自动化测试入门】用Airtest - Selenium对Firefox进行自动化测试(0基础也能学会)

1. 前言 本文将详细介绍如何使用AirtestIDE驱动Firefox测试&#xff0c;以及脱离AirtestIDE怎么驱动Firefox&#xff08;VScode为例&#xff09;。看完本文零基础小白也能学会Firefox浏览器自动化测试&#xff01;&#xff01;&#xff01; 2. 如何使用AirtestIDE驱动Firefox…

五个步骤轻松搞定软件开发流程

互联网在当今社会非常普遍&#xff0c;日常生活中很多东西都离不开互联网&#xff0c;应用软件是互联网必不可少的载体和终端。因此&#xff0c;软件是互联网中不可缺少的关键因素。软件开发已经成为许多企业和企业家非常重要的布局。在软件开发之前&#xff0c;我们应该了解软…

Kafka3.x安装以及使用

一、Kafka下载 下载地址&#xff1a;https://kafka.apache.org/downloads 二、Kafka安装 因为选择下载的是 .zip 文件&#xff0c;直接跳过安装&#xff0c;一步到位。 选择在任一磁盘创建空文件夹&#xff08;不要使用中文路径&#xff09;&#xff0c;解压之后把文件夹内容剪…

如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序

作者&#xff1a;Jonathan Simon Elastic Observability 是提供对正在运行的 Web 应用程序的可见性的最佳工具。 Microsoft Azure 容器应用程序是一个完全托管的环境&#xff0c;使你能够在无服务器平台上运行容器化应用程序&#xff0c;以便你的应用程序可以扩展和缩减。 这使…

ImportError: DLL load failed while importing MPI: 找不到指定的模块

在运行下面这行python代码时会报错 from mpi4py import MPI 原因就是缺少MPI模块 解决方法如下&#xff1a; 1.在MPI官网下载msmpisetup.exe和msmpisdk.msi两个文件&#xff0c;并且安装到默认路径下 2.添加环境变量 进入“控制面板——>高级系统设置——>环境变量”…

设计模式:抽象工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《工厂方法模式》 下一篇《单例模式》 简介&#xff1a; 抽象工厂模式&#xff0c;它是所有形态的工厂模式中最为抽象和最具一般性的一种形态。它用于处理当有多个抽象角色时的情况。抽象工厂模式可以向…

Linux备份Docker的mysql数据并传输到其他服务器保证数据级容灾

目录 简介什么是容灾 &#xff1f;容灾的分类容灾和备份有什么连系 &#xff1f; 数据级容灾备份步骤1、scp命令&#xff1a;用于Linux之间复制文件和目录2、编写备份数据库脚本3、crontab定时任务执行脚本4、测试 应用级容灾业务级容灾 简介 为了防止客户系统的数据丢失&…

【Python爬虫】安装requests库解决报错问题

requests 确保pip的安装命令行下安装出现的问题以及解决办法换镜像源安装验证安装为什么使用requests库呢 废话不多说了&#xff0c;直接进入正题 确保pip的安装 首先要想安装requests库&#xff0c;第一点就是要确保pip已经安装。这个pip在Python高级版本中已经默认安装了。…

基于蝗虫算法的无人机航迹规划-附代码

基于蝗虫算法的无人机航迹规划 文章目录 基于蝗虫算法的无人机航迹规划1.蝗虫搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用蝗虫算法来优化无人机航迹规划。 1.蝗虫搜索算法 …

进阶JAVA篇-深入了解 List 系列集合

目录 1.0 List 类的说明 1.1 List 类的常用方法 1.2 List 集合的遍历方式 2.0 ArrayList 集合的底层原理 2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因&#xff1a; 2.2 ArrayList 集合的优缺点 3.0 LinkedList 集合的底层原理 3.1 从 LinkedList 集合的底层原理来了…

中心胖AP(AD9430DN)+远端管理单元RU(R240D)+出口网关,实现组网

适用于&#xff1a;V200R008至V200R019C00版本的万兆中心胖AP&#xff08;AD9431DN-24X&#xff09;。 组网规划 RU管理&#xff1a;VLAN 100&#xff0c;网段为192.168.100.0/24。 无线业务&#xff1a;VLAN 3&#xff0c;SSID为“wlan-net”&#xff0c;密码为“88888888”…

怎么下载微信视频号视频?

你是否曾经在浏览视频号时看到了一些精彩的视频号&#xff0c;希望能够保存下来&#xff0c;但却不知道如何下载&#xff1f;别担心&#xff01;本篇文章将为你介绍一个方便易用的视频号下载工具&#xff0c;让你轻松保存喜欢的视频号视频&#xff01;犀牛下载是一款专门为微信…

05 | 类型匹配:怎么切除臃肿的强制转换

Java 的模式匹配是一个新型的、而且还在持续快速演进的领域。类型匹配是模式匹配的一个规范。类型匹配这个特性&#xff0c;首先在 JDK 14 中以预览版的形式发布。在 JDK 15 中&#xff0c;改进的类型匹配再次以预览版的形式发布。最后&#xff0c;类型匹配在 JDK 16 正式发布。…