首页 > 其他分享 >分布式事务 实战 - 分布式事务简介

分布式事务 实战 - 分布式事务简介

时间:2024-06-07 18:31:44浏览次数:22  
标签:事务 简介 事务处理 2PC 提交 3PC 分布式

分布式事务是指涉及多个参与方的系统,其中每个参与方都可能执行多个操作,而这些操作需要在各个参与方之间保持一致性。这种情况下,确保数据的一致性变得复杂而关键。在分布式系统中,由于网络延迟、节点故障等原因,确保所有操作的一致性变得更加具有挑战性。

为了处理这种情况,有几种经典的分布式事务处理模型,包括两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(Compensating Transaction)等。

  1. 两阶段提交(2PC):这是一种经典的分布式事务处理模型。它分为准备阶段和提交阶段。在准备阶段,事务协调者向所有参与者发送准备请求,并等待它们的准备就绪响应。如果所有参与者都准备就绪,则进入提交阶段,事务协调者向所有参与者发送提交请求。如果任何一个参与者出现问题,则会进行回滚操作。尽管2PC可以保证事务的原子性和一致性,但它存在单点故障和阻塞的问题。

  2. 三阶段提交(3PC):为了解决2PC的阻塞问题,引入了3PC。3PC在2PC的基础上引入了超时机制,以处理协调者的故障和消息丢失等情况。虽然3PC解决了2PC的某些问题,但它仍然存在阻塞的可能性,因为在协调者等待超时时,参与者可能处于阻塞状态。

  3. 补偿事务(Compensating Transaction):与2PC和3PC不同,补偿事务采用了一种不同的方法来处理分布式事务。它允许在某些参与者已经提交操作而其他参与者失败时执行回滚操作,以保持数据的一致性。这种方法的优势在于可以在某些情况下提高系统的可用性,但需要仔细设计补偿逻辑以确保一致性。

在实际的分布式系统中,选择适当的分布式事务处理模型取决于具体的业务需求和系统设计考虑。同时,还有许多新的技术和方案,如分布式事务处理中的 Saga 模式、基于消息的事务处理等,可以用来处理特定类型的分布式事务场景。

标签:事务,简介,事务处理,2PC,提交,3PC,分布式
From: https://blog.csdn.net/qq_33240556/article/details/139407779

相关文章

  • 【源码】Spring Data JPA原理解析之事务注册原理
     SpringDataJPA系列1、SpringBoot集成JPA及基本使用2、SpringDataJPACriteria查询、部分字段查询3、SpringDataJPA数据批量插入、批量更新真的用对了吗4、SpringDataJPA的一对一、LazyInitializationException异常、一对多、多对多操作5、SpringDataJPA自定义......
  • @Transactional 注解下,事务失效的多种场景
    packagecom.example.api.demo.boke;importcom.example.api.demo.config.exceptions.MyException;importorg.springframework.transaction.annotation.Transactional;/***@Transactional*注解下,事务失效的七种场景*/publicclassTransaction{/**......
  • 高并发下使用Redis分布式锁确保接口执行唯一性【重点】
    摘要:本文将介绍如何使用Redis分布式锁来确保在高并发环境下,确保某个接口只有一个线程能够执行。通过使用Redis的SETNX命令,我们可以实现一个简单的分布式锁,从而避免多个线程同时访问共享资源。一、背景在高并发的系统中,为了保证数据的一致性和完整性,我们经常需要对某些接口......
  • Redis(事务、持久化、高可用 、高可扩、过期删除、内存淘汰)说明、分析、区别
    Redis高级理解Redis事务机制掌握Redis持久化机制理解Redis高可用—主从复制、哨兵模式理解Redis高可扩—RedisCluster数据分片掌握Redis过期删除策略掌握Redis内存淘汰策略1事务机制1.1场景分析以关注为例,在B站上程序员关注了A,同时A也关注了程序员,那么......
  • 【CPP】队列简介及其简化模拟实现
    队列简介及其简化模拟实现目录1.队列简介2.队列简化模拟实现1.队列简介队列是一种满足先进先出的数据结构。具体参考:【数据结构】队列在CPP中,stl也存在库队列,方便使用。库队列参考:queue_stl2.队列简化模拟实现template<classT,classcontainer=deque<T......
  • 嵌入式Linux系统编程 — 2.1 标准I/O库简介
    目录1标准I/O库简介1.1 标准I/O库简介1.2 标准I/O和文件I/O的区别2 FILE指针3标准I/O库的主要函数简介4 标准输入、标准输出和标准错误4.1标准输入、标准输出和标准错误概念4.2示例程序5 打开文件fopen()5.1 fopen()函数简介5.2 新建文件的权限5.3......
  • 24-unittest简介
    一、unittest简介        unittest是Python中常用的单元测试框架,与Java中的Junit单元测试框架类似。二、示例程序1)导入unittest模块importunittest2)使用help()函数查看源码中的示例程序help(unittest)Simpleusage:importunittestclassIntegerAr......
  • 巧用docker+jmeter快速实现分布式百万级并发
    分享背景碰到的问题:一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试~解决办法:1、修改jmeter配置文件里的内存堆2、引入jmeter分布式压测带来的问题:如果我们要做分布式负载测试–我们需要1个主机和N个从机来产生巨大的负载。每台JMeter从机都需要......
  • python 正则表达式使用简介和实用技巧
    元字符释义.代指任意字符^从字符串开始匹配$匹配字符串的结尾*匹配前面挨着的字符,能匹配0到无穷次+同*,能匹配1到无穷次(最少1个)?匹配前面挨着的字符,匹配0或1次{}自定义匹配次数,{1,6}匹配1到6次,{6}匹配6次(重复匹配前面挨着的字符)......
  • Redis之事务
    事务mysql的事务mysql的事务满足ACID:原子性、一致性、隔离性和持久性。redis的事务事务是指一个完整的动作,要么全部执行,要么什么也没有做。Redis事务不是严格意义上的事务,只是用于帮助用户在一个步骤中执行多个命令。单个Redis命令的执行是原子性的,但Redis没有......