首页 > 其他分享 >分布式事务解决方案

分布式事务解决方案

时间:2024-08-21 23:37:19浏览次数:8  
标签:事务 解决方案 协调者 2PC 提交 参与者 分布式

背景

分布式事务,后端开发中比较常见啦。因为在面试的时候,总是有interviewers让我给他普及一下分布式事务,虽然我会的也不多呀但是还是浅浅说一说;
今天心血来潮,好好地总结一下分布式事务,希望每一位后端工程师都能彻底理解分布式事务。

什么是分布式事务?

答:既然是分布式,首先必然是分布式系统中的一个概念啦。单体应用没这个东西,也不需要这个东西。本地事务就够啦,Spring给我们提供的注解@Transactional, InnoDB引擎会为我们保证事务的ACID特性。但是分布式系统中,目前大多数互联网公司都在用分布式系统,微服务架构等。所以,学好分布式事务太有必要。废话不多说,直接上原理。
总结来说,分布式事务涉及了多个独立的数据源(数据库)或者参与者的事务操作,这些数据源分布在不同的计算机或网络中;分布式事务确保在不同节点之间的多个操作要么全部成功,要么全部失败。

分布式事务解决方案

2PC

两阶段提交协议,也叫XA协议。主要包含两个阶段,第一个阶段是预备阶段,第二个阶段是提交阶段。
2PC协议首先有分事务协调者角色和事务参与者。协调者是事先指定好的一个节点。参与者是一些涉及到数据库操作的表,暂时可以这样理解。这些多个参与者一般是分布在不同的节点上。

  • 准备阶段。协调者向所有参与者发送事务准备请求,参与者执事务操作,并回复协调者准备就绪的消息;如果多个参与者中有一个参与者未准备就绪或者发生错误,那么协调者会发送中止请求。只有所有参与者都回复准备就绪,才会进入第二阶段。
  • 提交阶段。所有参与者都已经准备就绪,协调者分别发送提交的消息,参与者收到消息以后,执行事务的提交操作,并向协调者回复提交完成。
    协调者收到了所有事务参与者提交完成的消息后,整个分布式事务才算提交完成。如果有一个参与者未能提交或者发生错误,那么协调者会向所有参与者发送中止请求,进行事务的回滚操作。
如何评价2PC?

1、2PC有单点故障的问题。一旦事务协调者故障(因为是使用到了某个节点嘛),那么整个事务将无法继续进行,陷入故障。
2、数据不一致。如果协调者在发送提交信息时,只有部分参与者收到了消息,并执行了提交,此时网络异常,就导致只有部分参与者执行了事物的提交,另一部分则没有提交,从而造成一个数据不一致性。
3、阻塞风险。如果准备阶段,有一个参与者无法响应或者失败,那么整个系统都会陷入阻塞状态,等待超时处理。
4、性能问题。整个链路是串行的,响应时间较长,不适合高并发的场景。

3PC

三阶段提交又称3PC,相对于2PC来说增加了CanCommit阶段和超时机制。如果某段时间内没有收到协调者的commit请求,那么就会自动进行commit,解决了2PC单点故障的问题。
但是性能问题和数据不一致性问题还是没解决。3PC的步骤是这样的:
1、询问节点。CanCommit, 首先询问参与者,是否有能力完成此次事务?

  • 如果都返回yes,则进入第二阶段
  • 有一个返回no或等待响应超时,则中断事务,并向所有参与者发送abort请求。
    2、准备阶段;同2PC。需要注意的是,参与者收到消息后开始执行事务操作,会首先将Undo和Redo信息记录到事务日志中。参与者执行完事务操作后,向协调者反馈ACK, 表示已经准备好提交了。
    3、提交阶段。同2PC。

TCC

本地消息表

本地消息表+MQ最终一致性事务

Seate

Saga

标签:事务,解决方案,协调者,2PC,提交,参与者,分布式
From: https://www.cnblogs.com/xyuanzi/p/18372746

