分布式事务(一)

一、序言

本文介绍分布式事务相关的基本概念。

二、什么是分布式事务

分布式事务是指涉及多个独立计算机或系统的事务操作,这些计算机或系统可能位于不同的物理位置,彼此之间通过网络进行通信。分布式事务的目标是确保在分布式环境中的多个参与者之间执行的事务操作是原子性、一致性、隔离性和持久性(ACID)的。
在传统的单机事务中,ACID 特性是由数据库管理系统(DBMS)来保证的。但在分布式环境中,由于数据存储在不同的节点上,并且节点之间的通信可能会受到网络延迟、故障和分区等因素的影响,因此确保 ACID 特性变得更加复杂和困难。

三、CAP 定理

未命名文件 (1).png
CAP 定理是由计算机科学家 Eric Brewer 在 2000 年提出的理论。它指出在分布式计算系统中,最多只能同时满足三个特性中的两个,这三个特性分别是一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。

  1. 一致性(Consistency):分布式系统中所有节点在同一时间点看到的数据是一致的。
  2. 可用性(Availability):分布式系统应该保证每个请求都能够收到一个非错误的响应(但是不能保证获取的数据为最新数据),而且这个响应应该在有限的时间内返回。
  3. 分区容错性(Partition Tolerance):网络分区发生了,系统每个分区仍能独立工作。

由于分布式系统中是通过网络通信的,出现分区是无法避免的(即分区容错性必须考虑)。在出现网络分区的情况下,我们必须在一致性和可用性之间做出权衡选择,即考虑系统选择 AP 方案还是 CP 方案。

四、BASE 理论

BASE 理论是分布式系统设计中的一种思想,用于解决分布式系统在可用性和一致性之间的权衡问题。BASE 理论的名称源自于其三个核心概念的首字母:

  1. 基本可用(Basically Available):系统在出现故障时仍然能够保证基本的可用性,即系统可以继续处理部分请求
  2. 软状态(Soft State):软状态指的是系统中数据在一段时间内可以是不一致的,系统不需要实时保持数据的一致性。
  3. 最终一致性(Eventual Consistency):最终一致性是指系统中的所有节点最终会在某个时刻达到一致状态

BASE 理论的主要目标是通过放宽对强一致性的要求,提高系统的可用性和性能,最终达到一致性的目标。

五、分布式事务处理模型

5.1 刚性事务模型

严格满足 ACID 特性的事务称为刚性事务。刚性事务要求在事务执行期间数据保持强一致性,即事务中的所有操作要么全部生效,要么全部失败,不允许出现部分生效的情况。这意味着,在一个事务中对数据的读操作会返回最新的数据,而写操作则会立即对所有节点生效
刚性事务通常使用强一致性的分布式事务协议来实现,例如两阶段提交(2PC)或多阶段提交(3PC)。这种模式能够确保数据的一致性,但可能会影响系统的性能和可扩展性。

5.2 柔性事务模型

基于 BASE 理论的事务一般称为柔性事务。柔性事务放宽了一致性要求,允许在一定程度上牺牲一致性以换取系统的性能和可用性。在柔性事务中,系统允许数据在事务执行期间处于不一致的状态,但会在后续的时间内将数据同步至一致状态
柔性事务通常使用异步复制、消息队列等技术来实现数据的最终一致性,即通过后台任务或定期同步等方式将数据在不同节点之间进行同步,以达到一致状态。由于放宽了一致性要求,柔性事务通常具有更好的性能和可扩展性,适用于高并发、大规模的分布式系统。

六、分布式事务解决方案

6.1 刚性事务解决方案

  1. 两阶段提交(Two-Phase Commit,2PC):2PC 是最早也是最常见的分布式事务解决方案之一。它通过协调者和参与者之间的通信来确保事务的原子性。第一阶段(准备阶段),协调者询问参与者是否可以提交事务,参与者将会准备好并且等待协调者的指示。第二阶段(提交/回滚阶段),协调者将会向所有参与者发送提交请求。如果所有参与者都同意提交,那么事务将会提交,否则将会回滚。
  2. 三阶段提交(Three-Phase Commit,3PC):3PC 是对 2PC 的改进,旨在解决 2PC 存在的一些问题,如协调者单点故障、长时间阻塞等。与 2PC 不同的是,3PC 引入了预提交阶段,使得事务在提交前更安全,减少了出现半提交的情况。

