首页 > 其他分享 >分布式事务

分布式事务

时间:2024-07-29 23:26:02浏览次数:13  
标签:事务 协调者 阶段 提交 参与者 分布式

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。这种事务处理机制旨在确保在分布式环境下,跨多个节点或服务的操作要么全部成功,要么全部失败,以保证数据的一致性和完整性。以下是关于分布式事务的详细解析:


一、定义与特性

  • 定义:分布式事务是指事务的发起者、资源及资源管理器和事务协调者分别位于分布式系统的不同节点之上。
  • 特性:分布式事务需要遵循ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

二、应用场景

在微服务架构或分布式系统中,完成某一业务功能可能需要横跨多个服务,操作多个数据库。这些操作分布在不同的服务器上,且属于不同的应用,此时就需要分布式事务来确保这些操作要么全部成功,要么全部失败。

三、关键技术

  1. 两阶段提交协议(2PC):
  • 阶段一:准备阶段。事务协调者(Transaction Manager, TM)向所有参与者(Resource Manager, RM)发送准备提交请求。如果所有参与者都准备成功,则进入下一阶段;如果有参与者准备失败,则协调者通知所有参与者回滚事务。
  • 阶段二:提交阶段。如果所有参与者在准备阶段都成功,则协调者发送提交请求;如果有参与者失败,则发送回滚请求。
  • 优缺点:优点在于保证了事务的原子性和一致性;缺点在于存在同步阻塞问题、单点故障问题和数据不一致问题。
  1. 三阶段提交协议(3PC):
  • canCommit阶段:协调者询问所有参与者是否可以顺利执行事务。
  • preCommit阶段:如果所有参与者都准备提交事务,则协调者发出提交请求;否则发出中止请求。
  • doCommit阶段:所有参与者根据协调者的请求执行提交或中止操作。
  • 优缺点:相比两阶段提交,三阶段提交减少了阻塞的可能性,但仍然存在性能开销和单点故障问题。
  1. TCC(Try-Confirm-Cancel):
  • Try阶段:执行所有业务检查,尝试预留必须的资源。
  • Confirm阶段:执行真正的提交操作,释放资源。
  • Cancel阶段:如果Try阶段失败,则执行回滚操作,释放预留的资源。
  • 优缺点:提供了更细粒度的事务控制,但实现较为复杂。

四、其他相关概念

  • CAP定理:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三项中的两项。
  • BASE理论:是对CAP定理的延伸和补充,强调即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性(Eventually Consistent)。

五、总结

  • 分布式事务是分布式系统中保证数据一致性和完整性的重要机制。
  • 通过遵循ACID特性,并利用两阶段提交、三阶段提交或TCC等协议,可以确保在分布式环境下的事务操作要么全部成功,要么全部失败。
  • 也需要考虑CAP定理和BASE理论等分布式系统设计的基本原则,以在一致性、可用性和分区容忍性之间做出合理的权衡。

标签:事务,协调者,阶段,提交,参与者,分布式
From: https://blog.csdn.net/yuiezt/article/details/140783503

相关文章

  • SQLServer 事务复制在发布端(publication)和订阅端(subscription)对应的数据库还原之后复
     书接上文,在一个正常的事务复制环境中,如果发生了数据库还原,事务复制会不会出问题,出问题之后又如何恢复,如果在不删除订阅发布重建的情况下,如何在现有基础上修复事务复制的异常,这个问题可以分为两部分看:1,如果publisher数据库发生了还原操作,事务复制会出现什么异常,该如何恢复?2,如......
  • 手搓Lock注解,一举解决redisson分布式锁
    最近闲来时间,写了个redis-lock-stater,在pom中引入即可,直接在所要加锁的函数中使用@lock注解即可1、首先需要了解什么是分布式锁分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作,若不同的系统或是同一个系统的不同主机之间共享了......
  • 分布式事务
    CAP定理一致性:分布式应用读写是一致的,应用A做了修改应用B读取时会获取修改可用性:分布式应用服务是可访问的分区容错性:分布式应用之前存在网络问题会导致各个应用无法通讯分区容错性是必须要保证的。一致性和可用性不能同时保证,假如应用A做了修改为了保证一致性在A没有做数据......
  • Hadoop伪分布式/分布式平台搭建教程以及安装过程中遇到部分问题的解决经验
    Hadoop伪分布式/分布式平台搭建教程声明:本搭建教程参考XMU的数据库实验室林子雨老师的搭建文档,附带了一点我们在安装时候遇到的问题和解决经验。XMU安装指导文档网址:https://dblab.xmu.edu.cn/blog/2544/目录文章目录Hadoop伪分布式/分布式平台搭建教程目录1.Linux......
  • MySQL大事务堵塞写入
    这是2022年发生的一起线上事故,现在有空记录一下。线上使用的是5.6版本的,大部分业务的逻辑都是先delete全表,再insert,所以大事务一直是个问题,但是未发生过阻塞业务的情况。现象MySQL服务器的负载在一分钟内急剧上升,后又迅速恢复正常。查看binlog文件发现当时有个3G的binlog文件......
  • mysql操作线上数据时建议用事务
    事务管理是数据库操作中的一个重要概念,特别是当涉及到需要保证数据完整性和一致性的场景。事务是一系列操作,它们作为一个整体被执行,这意味着事务中的所有操作要么全部成功,要么全部失败。在关系型数据库中,事务通常遵循ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isol......
  • Lua脚本解决Redis 分布式锁
    Redis分布式锁由于判断锁和释放锁是两个步骤,在判断一致后如果线程阻塞导致锁超时释放。之后阻塞结束,当前线程继续执行释放了其它线程的锁。锁设计失败解决方法:通过lua封装比较和释放锁两个步骤:要么同时成功,要么同时失败我的疑问?为什么不对判断和释放锁两个步骤再加锁@Over......
  • mysql中的事务
     一、事务的定义        事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。特点:一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到该事务开始之前的状......
  • 团队内部技术分析-数据库事务和锁
    背景目前团队是学习型的团队,除了完成日常业务工作需求外,还需要考虑做一些相应的输出。与团队共同成长,同时也是驱动自己学习总结的一种很好的方式。分享内容什么是数据库事务?数据库的锁?不同的数据库隔离级别的加锁方式?如何避免锁等待死锁?什么是数据库事务MySQL常用的存储......
  • 服务端高并发分布式结构演进之路
    一、概述本文以一个“电子商务” 应用为例,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,了解过后可以对架构的演进有一个整体的认知。二、常见概念在正式引入架构演进之前,先对其中一些比较重要的概念做前置介绍。1、......