当前位置: 首页 > news >正文

分布式事务调研

目录

需求背景:

本地事务

分布式基本理论

1、CAP 定理

2、BASE理论

分布式事务方案

#2PC

#1. 运行过程

#1.1 准备阶段

#1.2 提交阶段

#2. 存在的问题

#2.1 同步阻塞

#2.2 单点问题

#2.3 数据不一致

#2.4 太过保守

3PC

#本地消息表

TCC

TCC原理

开源的TCC解决方案

Seata的TCC 模式



需求背景:

  • 随着微服务的拆分,服务进行多节点分布式部署,当一个服务节点的业务操作,必须其他几个服务节点的操作成功,才能提交时,就涉及到分布式事务问题;
  • 事务就是要不一起成功提交,要不一起失败回滚;
  • 当然涉及到分布式事务,其业务操作的链路就会比较长,业务执行的时间就会可能比较长,可能就会长期持有数据库连接,导致连接数占满,导致服务异常,这个就是长事务问题;
  • 所以像秒杀等电商高并发场景,为了用户体验好,接口响应快,就不得不做数据的最终一致性处理,做分布式事务维持强一致性可能得不偿失。
  • 比如采用缓存进行库存扣减,如果缓存扛不住,可以进行库存分片,分布在多个缓存节点进行扣减,然后利用MQ、延迟队列+任务调度更新趋势库存,满足最终一致,后续可以扫描统计订单数量,来校准库存。
  • 比如抽奖场景,用户抽中奖后进行发奖,在写入奖品记录的时候,写入一条中奖奖品和用户信息的 task 消息发送任务,作为补偿使用。当 MQ发送失败的时候,则由任务调度扫描 task 消息进行重新发送,发奖服务进行消费MQ消息进行发奖操作,操作成功后修改task消息表中的状态,也就是利用本地消息表+异步回调来实现最终一致性。
  • 当然这里分析调研分布式事务的解决方案,比如两阶段提交2PC、TCC

参考:分布式事务概述与项目实战

本地事务

ACID:数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)

● 原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败

● 一致性:事务在开始前和结束后,数据库的完整性约束没有被破坏

● 隔离性:事务的执行是相互独立的,它们不会相互干扰,一个事务不会看到另一个正在运行过程中的事务的数据

● 持久性:一个事务完成之后,事务的执行结果必须是落盘在数据库持久

分布式基本理论

1、CAP 定理

CAP是指一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)三个属性,它们是分布式系统设计中的重要概念。

● 一致性(Consistency):

在分布式系统中的所有数据结点,在同一时刻是否同样的值。如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数据,那么就称为强一致,如果有某个节点没有读取到,那就是分布式不一致;

● 可用性(Availability):

在集群中一部分节点故障后,非故障的节点在合理的时间内返回合理的响应。合理的时间指的是请求不能无限被阻塞,应该在合理的时间给出返回;合理的响应指的是系统应该明确返回结果并且结果是正确的;

● 分区容错性(Partition tolerance):

系统能够在节点之间发生网络分区(Partition)的情况下仍然能够正常运行;

在分布式系统中,网络无法100%可靠,分区其实是一个必然现象,如果我们选择了CA而放弃了P,那么当发生分区现象时,为了保证一致性,这个时候必须拒绝请求,但是A又不允许,所以分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。

对于CP来说,放弃可用性,追求一致性(强一致性)和分区容错性;对于AP来说,放弃一致性,追求分区容错性和可用性,这是很多分布式系统设计时的选择,BASE是根据AP来扩展。在实际应用中,网络延迟和不可靠性是不可避免的,数据复制和同步需要一定的时间。因此,即使选择了保证一致性和分区容忍性(CP),在发生网络分区时,节点之间的数据复制可能会产生一定的延迟,导致节点之间的数据不一致,所以很多业务场景我们退而求用户能接受时间延迟的最终一致方案。

2、BASE理论

根据CAP定理,如果要完整的实现事务的ACID特性,只能放弃可用性选择一致性,然而可用性在现在互联网环境至关重要,BASE 理论是对 CAP 中一致性和可用性权衡的结果,是CAP中AP的一个扩展。其核心思想是:强一致性无法得到保障时,我们可以根据业务自身的特点,采用适当的方式来达到最终一致性。BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。