6.2 柔性事务解决方案

  1. TCC(Try-Confirm-Cancel):最早是由 Pat Helland 于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate`s Opinion》的论文提出。其核心是:由开发人员在 try 阶段检查或预留资源,在 confirm 阶段执行业务提交事务,在 cancel 阶段取消事务和预留资源。
  2. 本地消息表:本地消息表的方案最初是由 ebay 提出。其核心思路是将分布式事务拆分成本地事务进行处理。方案内容为:事务发起方建立本地消息表,将事务的内容放入本地消息表中,异步去读取并处理本地消息表中的消息。
  3. 消息事务:消息事务可以看作本地消息表的另一种处理方式。在消息事务中,事务发起方将事务的内容发送到 MQ 中,订阅方订阅事务处理事务。最后,事务发起方反查 MQ 事务的处理状态,完成事务提交或回滚。
  4. 最大努力通知:事务发起方尽最大的努力将消息发送出去,但是接收方可能无法收到。该方案采用消息重复通知机制和消息校对机制来保证最终一致。

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

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

相关文章

物联网:门锁RNBN-K18使用记录

摘要:对 RNBN品牌下 K18智能门锁日常使用操作经验记录。 常见问题: 1.门锁联网时,找不到 wifi 怎么办。 答:检查一下几个方面:1. wifi 信号是否是2.4G,2.wifi信号是否距离没锁很远。因为门锁只能获取到2…

数据分析案例(三):基于RFM分析的客户分群

实验2 基于RFM分析的客户分群 Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢…

Alibaba --- 如何写好 Prompt ?

如何写好 Prompt 提示工程(Prompt Engineering)是一项通过优化提示词(Prompt)和生成策略,从而获得更好的模型返回结果的工程技术。总体而言,其实现逻辑如下: (注:示例图…

PE程序底层结构与恶意代码插入与执行的研究

Windows PE程序底层结构分析 PE(Portable Executable)是一种Windows操作系统下可执行文件的标准格式 Windows PE程序结构和Linux的elf程序结构类似,首先一个名为simple64.exe程序里有一个头文件和一个段文件,头文件里主要存放的是…

使用Charles断点修改接口返回数据

问题:数量/金额原来接口是用一个字段返回,由于业务需要换行展示,后端便拆分成了两个字段,前端则需要用新拆分的字段去取值,导致目前发现有个字段的金额也取成了件数(红框部分);需求&…

设备树下的 LED 驱动实验

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、修改设备树文件二 创建设备树节点并获取属性 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断…

有真的副业推荐吗?

#有真的副业推荐吗# 我做副业项目的时候,认识了一位带娃宝妈,讲一下她空闲时间做副业赚钱的故事吧。在一个温馨的小家庭里,李婷是一位全职宝妈,她的主要任务是照顾和陪伴自己可爱的宝宝。然而,随着宝宝逐渐长大&#x…

196算法之谜在 JSP 中使用内置对象 request 获取 form 表单的文本框 text 提交的数据。

(1)编写 inputNumber . jsp ,该页面提供一个 form 表单,该 form 表单提供一个文本框 text ,用于用户输入一个正整数,用户在 form 表单中输入的数字,单击 submit 提交键将正整数提交给 huiwenNumber . jsp 页…

5.9 mybatis之callSettersOnNulls作用

文章目录 1. 当callSettersOnNullstrue时2. 当callSettersOnNullsfalse时 在mybatis的settings配置参数中有个callSettersOnNulls参数,官方解释为:指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法…

【菜狗学前端】ES6+笔记(包含Promise及async、await等)

老样子。复制上来的图片都没了,想看原版可以移步对应资源下载(资源刚上传,还在审核中) (免费)菜狗学前端之ES6笔记https://download.csdn.net/download/m0_58355897/89135424 一 解构赋值 解构赋值 解构指的是把一个数据…

2024年广东省网络系统管理样题第3套网络部署部分

2024年广东省网络系统管理样题第3套网络部署部分 模块A:网络构建 极安云科专注职业教育技能培训4年,包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点,提供完整全面的系统性理论教…

Bridge 桥接

意图 将抽象部分与其显示部分分离,使他们都可以独立地变化。 结构 其中: Abstraction定义抽象类的接口,维护一个指向Implementer类型对象的指针。RefinedAbstraction扩展由Abstraction定义的接口。Implementor定义实现类的接口&#xff0c…

并发编程之ThreadLocal使用及原理

ThreadLocal主要是为了解决线程安全性问题的 非线程安全举例 public class ThreadLocalDemo {// 非线程安全的private static final SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static Date parse(String strDate) throws ParseExc…

Spring源码刨析之配置文件的解析和bean的创建以及生命周期

public void test1(){XmlBeanFactory xmlBeanFactory new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));user u xmlBeanFactory.getBean("user",org.xhpcd.user.class);// System.out.println(u.getStu());}先介绍一个类XmlBeanFac…

服务器主机关机重启告警

提取时间段内系统操作命名,出现系统重启命令,若要出现及时联系确认 重启命令: reboot / init 6 / shutdown -r now(现在重启命令) 关机命令: init 0 / shutdown -h now(关机&#…

防汛物资仓库管理系统|实现应急物资仓库三维可视化

系统概述 智慧应急物资仓库可视化系统(智物资DW-S300)采用了 B/S 架构的设计,通过浏览器即可快速登录操作。实现对库房内的应急物资从申购入库、出库、调拨、库内环境监测、维修保养、检测试验、处置报废等全周期、科学、规范的管理。系统以…

恢复MySQL!是我的条件反射,PXB开源的力量...

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

如何进行计量经济分析

计量经济分析是定量分析的常用方法,在经济分析领域有着广泛且重要的应用。计量经济分析以一定的经济理论和统计数据为基础,运用数学、统计学相关方法,通过建立计量模型,并运用软件进行操作,从而实现对经济问题的定量分…

时间序列模型:lag-Llama

项目地址:GitHub - time-series-foundation-models/lag-llama: Lag-Llama: Towards Foundation Models for Probabilistic Time Series Forecasting 论文地址:https://arxiv.org/pdf/2310.08278.pdf hugging-face镜像:https://hf-mirror.c…

QQ农场-phpYeFarm添加数据教程

前置知识 plugin\qqfarm\core\data D:\study-project\testweb\upload\source\plugin\qqfarm\core\data 也就是plugin\qqfarm\core\data是一个缓存文件,如果更新农场数据后,必须要删除才可以 解决种子限制(必须要做才可以添加成功) 你不更改加入了id大于2000直接删除种子 D…