分布式 分布式事务 总结

前言


 相关系列

  • 《分布式 & 目录》
  • 《分布式 & 分布式事务 & 总结》
  • 《分布式 & 分布式事务 & 问题》
     
     

分布式事务


    所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言,一次完整的交易需要同时调动两个节点。而如果将这个交易的所有操作作为ACID事务执行,那么该事务就被称为分布式事务。
 
 

2PC @ 2 Phase Commit @ 二阶段递交


    2PC&3PC协议是处理分布式事务数据一致性(与CAP理论的一致性不同,事务的一致性是指确保数据在两个“合法”状态间的“正确转移”)问题的解决方案,其本质是通过确保事务的原子性来保证一致性。在分布式系统中,节点虽然可以知晓自身操作的成功与否,但却无法知晓其他节点操作的执行结果。因此当事务跨越多个节点时,为了保持事务的原子性&一致性,需要引入了TM @ 事务管理器来统一掌握所有RM @ 资源管理器的操作结果,并决定是否把各资源管理器的操作结果统一提交/回滚。2PC协议分为准备&提交两个阶段:

  • Prepare phase @ 准备阶段:事务管理器会向所有资源管理器发送(2PC/3PC/TCC协议都只是分布式事务的实现思想,因此事务管理器对资源管理器的请求发送无需在意串/并行,但具体的实现工具/框架就必须考虑这一点,因为各个资源管理器事务之间可能存在依赖性,例如事务B的执行需要事务A的执行结果参与)“准备”请求以确认其是否已准备好递交事务。资源管理器在收到“准备”请求后会开启&执行本地事务,但并不真正递交,而是将Undo和Redo日志写入本地事务日志中。Undo日志用于记录如何回滚事务,而Redo日志则用于在提交阶段重新执行事务操作。尽管在2PC中通常不直接使用Redo日志提交,但它在某些故障恢复场景中是有用的。本地事务执行结束后,将成功与否以Yes/No的形式回应至事务管理器;
  • Commit phase @ 递交阶段:如果事务管理器收到所有反馈且发现资源管理器都已成功执行本地事务则会决定提交事务,否则就回滚事务。各节点在收到事务管理器发送的“递交/回滚”请求后会统一将各自的执行结果递交/回滚。

在这里插入图片描述
 

缺点

  • 同步阻塞:在整个分布式事务未结束前,所有资源管理器(的事务涉及业务)都会处于阻塞状态;
  • 单点故障:事务管理器是整个分布式事务的核心,如果事务管理器宕机,那么所有资源管理器都会被锁定而无法继续执行;
  • 数据不一致:二阶段如果出现网络分区/节点宕机而导致部分资源管理器未收到事务递交指令/事务递交失败,那么就会出现数据不一致的情况。
     
     

3PC @ 3 Phase Commit @ 三阶段递交


    3PC协议在2PC协议的基础上引入了检查/超时机制,用于避免/处理2PC的“同步阻塞/单点故障/数据不一致”问题。3PC协议分为以下三个阶段:

  • CanCommit @ 可/询问递交:事务管理器向各资源管理器询问是否可以支持执行/提交事务。各资源管理器接收到询问后根据自身情况向事务管理器返回Yes/No回应。如果事务管理器没有在指定时间内接收到所有回应/接收到No回应,则分布式事务中断/取消。可/询问递交阶段是3PC协议引入的新阶段,目的是事先检查资源管理器的状态能否支持分布式事务的执行/递交,从而避免无意义的分布式事务执行以增强协议的可靠性&容错率;
  • PreCommit @ 预提交:在接收到所有Yes回应的情况下,分布式事务会进入预递交阶段。该阶段中事务管理器会向各资源管理器发送预递交请求,而接收到请求的各资源管理器会开启&执行本地事务但不递交,并将Undo和Redo日志写入本地事务日志中,随后向事务管理器发送Ack回应。而如果事务管理器没有在指定时间内接收到所有Ack回应/接收到Abort回应,则事务管理器会向各资源管理器发送Abort请求,从而令各资源管理器回滚本地事务。而在这阶段中如果部分已开启&执行本地执行的资源管理器未能在指定时间内接收到Abort请求,则其也会因为超时而自动回滚本地事务;
  • DoCommit @ 最终提交:在接收到所有Ack回应后,分布式事务会进入最终递交阶段。该阶段中事务管理器会向各资源管理器发送最终递交请求,而接收到请求的各资源管理器会递交事务,并向事务管理器发送Ack回应表示事务递交已完成。注意!该阶段中而如果有部分资源管理器未能在指定时间内接收到最终递交请求,则该资源管理器就可能因为超时而自动回滚本地事务,从而无法保证分布式事务的原子性,并进一步破坏数据一致性。因此3PC协议同样无法完全避免2PC协议的数据不一致问题。
     

优点

  • 可靠性&容错率提升:检查机制增强了分布式事务的可靠性&容错率;
  • 超时机制减少了对阻塞时间:超时机制减少了资源管理器等待事务管理器指令的阻塞时间;
  • 减少了单点故障对系统的影响:超时机制降低了事务管理器单点故障对系统的影响。
     