● BA:(Basically Available)基本可用性,分布式系统在面对故障或分区的情况下,仍然能够保证基本的可用性。即系统可以继续运行并提供核心的功能,而不是完全崩溃;

● S:(Soft State)软状态,分布式系统中的数据状态不需要实时保持一致,而是允许一段时间的数据不一致。数据状态可以是中间状态,可以根据系统自身的需要而变化,这种状态允许一定的延迟和不一致性;

● E:(Eventually Consistency)最终一致性,经过一段时间后数据最终会达到一致状态,但不要求实时的一致性。

分布式事务方案

指事务的操作位于不同的节点上,需要保证事务的 ACID 特性。

例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。

分布式锁和分布式事务区别:

  • 锁问题的关键在于进程操作的互斥关系,例如多个进程同时修改账户的余额,如果没有互斥关系则会导致该账户的余额不正确。
  • 而事务问题的关键则在于事务涉及的一系列操作需要满足 ACID 特性,例如要满足原子性操作则需要这些操作要么都执行,要么都不执行。

#2PC

两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。

#1. 运行过程
#1.1 准备阶段

协调者询问参与者事务是否执行成功,参与者发回事务执行结果。询问可以看成一种投票,需要参与者都同意才能执行。

#1.2 提交阶段

如果事务在每个参与者上都执行成功,事务协调者发送通知让参与者提交事务;否则,协调者发送通知让参与者回滚事务。

需要注意的是,在准备阶段,参与者执行了事务,但是还未提交。只有在提交阶段接收到协调者发来的通知后,才进行提交或者回滚。

#2. 存在的问题
#2.1 同步阻塞

所有事务参与者在等待其它参与者响应的时候都处于同步阻塞等待状态,无法进行其它操作。

#2.2 单点问题

协调者在 2PC 中起到非常大的作用,发生故障将会造成很大影响。特别是在提交阶段发生故障,所有参与者会一直同步阻塞等待,无法完成其它操作。

#2.3 数据不一致

在提交阶段,如果协调者只发送了部分 Commit 消息,此时网络发生异常,那么只有部分参与者接收到 Commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。

#2.4 太过保守

任意一个节点失败就会导致整个事务失败,没有完善的容错机制。

3PC

3PC,三阶段提交协议,是二阶段协议的改进版本,三阶段提交有两个改动点:

  1. 在协调者和参与者中都引入超时机制

  2. 在第一阶段和第二阶段中插入一个准备阶段保证了在最后提交阶段之前各个参与节点的状态是一致的

所以3PC会分3个阶段,CanCommit准备阶段,PreCommit预提交阶段,DoCommit提交阶段,处理流程如下:

图片

参考:分布式事务——三阶段提交|3PC

#本地消息表

本地消息表与业务数据表处于同一个数据库中,这样就能利用本地事务来保证在对这两个表的操作满足事务特性,并且使用了消息队列来保证最终一致性。

  1. 在分布式事务操作的一方完成写业务数据的操作之后向本地消息表发送一个消息,本地事务能保证这个消息一定会被写入本地消息表中。
  2. 之后将本地消息表中的消息转发到消息队列中,如果转发成功则将消息从本地消息表中删除,否则继续重新转发。
  3. 在分布式事务操作的另一方从消息队列中读取一个消息,并执行消息中的操作。

TCC

TCC原理

• Try: 尝试执行阶段,完成所有业务可执行性的检查(保障一致性),并且预留好事务需要用到的所有业务资源(保障隔离性)。

• Confirm: 确认执行阶段,不进行任何业务检查,直接使用Try阶段准备的资源来完成业务处理。注意,Confirm阶段可能会重复执行,因此需要满足幂等性。

• Cancel: 取消执行阶段,释放Try阶段预留的业务资源。注意,Cancel阶段也可能会重复执行,因此也需要满足幂等性。

开源的TCC解决方案

1、tcc-transactionByteTCChmilyspring-cloud-rest-tcc

分布式事务Seata原理2、Seata:分布式事务Seata原理

Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务,为用户提供了 AT、TCC、SAGA 和 XA 几种不同的事务模式。

