`
imtinx
  • 浏览: 36154 次
  • 性别: Icon_minigender_1
  • 来自: 威海
社区版块
存档分类
最新评论

去分布式事务

阅读更多

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。

  阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。 

阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。

    在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。

  事实上,有所得必有所失,分布式事务提供的ACID保证是以损害系统的可用性、性能与可伸缩性为代价的。

1、可用性下降:从上面的二阶段提交协议可以看出,只有在参与分布式事务的各个数据库实例都能够正常工作的前提下,分布式事务才能够顺利完成,只要有一个工作不正常,整个事务就不能完成。这样,系统的可用性就相当于参加分布式事务的各实例的可用性之积,实例越多,可用性下降越明显。

2性能和可伸缩性首先是事务的总持续时间通常是各实例操作时间之和,因为一个事务中的各个操作通常是顺序执行的,这样事务的响应时间就会增加很多;其次是一般Web应用的事务都不大,单机操作时间也就几毫秒甚至不到1毫秒,一但涉及到分布式事务,提交时节点间的网络通信往返过程也为毫秒级别,对事务响应时间的影响也不可忽视。由于事务持续时间延长,事务对相关资源的锁定时间也相应增加,从而可能严重增加了并发冲突,影响到系统吞吐率和可伸缩性。

    在高并发的系统中使用分布式事务显然会遇到性能瓶颈,比如一个秒杀系统,分布式事物的使用无疑将大大降低系统的反应速度。为了解决这个问题,我们引入最终一致性(Eventually Consistent),即容许一段时间的不一致,不一致的时间窗口根据不同业务确定。

    分布式系统中,去除分布式事务的一个显而易见的方法是通过某种方式去异步的执行各个节点的操作,最终保证各个节点的一致性。这里介绍一种使用操作队列和消息状态来取代分布式事物的方案。

    首先我们假设有AB两个分布式节点,我们需要操作完A的基础上去操作B,两个操作本来是要分布式事务保证的,但是我们允许AB存在短时间的不一致性。


 

    我们在A节点加一个操作队列,存储对B节点的操作;在B节点增加一个结果表,存储操作运行的结果。如下图

 


 

    操作完A节点后,将操作B节点的操作加入到操作队列中即可完成本次调用,由于没有去操作分布式的B节点,响应速度提高很多。操作队列和A节点存储同一个节点,可以通过本地事务的方法保证操作的原子性。之后由另外的线程去从操作队列中取出操作,然后检查B节点的结果表判断操作是否已经成功,没有成功则去执行操作,更新B节点数据,同时根据执行情况在结果表中写入结果,如果结果是成功,需要返回A节点删除操作队列中对应的操作。由于写入结果和删除操作属于分布式操作,我们不使用事务,不保证操作一定成功,即使删除操作失败了也没关系,下次操作来了,判断结果已经成功就不会再执行操作,而是直接返回A删除操作,因此对B节点数据不会进行重复操作。

      虽然由于没有分布式事务的强一致性保证,使用上述方案在系统将短时间内处于不一致状态。但基于操作队列和消息表,最终可以将系统恢复到一致。

  • 大小: 1.8 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

    以银行为例讲述分布式事务数据库的选型及技术架构(去IOE培训)

    以银行为例讲述分布式事务数据库的选型及技术架构(去IOE培训的内部资料)

    基于MySQL和PHP的分布式事务处理.pdf

    分布式事务处理的核心在于确保跨多个数据库的操作能够成功地一起完成或者一起失败,以保持数据的一致性。本文将深入探讨基于MySQL和PHP实现的分布式事务处理机制,并重点介绍如何利用XA接口来实现可靠的分布式事务...

    Sybase ASE 12.5 使用Adaptive Server 分布式事务管理功能.pdf

    这使得 Sybase ASE 能够作为资源管理器参与到更复杂的分布式事务中去。 3. **故障恢复能力**:在分布式事务中,任何一个参与节点的故障都可能导致整个事务失败。Sybase ASE 通过日志记录和恢复机制来确保即使在发生...

    微服务架构下的分布式事务处理.pdf

    本文将详细介绍微服务架构下分布式事务处理的相关知识,包括分布式事务处理模型、微服务架构的特点、以及在微服务架构下处理分布式事务的不同方法和它们的优缺点。 分布式系统是一种由多个地理位置分散、通过网络...

    消除分布式事务的方法

    由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议^

    一种分布式事务数据的差分隐私发布策略

    通过这些内容,我们可以看到差分隐私技术在分布式事务数据发布领域的应用,既保障了数据隐私的安全,又保证了数据效用的优化。这对于促进大数据分析技术的健康发展以及保护个人隐私权益具有重要意义。

    微服务架构分布式事务解决方案设计思路

    一、分布式事务方案:最终一致性、事务补偿、TCC、两阶段提交、最大能力通知等。具体结合业务场景。很多大型企业自主研发了自己的分布式事务解决方案,如:支付宝 XTS,去哪儿QMQ。1.基于可靠消息的最终一致性解决...

    C#开发基于FreeSql多库分布式事务、跨库查询、跨库分页查询、跨库增删改等功能实现源码+项目说明+sln.zip

    既然分库了 分布式事务怎么处理,说到分布式事务 常见的解决方案有TCC/SAGA/消息队列最终一致性,在.NET生态中有基于消息队列实现的分布式事务 [CAP](https://github.com/dotnetcore/CAP) ,TCC和SAGA调研了很久没有...

    微服务分布式事务解决方案之TCC,诚信至上

    微服务分布式事务解决方案之TCC,针对支付系统环节,采用消息对列的方式

    JAVA大礼包,微服务,分布式事务,hadoop,Docker

    本人把在CSDN下载的很多关于JAVA技术的连接集合在了一起,主要要JAVA基础,JAVA高级,微服务,分布式事务,大数据。里面的各种资源需要你去筛选,愿你淘到满意的内容。如有版权问题请联系数据源或者是CSDN,也请联系...

    分布式事务的N种实现

    在微服务架构中,随着服务的逐步拆分,数据库私有已经成为共识,这也导致所面临的分布式事务问题成为微服务落地过程中一个非常难以逾越的障碍,但是目前尚没有一个完整通用的解决方案。其实不仅仅是在微服务架构中,...

    详解Spring Boot微服务如何集成fescar解决分布式事务问题

    Spring Boot 微服务集成 Fescar 解决分布式事务问题 在分布式系统中,事务问题一直是一个难以解决的问题。在传统的 2PC 提交协议中,会持有一个全局性的锁,所有局部事务预提交成功后一起提交,或有一个局部事务预...

    分布式数据库和事务处理06

    分布式数据库和事务处理是数据库系统中的重要概念,特别是在多处理器或网络环境下的数据管理。并发控制是确保在多个事务同时执行时数据一致性、完整性和隔离性的关键机制。 并发执行是多用户环境中数据库系统的基本...

    分布式数据库在区块链中的应用.pptx

    区块链常常被误解为仅仅是分布式事务数据库,但实际上,它是一个更为复杂且独特的系统,融合了分布式事务、加密算法、解密算法以及数据同步等多个核心要素。 首先,区块链并不等同于分布式事务数据库。尽管两者都...

    0xcaffebabe#note#分布式事务1

    优点:实现强一致性缺点:整个事务的执行需要由协调者在多个节点之间去协调单点问题:协调者如果发生故障,参与者不能单方面决定是提交还是回滚,需要人工介入性能问题:所

    Hmily柔性分布式事务解决方案-其他

    Hmily是柔性分布式事务解决方案,提供了TCC 与 TAC 模式。它以零侵入以及快速集成方式能够方便的被业务进行整合。在性能上,日志存储异步(可选)以及使用异步执行的方式,不损耗业务方法方法。之前是由我个人开发,...

    sharding-jdbc分布式数据库培训方案

    其功能包括分库分表、读写分离和分布式主键生成,并初步实现了柔性事务。 总的来说,Sharding-JDBC 是一个强大的工具,能够帮助开发者构建可扩展的分布式数据库系统,应对大规模数据和高并发的业务场景。通过合理的...

Global site tag (gtag.js) - Google Analytics