缺点

  • 复杂性增加:3PC协议相比2PC协议而言需要处理更多状态转换&超时逻辑,这为增加了实现的难度&出错的可能性;
  • 性能开销:更复杂的流程同步带来了是性能开销的增加;
  • 数据不一致:3PC协议依然未能解决数据不一致问题,虽然检查&超时有助于降低这一点,但网络分区造成的数据不一致问题依然是存在的。
     
     

TCC @ Try Confirm Cancel @ 尝试确认取消


    TCC协议是一种不同于2PC/3PC协议的分布式事务解决方案,其核心思想是“补偿机制”,即在分布式事务出现异常/失败时通过执行相反的操作来补偿之前的行为,从而达到事务的一致性。TCC将分布式事务划分为以下三个阶段:

  • Try @ 尝试:事务管理器向事务协调器申请开启分布式事务并获得全局事务ID,随后将该全局事务ID发送至各资源管理器。资源管理器接收到全局事务ID后会向事务协调器注册分支事务ID,从而将分支事务ID纳入该全局事务ID下管理。此后资源管理器便会开启&执行本地事务并预留必要的资源,以便后续递交事务时使用,并向事务管理器报告当前分支事务的开启&执行情况;
  • Confirm @ 确认:如果在尝试阶段中的所有的资源管理器都成功开启&执行了本地事务,那么分布式事务就会进入确认阶段。在确认阶段中事务管理器会向各资源管理器发送确认请求,从而令其能够真正的递交事务,并于事务管理器中标记分支事务已成功递交;
  • Cancel @ 取消:如果在尝试&确认阶段中存在资源管理器未能成功开启&执行&递交本地事务的情况,那么分布式事务就会进入取消阶段。在取消阶段中事务管理器会向各资源管理器发送取消请求,从而回滚尚未递交的事务/执行相反的操作弥补已递交的事务,并于事务管理器中标记分支事务已成功取消。而对于因为各种原因未能接收到取消请求的资源管理器,由于超时机制的存在其也会自动执行取消行为,从而极大程度的确保了事务的原子性。
     

优点

  • 极大确保了原子性:补偿机制的存在使得已递交的事务也可以被取消,从而降低因为网络分区而数据不一致的风险;
  • 避免数据库锁冲突的低性能风险:TCC通过将数据库的二阶段提交上升到微服务来实现,避免了数据库二阶段提交中锁冲突导致的长事务低性能风险;
  • 异步高性能:TCC采用了先try检查,然后异步实现confirm的方式,提高了系统的性能和可扩展性。
     

缺点

  • 侵入性强:微服务的每个事务都必须实现Try/Confirm/Cancel三个方法,增加了开发成本和后期维护改造的成本;
  • 等幂性:为了达到事务的一致性要求,Try/Confirm/Cancel接口必须实现等幂性操作,这增加了实现的复杂性;
  • 事务日志损耗性能:事务管理器需要记录事务日志,这必定会损耗一定的性能,并可能使得整个TCC事务时间拉长。

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

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

相关文章

STM32+模拟或硬件IIC+SHT20驱动问题:接上拉电阻、BUSY死锁?

主要问题: 1,使用STM32F103C8T6,模拟IIC,SCL和SDA口配置为推挽输出上拉,主要是SDA脚,每次都要输出输入模式重新配置,虽然也能通信,但不稳定,出错率大; 2&…

【工业机器视觉】基于深度学习的水表盘读数识别(3-数据标注与转换)

【工业机器视觉】基于深度学习的仪表盘识读(2)-CSDN博客 数据标注 标注扩展 Labelme 和 LabelImg 都是用于创建机器学习和计算机视觉项目所需标注数据的工具。它们都允许用户通过图形界面手动标注图像,但各自有其特点和适用场景。 Labelme…

静态路由与交换机配置实验

1.建立网络拓扑 添加2台计算机,标签名为PC0、PC1;添加2台二层交换机2960,标签名为S0、S1;添加2台路由器2811,标签名为R0、R1;交换机划分的VLAN及端口根据如下拓扑图,使用直通线、DCE串口线连接…

【Spark】Spark Join类型及Join实现方式

Spark Join类型 1. Inner Join (内连接) 示例:val result df1.join(df2, df1("id") df2("id"), "inner")执行逻辑:只返回那些在两个表中都有匹配的行。 2. Left Join (左外连接) 示例:val result df1.jo…

socket UDP 环路回显的服务端

基于socket通讯的方式&#xff0c;无论用http或者udp或者自定义的协议&#xff0c;程序结构都是类似的。这个以UDP协议为例简要说明。 #include <stdio.h> // 标准输入输出库 #include <sys/types.h> // 提供了一些数据类型&#xff0c;如ssize_t #include <sy…

Linux:network:添加ip的时候自动添加一个本地路由

文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…

Magnet Player:一款基于Web的磁力链媒体播放器

