二、分布式事务

目录

  • 二、分布式事务
    • 2.1 什么是分布式事务
    • 2.2 分布式事务产生的背景
    • 2.3 分布式事务产生的场景
    • 2.4 分布式事务理论
      • ==4.1 CAP理论==
      • 4.2 Base理论
    • 5、分布式事务的解决方案

二、分布式事务

2.1 什么是分布式事务

一组操作会产⽣多个数据库session会话 此时就会出现分布式事务

2.2 分布式事务产生的背景

1)数据库的数据量大,最终拆库拆表,把一个数据库中的数据,放到多台数据库中
⽐如: shardingSphere 再⽐如 springBoot项⽬配置多数据源等等

2)项目架构的转变
项⽬从单体架构->垂直架构->分布式架构->soa架构->微服务架构

2.3 分布式事务产生的场景

1) 跨数据库
⽐较典型的就是单体项⽬数据层进⾏拆库拆表,或者单体项⽬多数据源的情况

2)跨进程
⽐如多个服务访问的是同⼀个数据库 这种情况下 很少⻅ 但是照样会出现分布式事务

3)跨jvm进程,跨数据库
比较典型的就是微服务项目,一个事务的执行需要牵扯到多个服务,每个服务又有自己的数据库,跨项⽬ ⼜ 跨数据库

【总结】
不管是跨进程,还是跨数据库,还是多服务访问单数据库,都有一个本质的特点,操作时可能存在多个session会话,我们可以理解为如果一组操作会产⽣多个数据库session会话 此时就会出现分布式事务

2.4 分布式事务理论

4.1 CAP理论

CAP理论指:分布式事务中,不能同时满足一致性,可用性,分区容忍性

  • C:表示⼀致性(Consistency)
  • A : 表示可⽤性(Availability)
  • P:表示分区容忍性(Partition Tolerance)

一致性:一致性表示用户对数据的修改操作,在所有的副本中,要么全部执行成功,要么全部执行失败。(强调的是数据必须一致,允许锁等待和超时)

(⽐如: mysql的主从复制读写分离时,当对主库添加数据成功时 从库必须也添加成功 并且从从库中读取数据时读取的应该是最新的数据 不能出现主库添加数据后 从从库中读取的不是最新的数据⽐如在主从复制过程中读取从库 此时数据还没有复制过来 此时读取的可能就不是最新的数据 此时就不满⾜⼀致性了所以想要满⾜⼀致性 当主库添加数据时 需要把数据同步到从库 并且同步的时候需要锁定从库,不能让从库参与读取,等到同步完成之后再取消锁定 此时再读就是最新的数据了 此时就满⾜了⼀
致性)

可⽤性:表示数据库节点可⽤即可,即客户端访问数据的时候 不存在超时 错误响应 能够快速响应结果。此时节点中的数据可以⼀致 也可以不⼀致,可⽤性的关注点就是系统可⽤,访问时可以快速给响应即可。

(⽐如 mysql的读写分离 当对主机添加数据时,从机会复制这条数据 当客户端读取从机时 不能超
时报错必须得有响应。此时允许读取的数据不是最新的。从机还不能被锁定。)

分区容忍性:表示把存储系统部署在多个节点中,并且这些节点在不同的⽹络节点中,这就形成了⽹络分区,由于⽹络问题节点之间的通讯可能失败,分区容忍性表示 就算节点通讯失败 照样能对外提供服务

【总结】一致性和可用性是矛盾的
在这里插入图片描述

4.2 Base理论

对 cap中的ap模式做客一个拓展,它牺牲了一致性,换来可用性

在base理论中 强调了三点:

1)基本可用

是指在分布式系统中 如果出现故障,允许系统损失部分功能,但是要保证系统基本可⽤ ⽽不是整个系统死掉(⽐如我们购买⽕⻋票时 下订单经常出错 当下订单功能出错时 我们还可⽤正常查询⻋票 ⽽不是整个12306瘫痪)

2)软状态
软状态指允许系统存在中间状态,中间状态不会影响系统的整体可⽤性,允许系统各个节点中数据同步延迟。

3)最终一致性
最终⼀致性表示 允许分布式系统中各个节点的数据存在不⼀致的情况 但是经过⼀段时间,各
个节点上的数据 最终还是⼀致的。

5、分布式事务的解决方案

强⼀致性 cp:XA协议(数据库级别的规范,需要数据库的支持)

弱⼀致性 ap

  • TCC
  • 可靠消息⼀致性
  • 其他⽅式

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

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

相关文章

游戏软件出现d3dcompiler_47.dll缺失怎么修复,亲测的六种有效方法推荐

D3DCompiler47.dll是DirectX SDK中的一个重要组件,它提供了将HLSL(High-Level Shading Language)着色器编译为可执行代码的功能。通过使用D3DCompiler47.dll,开发人员可以将复杂的着色器代码转换为可以在GPU上高效运行的机器代码&…

黑马点评项目笔记 II

基于Stream的消息队列 stream是一种数据类型,可以实现一个功能非常完善的消息队列 key:队列名称 nomkstream:如果队列不存在是否自动创建,默认创建 maxlen/minid:设置消息队列的最大消息数量 *|ID 唯一id:…

Vue系列-el挂载

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…

作业 二维数组-定位问题

图形相似度 描述 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素点数占总像素点数…