相关文章

  • 数据库MySQL之事务、索引
    目录1.概述2.事务3.索引3.1索引结构3.2操作语法1.概述场景:假如我们需要解散教学部,那么该部门下的所有员工都需要删除。如果教学部成功删除了,但员工出于某些原因(比如SQL语句写错了等)并没有删除,此时就会出现数据不一致的问题。这时我们可以通过数据库中的事务来解决。......
  • 《英雄传说:零之轨迹改》遭遇启动难题?paul.dll缺失原因及定制化解决方案
    《英雄传说:零之轨迹改》作为一款深受玩家喜爱的角色扮演游戏,在启动过程中可能会遇到各种问题,其中之一便是“paul.dll缺失”的难题。这个问题通常会导致游戏无法正常启动或运行时出现错误。以下是对该问题的原因分析及定制化解决方案:原因分析文件损坏或丢失:在游戏安装、更新......
  • 《乔乔的奇妙冒险:全明星大乱斗》启动遇阻?common.dll丢失解决方案!
    当《乔乔的奇妙冒险:全明星大乱斗》这款游戏在启动时遇到“common.dll丢失”的问题时,这通常意味着游戏所需的某个关键动态链接库(DLL)文件未能正确加载。以下是一些有效的解决方案,帮助你快速解决这一问题:1.重新安装游戏游戏文件可能会在安装过程中因为各种原因而损坏或丢失,导......
  • 分布式系列之ID生成器
    背景在分布式系统中,当数据库数据量达到一定量级后,需要进行数据拆分、分库分表操作,传统使用方式的数据库自有的自增特性产生的主键ID已不能满足拆分的需求,它只能保证在单个表中唯一,所以需要一个在分布式环境下都能使用的全局唯一ID。应用场景用户ID、图片ID等各种业务场景分库......
  • 分布式资源管理和调度架构
    概述不管是计算任务还是数据存储都会涉及资源分配,资源包括但不限于硬件资源如CPU、内存、硬盘、网口。在单机环境中,资源管理相对简单;分布式环境中,资源分布相对分散,如何协调资源应对计算任务和数据存储就是亟待解决的问题。资源管理和调度是将计算任务分配到资源的过程,为了处理并......
  • 跨域、JSONP、CORS、Spring、Spring Security解决方案
    概述JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JSV8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问题。浏览器控制台......
  • 移动端上传图片翻转的解决方案
    最近在处理移动端选择图片实时预览并上传时遇到一个问题:上传前图片预览正常,但上传到服务器上的图片展示到页面上时,有时会出现图片翻转的问题,一般是翻转90度。后经一翻研究找到了问题所在,特在此记录一下。问题描述接上面提到的问题,经过一些测试,发现:如果选取的图片是在横屏状......
  • Java中的司机抢单实现:并发问题与解决方案
    文章目录司机抢单的基础实现乐观锁解决并发问题总结在共享经济的浪潮中,像滴滴打车这样的服务已经成为我们生活中不可或缺的一部分。对于司机和平台来说,抢单是一个关键环节,如何在保证系统高效运行的同时,确保抢单过程的公平与准确,是一个值得深入探讨的问题。在这篇博......
  • 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应
    1.前言统一返回值封装、统一异常处理和异常错误码体系的意义在于提高代码的可维护性和可读性,使得代码更加健壮和稳定。统一返回值封装可以避免每一个接口都需要手工拼装响应报文;统一异常处理可以将异常处理的逻辑集中到一个地方,避免代码中出现大量的try-catch语句,降低了代码的......
  • 高密度计算 – 400G超大容量DPI解决方案
    高密度计算–400G超大容量DPI解决方案FPGA硬件加速| 单卡400G流量卸载| 通用x86环境| DPI硬件加速 架构困境:性能的天花板触手可及在过去的二十多年中的大部分时间里,处理器性能以每年大约55%速度快速提升,而内存性能的提升速度却只有每年10%左右。早在1994年,计算机......