Magnet Player&#xff1a;一款基于Web的磁力链媒体播放器 项目地址:https://gitcode.com/gh_mirrors/ma/magnet-player 是一个创新的开源项目&#xff0c;它允许用户直接在浏览器中播放磁力链&#xff08;Magnet URI&#xff09;内容&#xff0c;无需下载或安装任何桌面应用…

php:完整部署Grid++Report到php项目,并实现模板打印

一、下载Grid++Report软件 路径:开发者安装包下载 - 锐浪报表工具 二、 安装软件 1、对下载的压缩包运行内部的exe文件 2、选择语言 3、 完成安装引导 下一步即可 4、接收许可协议 点击“我接受” 5、选择安装路径 “浏览”选择安装路径,点击"安装" 6、完成…

web安全攻防入门教程

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…

前端node环境安装:nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)

需求&#xff1a;在做前端开发的时候&#xff0c;有的时候 这个项目需要 node 14 那个项目需要 node 16&#xff0c;我们也不能卸载 安装 。这岂不是很麻烦。这个时候 就需要 一个工具 来管理我们的 node 版本和 npm 版本。 下面就分享一个 nvm 工具 用来管理 node 版本。 这个…

Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?

旧版源代码地址&#xff1a;https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 旧版效果展示&#xff1a; 新版加上MeshCollider后的效果&#xff1a; 注意&#xff1a;在Unity中&#xff0c;当你动态地更改物体的Mesh时&#xff0c;通常期望…

OpenCV--特征匹配

OpenCV--特征匹配 代码和笔记 代码和笔记 import cv2 import numpy as np""" 特征匹配 """""" 暴力特征匹配&#xff1a;使用第一组&#xff08;第一幅图&#xff09;中的一个特征描述子&#xff0c;使用一些距离计算与第二组中…

什么是自动化办公

自动化办公是指使用技术工具或软件&#xff0c;通过预设流程或脚本&#xff0c;自动执行日常办公任务&#xff0c;从而提升效率、减少错误、节约时间的办公模式。它适用于需要重复性、规则明确的工作流程&#xff0c;让员工将精力集中在更具创造性和战略性的工作上。 自动化办公…

常见排序算法总结 (四) - 快速排序与随机选择

快速排序 算法思想 每一轮在数组相应的范围上随机找一个元素进行划分&#xff0c;将不大于它的所有元素都放到左边&#xff0c;将大于它的元素都放到右边。在左右两个子数组上不断地递归&#xff0c;直到整个数组上有序。 注意&#xff1a;实现时选择的时参考荷兰国旗问题优化…

unraid固态硬盘分区格式—默认1MiB对齐

背景 我的unraid中有三个机械硬盘和两个固态硬盘&#xff0c;其中两个固态硬盘组成zfs镜像的cache&#xff0c;防止其中一个硬盘出问题导致数据丢失。然而&#xff0c;今天突然看到机械硬盘的分区格式为GPT 4k&#xff0c;而固态硬盘是MBR 1MiB。想到GPT更加优秀&#xff0c;并…

Flutter 图片编辑板(一) 事件路由

一个图片编辑板&#xff0c;有两部分组成。编辑板和内容项。每一个内容项是被InteractiveViewer修饰的widget&#xff0c;具有缩放偏移的功能。 在图片编辑板上&#xff0c; 会有多个内容相&#xff0c;图片或文字&#xff08;添加文字目前还没做过&#xff09;。 当要编辑其中…

数仓技术hive与oracle对比(一)

准备 包括软硬件环境、数据、测试数据三方面的准备内容。 环境 虚拟机软件virtualbox7&#xff0c;同样的虚拟机配置&#xff1a;内存2G、cpu一核&#xff0c;物理主机同一台macbookpro&#xff08;13-2020款&#xff09;&#xff0c;所以硬盘IO读写速度一致。 综上&#x…

AR眼镜_消费级工业AR智能眼镜主板硬件解决方案

AR眼镜的研发是一项复杂的软硬件集成工程&#xff0c;它需要在摄影、音频、交互和连接等多个方面提供卓越的基础体验&#xff0c;因此产品的每个细节都显得尤为重要。 在设计AR眼镜时&#xff0c;重量、体积和散热性能都是必须认真考量的关键因素。在芯片平台的选择上&#xff…

通信原理概论复习笔记(1)

1 绪论 消息: 通信系统传输对象, 信息的载体和物理表现形式. 信息: 消息的有效内容和内涵. 信号: 消息的传输载体. 模拟通信: 信源 → \to → 调制器 → \to → 信道(噪声) → \to → 解调器 → \to → 信宿. 数字通信: 信源 → \to → 信源编码(压缩数字化) → \to →…

ASPICE评估如何优化软件开发、测试和部署流程

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽车软件过程改进及能力评定&#xff09;评估在提高软件开发、测试、部署的速度和质量方面发挥着重要作用。以下是ASPICE评估如何具体提高这些环节的具体方式&#xff1a; 一、提高软件开发效率 标准化流程&#xff1a;ASPIC…