分布式事务 学习

分布式事务

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

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

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

微服务之间通过网络(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)是在分布式计算环境中生成的唯一标识符或标识号。在分布式系统中,通常需要唯一标…

红帽认证 | RHCE考试包括哪些内容?

Red Hat Certified Engineer(RHCE)考试是一项面向企业级系统管理员的认证考试,是认证Linux系统管理员技能的一种方式。 RHCE证书是Linux管理员领域中最受欢迎和最受认可的证书之一。 那RHCE考试都有哪些内容呢,一起来看看吧&…

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…

vue vue3开发 vue2和vue3的选择

现在vue新建项目,官方给出的命令是 npm create vuelatest项目默认vue3,他是不支持IE11 如果想支持IE11用下面方法,项目vue2.7.7 npm create vuelegacy他们的打包工具默认vite,不是webpack。老手要注意生成的项目中的示例组件使…

JS——垃圾回收的原理

引言 JavaScript是一种高级的、解释型的编程语言,广泛应用于网页开发和移动应用开发中。在JavaScript中,内存管理是一个重要的话题,而垃圾回收就是内存管理的一部分。本文将介绍JavaScript垃圾回收的原理,并提供一些示例代码来帮助…

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…

力扣每日一题56:合并区间

题目描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#…

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;解压之后把文件夹内容剪…

Oracle杀会话回滚时间长处理办法

Oracle杀会话回滚时间长处理办法 获取被KILL会话的SID&#xff1a; set line 200 pages 1000 col event for a30 col program for a35 col username for a10 col exec_time for 9999999999 col sql_id for a15 col machine for a30 col ssid for a13 col state for a20 col st…

如何在 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;它是所有形态的工厂模式中最为抽象和最具一般性的一种形态。它用于处理当有多个抽象角色时的情况。抽象工厂模式可以向…

1024发博客!

1024发博客&#xff01;

Spring和SpringBoot学习

Spring和SpringBoot学习 Spring中常用注解及其作用 Spring中常用注解及其作用 SpringBoot注解扫描范围 SpringBoot | ComponentScan()注解默认扫描包范围分析 spring boot的包扫描范围 springBoot的自动扫描包范围 SpringBoot中new对象不能自动注入对象 SpringBoot中new对…