Seata 的核心组件:

在 Seata 中主要有以下三种角色,其中 TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的服务端独立部署:

  • 事务协调器(TC):维护全局事务的运行状态,负责协调并驱动全局提交或回滚

  • 事务管理器(TM):事务发起方,控制全局事务的范围,负责开启一个全局事务,并最终发起全局提交或回滚全局的决议

  • 资源管理器(RM):事务参与方,管理本地事务正在处理的资源,负责向 TC 注册本地事务、汇报本地事务状态,接收 TC 的命令来驱动本地事务的提交或回滚

Seata的TCC 模式

图片

TCC 模式 RM 驱动分支事务的行为分为以下两个阶段:

(1)执行阶段:

  • ① 向 TC 注册分支。

  • ② 执行业务定义的 Try 方法。

  • ③ 向 TC 上报 Try 方法执行情况:成功或失败。

(2)完成阶段:

  • 全局提交,收到 TC 的分支提交请求,执行业务定义的 Confirm 方法。

  • 全局回滚,收到 TC 的分支回滚请求,执行业务定义的 Cancel 方法。

参考:

分布式事务Seata原理

【分布式事务】-TCC分布式事务实现原理

分布式事务解决方案详解九:TCC(两阶段型、补偿型)

如何用TCC实现分布式事务?

Spring Boot集成Seata实现基于AT模式的分布式事务

相关文章:

分布式事务调研

目录 需求背景: 本地事务 分布式基本理论 1、CAP 定理 2、BASE理论 分布式事务方案 #2PC #1. 运行过程 #1.1 准备阶段 #1.2 提交阶段 #2. 存在的问题 #2.1 同步阻塞 #2.2 单点问题 #2.3 数据不一致 #2.4 太过保守 3PC #本地消息表 TCC TCC原理 …...

Webpack 的构建流程

Webpack 的构建流程可以概括为以下几个步骤: 1. 初始化: Webpack 读取配置文件(webpack.config.js),合并默认配置和命令行参数,初始化Compiler对象。 2. 构建依赖图: 从入口文件开始递归地分…...

Cesium 当前位置矩阵的获取

Cesium 位置矩阵的获取 在 3D 图形和地理信息系统(GIS)中,位置矩阵是将地理坐标(如经纬度)转换为世界坐标系的一种重要工具。Cesium 是一个强大的开源 JavaScript 库,用于创建 3D 地球和地图应用。在 Cesi…...

ubuntu24.04 python环境

ubuntu24.04 python环境 0.引言1.使用整理 0.引言 新系统安装依赖库时报错: pip3installrequirements.txterror:externally−managed−environmentThisenvironmentisexternallymanaged╰–>ToinstallPythonpackagessystem−wide,tryaptinstallpython3−xyz,whe…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第9篇:YOLOv7——跨尺度特征融合】

YOLOv7 1 摘要2 网络架构3 改进点4 和YOLOv4及YOLOR的对比 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第…...

Elasticearch索引mapping写入、查看、修改

作者:京东物流 陈晓娟 一、ES Elasticsearch是一个流行的开源搜索引擎,它可以将大量数据快速存储和检索。Elasticsearch还提供了强大的实时分析和聚合查询功能,数据模式更加灵活。它不需要预先定义固定的数据结构,可以随时添加或修…...

【大模型微调】一些观点的总结和记录

垂直领域大部分不用保持通用能力的,没必要跟淘宝客服聊天气预报,但是主要还是领导让你保持 微调方法没有大变数了,只能在数据上下功夫,我能想到的只有提高微调数据质量。 sft微调的越多,遗忘的越多. 不过对于小任务,rank比较低(例如8,16)的任务,影响还是有有限的。一…...

Vue 3 Hooks 教程

Vue 3 Hooks 教程 1. 什么是 Hooks? 在 Vue 3 中,Hooks 是一种组织和复用组件逻辑的强大方式。它们允许您将组件的状态逻辑提取到可重用的函数中,从而简化代码并提高代码的可维护性。 2. 基本 Hooks 介绍 2.1 ref 和 reactive 这两个函数…...