P87 4.1 C++ FOR 与Delphi FOR 的区别

输出x, sin(x), cos(x), tan(x)的值。已知X0&#xff0c;10&#xff0c; 20&#xff0c;180。 我用Delphi编写了程序&#xff1a; 第10行出现 给FOR 循环变量赋值i错误。 C中是可以的&#xff0c; 详见&#xff1a;delphi循环的一个小知识_assignment to for-loop variable…

安装JupyterLab的集成环境

Python集成环境安装 不要半途而废&#xff0c;不要作业太多就抛下你手中的笔&#xff0c;拿起你旁边的手机&#xff0c;你觉得这样很有意义吗&#xff1f;一个小时一道题都没做&#xff0c;盯着手机屏幕它能给你一个未来吗&#xff1f;少分心就能多做一道题&#xff0c;多学样本…

Java多线程:定位死锁

检测死锁可以使用jconsole工具&#xff0c;或使用jps定位进程id&#xff0c;再用jstack定位死锁 方案1&#xff1a; 1. 先用jps查看所有的java进程id 2. jstack 进程id定位死锁 3. 查看死锁结果 方案2:从jdk的安装路径中找到bin目录, 点击jconsole

Kafka入门到实战-第五弹

Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…

1.5编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。

1、编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。 package com.kangning.web.controller.system;import java.util.Scanner;/*** 编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。*/ public class CountArea {public static void main(String[] args) …

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎&#xff0c;中文互联网领域领先的问答社区和原创内容平台&#xff0c;2011 年 1 月正式上线&#xff0c;月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法&#xff0c;数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…

java入门学习Day01

本篇文章主要是学会如何使用IDEA&#xff0c;和运行第一个java文件。 java环境安装&#xff1a;Windows下Java环境配置教程_windows java环境配置-CSDN博客 IDEA安装&#xff1a;IDEA 2023.2.5 最新激活码,注册码&#xff08;亲测好用&#xff09; - 异常教程 以上两个链接…

函数栈帧的创建与销毁(最详细的一集)上

前言 1.我们在进行c语言代码编程的时候&#xff0c;常常会把独立的一个功能抽象为函数&#xff0c;利用函数去实现各种的功能&#xff0c;那么&#xff0c;函数是如何调用的&#xff1f;函数的返回值是怎么返回的&#xff1f;参数又是如何传参的&#xff1f;所有这些问题都会跟…

【NLP练习】Pytorch文本分类入门

Pytorch文本分类入门 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制一、前期准备 1. 环境安装 确保已经安装torchtext与portalocker库 2. 加载数据 #加载数据 import torch import t…

【滑动窗口】Leetcode 找到字符串中所有字母异位词

题目解析 438. 找到字符串中所有字母异位词 算法讲解 寻找目标串的异位词&#xff0c;我们使用固定长度的滑动窗口&#xff0c;首先我们判断窗口左右的字符是否存在于目标串中&#xff0c;如果不存在就让窗口滑动&#xff1b;存在的话&#xff0c;我们就把字符丢进Hash中&a…

【JavaSE】类和对象详解(上)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 类和对象 类的组成 对类的理解 成员变量的访问和类方法的调用 this 抛出一个问题 this的作用 初始化成员变量 未初始化的成员变量 代码举例 就地初始化 构…

每日一题(leetcode331):验证二叉树的前序序列化——栈

类似消消乐&#xff0c;数字&#xff0b;“#”“#”就可以消成一个“#”&#xff0c;到最后如果栈中只剩一个“#”便说明序列正确。 当然也可以用槽位理解&#xff0c;一个数字出现会消耗一个槽位产生两个槽位&#xff08;即产生一个槽位&#xff09;&#xff0c;一个“#”出现…

题目:安全序列(蓝桥OJ 3432)

问题描述&#xff1a; 题解&#xff1a; #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e6 9, p 1e9 7;int prefix[N],dp[N];int main() {int n, k;cin >> n >> k;dp[0] prefix[0] 1;for(int i 1; i < n; i){i…

iptables 与 firewalld 防火墙

iptables iptables 是一款基于命令行的防火墙策略管理工具 四种防火墙策略&#xff1a; ACCEPT&#xff08;允许流量通过&#xff09; 流量发送方会看到响应超时的提醒&#xff0c;但是流量发送方无法判断流量是被拒绝&#xff0c;还是接收方主机当前不在线 REJECT&#xff08…

STM32的IAP技术,BootLoader

来源 三种下载方式&#xff1a; 1、ICP&#xff1a;ST-Link, 2、ISP: FlyMcu, 3、IAP IAP简介 IAP技术的核心在于BootLoader程序的设计&#xff0c;这段程序预先烧录在单片机中&#xff0c;正常的APP程序可以使用BootLoader程序中的IAP功能写入&#xff0c;也可以两部分代码一…

【JavaEE初阶系列】——常见的锁策略

目录 &#x1f6a9;乐观锁和悲观锁 &#x1f6a9;读写锁和普通互斥锁 &#x1f6a9;轻量级锁和重量级锁 &#x1f6a9;自旋锁和挂起等待锁 &#x1f6a9;公平锁和非公平锁 &#x1f6a9;可重入锁和不可重入锁 &#x1f6a9;关于synchronized的锁策略以及自适应 接下来讲解的锁策…