分布式事务学习整理

news2024/11/23 13:30:57

一、整体背景

最近在分布式事务领域这块的了解比较少,对自己来说是一个业务盲点,所以想抽空学习以及整理下关于分布式事务的相关知识。

1、分布式事务的发展

总所周知,我们为什么要考虑分布式事务,从一开始发展来说,项目都是单体项目,举最简单基本的商城系统来说,单体架构图如下所示

一个单体系统包含订单、商品、用户模块,然后通过访问数据库,通过事务控制,我们就很容易理解,如果用上Spring框架,我们只需要@Transactional注解进行处理就能实现本地事务。

但随着业务量的增大以及项目的拆分,单体项目已经不再能满足日常的业务量了,可能项目架构就会变成如下图所示

这种情况下,我们常规的本地事务就没法解决跨服务的事务一致性问题,所以于此才引入分布式事务解决方案,说白了分布式事务就是为了解决我们跨应用数据库事务的问题而提出来的

二、常用的分布式事务解决方案对比

1、分布式协议

分布式协议按照我的理解可以理解为一种约定,或者规范,市面上的数据库厂商会遵循这种约定进行实现,为实现分布式事务奠定基础,其中协议包括如下

  • 2PC(Two-Phase Commit, 2PC)
  • 3PC(Three-Phase Commit, 3PC)
  • TCC是一种补偿式分布式事务解决方案,通过Try-Confirm-Cancel三个阶段确保事务一致性(应用级别,需手动实现)

2、分布式具体解决方案

  •  阿里中间件Seata提供的解决方案
    • XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入。
    • TCC模式:最终一致的分阶段事务模式,有业务侵入。
    • AT模式:最终一致的分阶段事务模式,无业务侵入,是Seata的默认模式。
    • SAGA模式:长事务模式,有业务侵入。

三、分布式事务相关理论定理

1、CAP定理

‌CAP定理是分布式系统设计中的一个基本理论,它指出在一个分布式系统中,‌一致性(Consistency)、‌可用性(Availability)和‌分区容错性(Partition tolerance)这三个关键属性最多只能同时满足两个,而无法三者兼得。这个定理对于理解和设计分布式系统具有重要指导意义。

CAP定理的基本概念

  • 一致性(Consistency):确保所有副本在更新操作后保持数据的一致状态。
  • 可用性(Availability):系统能够响应任何请求,无论成功还是失败都会返回响应。
  • 分区容错性(Partition tolerance):系统能够在网络分区的情况下继续运行,即部分节点之间的通信中断时,系统仍能提供服务。

为什么不能同时满足

在分布式系统中,由于网络延迟、故障等原因,很难保证所有节点在所有时间都保持数据一致。因此,CAP定理指出,一个分布式系统最多只能同时满足两个属性,而必须牺牲第三个属性。这种权衡取决于系统的具体需求和应用场景。

CAP定理对分布式系统设计的影响

  • CA(一致性和可用性):适用于需要强一致性的场景,如金融交易系统。
  • CP(一致性和分区容错性):适用于可以容忍一定延迟的系统,如区块链。
  • AP(可用性和分区容错性):适用于对数据一致性要求不高的场景,如社交媒体应用。

实例分析

  • NoSQL数据库:许多NoSQL数据库如Cassandra和MongoDB采用AP策略,以提供高可用性和分区容错性,同时牺牲了一定程度的一致性。这种设计选择适合于需要快速响应和数据可扩展性的应用场景。

CAP定理是分布式系统设计和开发中的基础理论,它帮助开发人员根据系统的具体需求和约束做出合理的权衡和选择。在实际应用中,理解CAP定理及其对系统设计的影响是至关重要的

2、BASE理论

BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。基本可用(Basically Available): 基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
软状态(Soft State): 软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。MySQL Replication 的异步复制也是一种体现。
最终一致性(Eventual Consistency): 最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

五、总结

整体来说分布式事务这块对于自己来说还是没那么熟悉的领域,在工作中也算接触了大型企业系统的研发,但是也没有使用业界主流的分布式事务进行处理,更多的是靠消息的回调,定时任务的补偿达到最终一致性来解决问题,并没有做到强一致性。后续从Seata这个现有中间件下手学习,希望借此慢慢学习以及慢慢深入这块,填充自己的知识领域。

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

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

相关文章

vscode源代码管理的传入传出更改视图如何关闭

传入传出更改视图关闭: vscode源代码管理中下面显示的大量传入传出记录,不想显示的话 在设置里搜索 scm.showHistoryGraph 可以关闭。

[Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升

信息收集 IP AddressOpening Ports10.10.10.79TCP:22,80,443 $ nmap 10.10.10.79 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 96:4c:51:42:…

以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展

在科技日新月异的今天,AI技术如同一股不可阻挡的潮流,正深刻改变着我们的世界,尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者,树莓集团始终站在时代前沿,积极探索AI技术如何为数字媒体产业注入新活力。 在树…

(ICCV-2023)使用 Transformer 的可扩展扩散模型

使用 Transformer 的可扩展扩散模型 Paper Title:Scalable Diffusion Models with Transformers Paper是UC Berkeley发表在ICCV 2023的工作 paper地址 code地址 图 1:具有 transformer 主干的扩散模型实现了最先进的图像质量。我们展示了在 ImageNet 上以 512$\time…

初学51单片机1602液晶时序图实例分析

上篇博文笔者分享了关于液晶1602基本的工作流程,本篇主要是通过逻辑分析仪来看一下程序使能的电平时序,是否符合产品文档给出 的时序逻辑。 先看一下1602的时序图 认识下时序图中各个标识的含义: Tc信号周期(E Cycle Time&#x…

WEB应用(十六)---反序列化

反序列化的概念 在面向对象编程语言中,就是将对象转化为字节流,这一步是序列化,字节流中包括这个对象的数据和信息,便于传输和存储,是可以在网络中传输的。需要时,通过反序列化从字节流中恢复对象。 类似于…

State-Threads初识

1.项目简介 协程(coroutine)不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。 一个程序可以包含多个协程,可以对比与一个进程包含多个线程。 我们知道多个线程相对独立,有自己的上下…

Dopple Labs 选择 Zilliz Cloud 作为安全高效的向量数据库

一直以来,我都十分赞同采用通用的标准来评估机器学习领域的技术。向量数据库领域也是如此。Zilliz 发布的性能测试对我有着很大的帮助。 ——Sam Butler Dopple.AI 机器学习总监 01.Dopple AI简介 Dopple Labs Inc. 是 Dopple.AI 的原厂,通过提供创新…

我是如何选择适合我的电脑的

当前有什么可以供自己选择 将从便携、性能、价格、游戏、视频剪辑、高性能、接口、屏幕、使用感受等方面考虑(超出普通人范围电脑不考虑) 非苹果: 轻薄笔记本:最便捷办公笔记本:游戏笔记本台式电脑台式游戏电脑台式高性能电脑 苹果&#…

ROM修改进阶教程------修改rom 内置app的几种方法与注意事项 以及运行库中arm64 .rmeabi-v7a与armeabi 区别

在定制rom的过程中。内置app是很多rom爱好者必须的技能之一。但对于初学者来说。会遇到内置的app无效果或者出现运行有bug的情况。内置app需要根据安卓版本的不同略有变化 .在高安卓版本中还需要内置apk的运行库。 通过今天的博文了解; 1-----内置APP的几种方式步骤 2-----视…

OpenHarmony南向开发 SA服务SELinux权限配置一站式傻瓜式教程

Selinux权限配置 OpenHarmony中SELinux使用详解 目录 SELinux简介SELinux概念SELinux模式OH中SELinux使用详解新增SA服务如何配置SELinux权限SELinux简介 SELinux是Security Enhanced Linux 的缩写,也就是安全强化的 Linux,旨在增强传统Linux操作系统的安全性,解决传统Li…

关于使用webflux开发思考

1、目前终于看到有系统使用spring的webflux进行系统开发,主要原因是比如gpt、千问的大模型数据返回都支持流式方式返回,比如和用户对话,可以流式的把数据给用户展示,不用一次性把数据展示到页面上。 webflux还有一个能力就是&…

MongoDB笔记1——MongoDB简介

MongoDB 什么是MongoDB 2007年10月,MongoDB由10gen团队所开发,2009年2月首度推出。 基于分布式文件存储的数据库由C语言编写。旨在为WEB应用提供可拓展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库(NoSQL&…

东芝新小黑移动硬盘数据被格式化如何恢复(2024年8月版)

在数字化时代,数据已成为我们生活和工作中不可或缺的一部分。东芝新小黑移动硬盘,以其便携性和大容量,成为许多用户存储重要数据的首选。然而,当这些宝贵的数据因意外格式化而面临丢失的风险时,我们该如何应对&#xf…

Visionpro二次开发学习笔记7-使用CogToolDisplay控件

CogToolDisplay控件可显示与视觉工具记录相关的图像,图形和其他状态信息。它使用CogRecord和ICogTool接口将图像和图形连接到CogDisplay。 图片清单 控件的CogComboBox列出当前记录及其子记录中的图像和图形。您可以单击列表并选择要显示的图像或图形。如果记录层…

基于springboot3实现单点登录(二):认证服务端搭建

前言 上文我们介绍了oauth2.0的相关理论和流程,本文我们继续实现。 Oauth2协议中有个很重要的概念,叫做”端点“, 以下整理了一些常用的端点及其参考访问路径及使用场景的信息,供参考。 这些端点在oauth2.0协议的整个生命周期…

白嫖不是梦,三分钟搞定一台服务器

在知乎上浏览时,我偶然发现了一个引人入胜的话题。这个话题附带了一张Excel表格的截图,表格设计得非常巧妙。它允许用户输入包括日薪、工作时间、通勤时间、休息时间以及学历等在内的多个变量。通过这些输入,表格能够计算出一个反映工作性价比…

JAVA—正则表达式

关于正则表达式的了解学习,以及用于校验格式,信息查找和替换分割内容。 目录 1.概述 2.书写规则 3.应用案例 4.用于信息查找 5.用于搜索替换,分割内容 1.概述 由一些特定的字符组成,代表一个规则 作用: 1.校验数据…

国外高清风景视频素材无水印哪里找?

哪里可以下载国外高清风景视频素材?有哪些高清海外素材网站?作为一名从业多年的视频剪辑师,今天就来给大家揭秘可以下载国外高清风景视频素材的网站,赶紧进来看看吧~ 1. 稻虎网 稻虎网作为国内外知名视频素材网站&a…

【机器学习】 Sigmoid函数:机器学习中的关键激活函数

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Sigmoid函数:机器学习中的关键激活函数1. 引言2. Sigmoid函数定义3.…