pandas数据处理及其数据可视化的全流程

Pandas数据处理及其可视化的全流程是一个复杂且多步骤的过程,涉及数据的导入、清洗、转换、分析、可视化等多个环节。以下是一个详细的指南,涵盖了从数据准备到最终的可视化展示的全过程。请注意,这个指南将超过4000字,因此请耐心…...

docker 在ubuntu系统安装,以及常用命令,配置阿里云镜像仓库,搭建本地仓库等

1.docker安装 1.1 先检查ubuntu系统有没有安装过docker 使用 docker -v 命令 如果有请先卸载旧版本,如果没有直接安装命令如下: 1.1.0 首先,确保你的系统包是最新的: 如果是root 权限下面命令的sudo可以去掉 sudo apt-get upda…...

torch.maximum函数介绍

torch.maximum 函数介绍 定义:torch.maximum(input, other) 返回两个张量的逐元素最大值。 输入参数: input: 张量,表示第一个输入。other: 张量或标量,表示第二个输入。若为张量,其形状需要能与 input 广播。输出&a…...

Java面试之多线程并发篇(9)

前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!引用类型有哪些?有什么区别?说说你对JMM内存模型的理解?为什么需要JMM?多线程有什么用?似乎有点模糊了,那…...

Java全栈:超市购物系统实现

项目介绍 本文将介绍如何使用Java全栈技术开发一个简单的超市购物系统。该系统包含以下主要功能: 商品管理用户管理购物车订单处理库存管理技术栈 后端 Spring Boot 2.7.0Spring SecurityMyBatis PlusMySQL 8.0Redis前端 Vue.js 3Element PlusAxiosVuex系统架构 整体架构 …...

1.1 数据结构的基本概念

1.1.1 基本概念和术语 一、数据、数据对象、数据元素和数据项的概念和关系 数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据是计算机程序加工的原料。 数据对象:是具有相同性质的数据元素的集合&…...

深度学习:GPT-2的MindSpore实践

GPT-2简介 GPT-2是一个由OpenAI于2019年提出的自回归语言模型。与GPT-1相比,仍基于Transformer Decoder架构,但是做出了一定改进。 模型规格上: GPT-1有117M参数,为下游微调任务提供预训练模型。 GPT-2显著增加了模型规模&…...

【Oracle11g SQL详解】ORDER BY 子句的排序规则与应用

ORDER BY 子句的排序规则与应用 在 Oracle 11g 中,ORDER BY 子句用于对查询结果进行排序。通过使用 ORDER BY,可以使返回的数据按照指定的列或表达式以升序或降序排列,便于数据的分析和呈现。本文将详细讲解 ORDER BY 子句的规则及其常见应用…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第15篇(完结):讨论和未来展望】

总结 0 前言1 YOLO与人工通用智能(AGI)2 YOLO作为“能够行动的神经网络”3 具身人工智能(EAI)4 边缘设备上的YOLO5 评估统计指标的挑战6 YOLO与环境影响 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YO…...

Java设计模式 —— 【创建型模式】原型模式(浅拷贝、深拷贝)详解

文章目录 前言原型模式一、浅拷贝1、案例2、引用数据类型 二、深拷贝1、重写clone()方法2、序列化 总结 前言 先看一下传统的对象克隆方式: 原型类: public class Student {private String name;public Student(String name) {this.name name;}publi…...

SciAssess——评估大语言模型在科学文献处理中关于模型的记忆、理解和分析能力的基准

概述 大规模语言模型(如 Llama、Gemini 和 GPT-4)的最新进展因其卓越的自然语言理解和生成能力而备受关注。对这些模型进行评估对于确定其局限性和潜力以及促进进一步的技术进步非常重要。为此,人们提出了一些特定的基准来评估大规模语言模型…...

SQLModel与FastAPI结合:构建用户增删改查接口

SQLModel简介 SQLModel是一个现代化的Python库,旨在简化与数据库的交互。它结合了Pydantic和SQLAlchemy的优势,使得定义数据模型、进行数据验证和与数据库交互变得更加直观和高效。SQLModel由FastAPI的创始人Sebastin Ramrez开发,专为与FastA…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...

TJCTF 2025

还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...