分布式事务(一)

一、序言

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

二、什么是分布式事务

分布式事务是指涉及多个独立计算机或系统的事务操作,这些计算机或系统可能位于不同的物理位置,彼此之间通过网络进行通信。分布式事务的目标是确保在分布式环境中的多个参与者之间执行的事务操作是原子性、一致性、隔离性和持久性(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. 最大努力通知:事务发起方尽最大的努力将消息发送出去,但是接收方可能无法收到。该方案采用消息重复通知机制和消息校对机制来保证最终一致。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓逆向 | 某X游戏垂类Web nonce

*本案例仅做分析参考,如有侵权请联系删除 1.逻辑分析 通过XHR断点,然后逐步往上调发现nonce生出处。 在console执行下函数 其中 i,是当前日期和时间的秒级时间戳,并将其向下取整到最接近的整数。 i = ~~(+_.w() / 1e3)w</

电影《你想活出怎样的人生》观后感

上周去看了宫崎骏电影《你想活出怎样的人生》&#xff0c;就像作为导演问观众的一个问题一样&#xff0c;宫崎骏老爷子&#xff0c;在电影中&#xff0c;给出了他的一些开放式答案。自己可是说是宫崎骏的粉丝&#xff0c;宫崎骏老爷子的大部分电影&#xff0c;自己基本都看过了…

Win10 使用Telnet

命令行 telnet 127.0.0.1 80 调试是否能连接服务 输入exit 回车即可退出 相比于ping的不同

7 个适用于 Windows 的最佳电脑分区数据恢复软件

磁盘分区对于正确存储数据以便从硬盘驱动器快速轻松地访问非常有帮助。但是&#xff0c;如果分区损坏&#xff0c;存储在其中的所有数据都会突然变得无法访问。磁盘分区损坏的原因可能有很多&#xff0c;其中最突出的是病毒攻击、突然断电、物理损坏或由于创建坏扇区。 但是&a…

八、Yocto 创建自定义的conf文件

文章目录 Yocto创建自定义的conf文件保存当前项目的配置文件使用自定义配置创建编译工作区 Yocto创建自定义的conf文件 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第八篇文章&#xff1a; 一、yocto 编译raspberrypi 4B并启动 二、yocto 集成ros2(基于raspberrypi 4B…

基于ssm的智慧餐厅点餐管理系统设计与实现(java项目+文档+元)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的智慧餐厅点餐管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 智慧餐厅点餐管理系统设计…

基于51单片机的无线病床呼叫系统设计—LCD1602显示

基于51单片机的无线病床呼叫系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.病人按下按键&#xff0c;LCD1602显示对应的床位号&#xff1b; 2.多人同时呼叫&#xff0c;显示屏同时显示&#xf…

手机银行客户端框架之TMF框架介绍

腾讯移动开发平台&#xff08;Tencent Mobile Framework&#xff09;整合了腾讯在移动产品中开发、测试、发布和运营的技术能力&#xff0c;为企业提供一站式、覆盖全生命周期的移动端技术平台。核心服务包括移动客户端开发组件、H5容器、灰度发布、热更新、离线包、网关服务、…

springBoot+vue编程中使用mybatis-plus遇到的问题

mybatis-plus中遇到的问题Code Companion Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)…

【算法刷题 | 二叉树 06】4.10( 路径总和、路径总和 || )

文章目录 13.路径总和13.1问题13.2解法一&#xff1a;递归13.2.1递归思路&#xff08;1&#xff09;确定递归函数参数以及返回值&#xff08;2&#xff09;确定终止条件&#xff08;3&#xff09;确定递归逻辑 13.2.2代码实现 14.路径总和 ||14.1问题14.2解法一&#xff1a;递归…

UDTF函数 explode

场景&#xff1a; 原hive数据形式 split 处理到一个Array 形式 使用explode炸开后的效果是 explode结合侧面视图达到targeType 目标形式&#xff1a; 一进多出 explode 将hive 中复杂的 array 炸成多行 因为炸开后&#xff0c; movie 列值少于categoryname 列所以这里为了达到…

【THM】Net Sec Challenge(网络安全挑战)-初级渗透测试

介绍 使用此挑战来测试您对网络安全模块中获得的技能的掌握程度。此挑战中的所有问题都可以仅使用nmap、telnet和来解决hydra。 挑战问题 您可以使用Nmap、 Telnet 和Hydra回答以下问题。 2.1小于10000的最大开放端口号是多少? 8080 nmap -p- -T4 10.10.234.218 2.2普通…