分布式 分布式事务 总结

前言


 相关系列

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

分布式事务


    所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言,一次完整的交易需要同时调动两个节点。而如果将这个交易的所有操作作为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事务时间拉长。

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

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

相关文章

部署GitLab服务器

文章目录 环境准备GitLab部署GitLab服务器GitLab中主要的概念客户端上传代码到gitlab服务器CI-CD概述软件程序上线流程安装Jenkins服务器 配置jenkins软件版本管理配置jenkins访问gitlab远程仓库下载到子目录部署代码到web服务器自动化部署流程 配置共享服务器配置jenkins把git…

kubeadm安装K8s集群之基础环境配置

系列文章目录 1.kubeadm安装K8s集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx 3.kubeadm安装K8s集群之master节点加入 4.kubeadm安装K8s集群之worker1节点加入 kubeadm安装K8s集群基础环境配置 1.首先确保所有机器可以通信,然后配置主机host…

海康威视摄像头RTSP使用nginx推流到服务器直播教程

思路: 之前2020年在本科的时候,由于项目的需求需要将海康威视的摄像头使用推流服务器到网页进行直播。这里将自己半个月琢磨出来的步骤给大家发一些。切勿转载!!!! 使用网络摄像头中的rtsp协议---------通…

GLM-4V-Flash:智谱AI引领多模态视觉模型新潮流

点击访问 chatTools 免费体验GPT最新模型,包括o1推理模型、GPT4o 和Claude等模型! 随着人工智能技术的不断进步,多模态模型逐渐成为行业关注的焦点。智谱AI作为国内领先的人工智能公司,再次以创新姿态推出了首款免费多模态视觉模型…

头歌 计算机操作系统 Linux之线程同步二

第1关:信号量 任务描述 在上一个实训中,我们学习了使用互斥锁来实现线程的同步,Linux系统中还提供了另一个类似互斥锁的线程不同操作,那就是信号量。 本关任务:学会使用信号量来实现线程间的同步与互斥。 相关知识 …

WADesk 升级 Webpack5 一些技术细节认识5和4的区别在哪里

背景 升级过程中发现有很多新的知识点,虽然未来可能永远都不会再遇到,但是仍然是一次学习的好机会,可以让自己知道,打包软件的进化之路,和原来 Webpack 4 版本的差异在哪里。 移除的依赖记录 babel/register: 在 Nod…

unity打包web,如何减小文件体积,特别是 Build.wasm.gz

unity打包WebGL,使用的是wasw,最终生成的Build.wasm.gz体积很大,有6.5M,有几个方法可以稍微减小这个文件的大小 1. 裁剪引擎代码: 此步可将大小从6.5减小到 6.2(此项默认开启,只是改了裁剪等级…

敏捷开发04:Scrum 中的 Product Backlog(产品待办列表) 详细介绍

Product Backlog 产品待办列表 在计划开发产品功能时,都希望产品功能上线后,用户能够喜欢并经常使用。 因此在开发产品新功能时,就要衡量哪些产品需求是对用户最有价值,这是最应该思考的问题。 然后把这些有价值的需求集合放在一…

C# 探险之旅:第一节 - 我的第一个C# 程序

说明:教程针对初学者入门到精通的整个教程,采用连载的方式,会不定时更新。时间多的话可能会更新多一些。 一、首先,我们需要去微软官方下载vs2022安装程序,然后在自己的计算机中安装完编程的IDE程序。 二、假设我们已…

Ubuntu24.04配置STMTrack

项目地址:https://github.com/fzh0917/STMTrack 一、安装 CUDA 参考链接: Ubuntu24.04配置DINO-Tracker Ubuntu多CUDA版本安装及切换 由于之前在其他项目中已经安装了 CUDA12.1,这次需要安装另一个版本。 1. 查看安装版本 按照 requireme…

Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)

前言 感谢大家对 Multi person online edit(多人在线编辑器) 项目的支持,mpoe 项目使用 quill、luckysheet、canvas-editor 实现的 md、excel、word 在线协同编辑,欢迎大家Fork 代码,多多 Start哦~ Multi person online edit 多人协同编辑器…

workflow笔记

workflow 介绍 搜狗公司C服务器引擎,编程范式。支撑搜狗几乎所有后端C在线服务,包括所有搜索服务,云输入法,在线广告等,每 日处理数百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数后端与…

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…

【人工智能】5G-A技术及应用

文章目录 前言一、5G-A基本概念及产业进展1、5G-A概述2、移动通信发展历史:不断扩大联结规模,扩展业务边界的过程3、标准Ready:首版本R18将于2024年H1冻结4、标准Ready:IMT2020完成5G-A技术测试5、频谱Ready:超大带宽是实现万兆体验的基础6、5G-A全球商用…

与 Cursor AI 对话编程:2小时开发报修维修微信小程序

本文记录了如何通过与 Cursor AI 对话,全程不写一行代码的情况下,完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们: 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图: 一、项目配置 首先我是这样和 AI 对…

多模态大语言模型 MLLM 部署微调实践

1 MLLM 1.1 什么是 MLLM 多模态大语言模型(MultimodalLargeLanguageModel)是指能够处理和融合多种不同类型数据(如文本、图像、音频、视频等)的大型人工智能模型。这些模型通常基于深度学习技术,能够理解和生成多种模…

机器学习:全面学习路径指南

摘要: 本文精心规划了一条从入门到精通机器学习的学习路线,详细涵盖了基础理论构建、核心技术栈掌握、主流算法学习、实践项目锻炼以及前沿领域探索等多个关键阶段。通过逐步深入各个层面,介绍必备的数学知识、编程工具、经典与现代机器学习算…

Kingbase V8R6 数据库自动(逻辑)备份、删除脚本-Linux

脚本说明 1.该脚本为Linux环境下自动备份、删除Kingbase数据库备份脚本(逻辑备份); 2.执行脚本前,请先对脚本进行修改后,再使用。脚本效果 1.执行脚本时,若备份目录不存在,则自动创建备份目录…

网络应用技术 实验六:通过 DHCP 管理园区网 IP 地址(华为ensp)

一、实验简介 构建园区网,通过 DHCP 服务器为全网的用户主机提供 IP 地址。 二、实验目的 1 、理解 DHCP 的工作原理; 2 、掌握 DHCP 服务器的创建和配置方法; 3 、掌握将 VirtualBox 虚拟机引入 eNSP 的方法; …

Elasticsearch使用(2):docker安装es、基础操作、mapping映射

1 安装es 1.1 拉取镜像 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:7.17.3 1.2 运行容器 运行elasticsearch容器,挂载的目录给更高的权限,否则可能会因为目录权限问题导致启动失败: docker r…