`

分布式事务-2PC

 
阅读更多
一、ACID是事务的基本标准,最终的目的就是一致性和持久性,其中原子性和隔离性只是为了满足前面2条的手段;原子性的基本原则是对数据的操作要么全部生效,要么全部不生效;隔离性至少保证在同一批数据的范围内,操作是互斥或者串行的,也就是对相同数据A来说在事务N没有完成之前事务M是不能操作数据A的,要么事务M失败,要么等待N完成。

二、在分布式场景下要想满足原子性的要求,需要在本地事务的基础上想办法,也就是说分布式事务的原子性=进程内原子性保证+进程之间原子性保证,进程内原子性就不说了,可以参考数据库上Redo和Undo的思路,进程之间的原子性就是保证要么所有的进程全部成功,要么全部失败,隔离性就是保证在某个数据分区上互斥或者串行,所以进程之间最简单的事务实现就是每个机器执行事务,失败的话all roll back,成功的事务完结 ,这就是经典的2PC协议。

三、2PC协议本身很简单,但是其中发起投票的机器不能是单点所以需要备份双机去解决这个问题。

四、但是一旦进去网络环境就有一个问题,网络的不可靠,一旦机器不可达,你并不知道是不是机器宕掉了还是简单的网络不可达,所以单机要有自恢复能力,也就是说必须记录我执行到哪儿了,一旦网络可达(不管是宕机恢复还是网络恢复),单机首先进入恢复模式,记录住自己的状态,然后向标准主机(master)同步数据,达到统一模式再进去对外提供服务的状态,这就是最原始的分布一致性协议的衍生过程,这个和ZK的ZAB协议思路非常相似。



五、2PC也就是二阶段提交,是分布式事务处理常用的一致性算法,利用该协议非常方便完成各个参与者的协调,统一决定事务的提交和回滚,从而能保证分布式数据的一致性。

六、顾名思义,二阶段提交将事务提交的过程分成2个阶段。
阶段一:提交事务请求阶段
协调者提交事务预执行询问--》参与者事务预执行(取决于本地事务完成,比如将Undo和Redo信息记入事务日志中)--》参与者返回协调者ACK、NO或者超时
阶段二:提交事务执行阶段
当阶段一所有的参与者返回ACK消息,执行事务提交阶段:
协调者提交事务执行--》参与者提交事务本地提交--》参与者返回协调者ACK消息--》事务完成
当阶段一部分参与者返回NO消息或者部分执行超时,执行事务回滚阶段:
协调者提交事务rollback--》参与者提交本地rollback--》参与者返回协调者ACK消息--》事务完成。

七、
2PC优点:简单明了,实现方便。
2PC缺点:
同步阻塞:
2PC最大的一个问题就是同步阻塞,就是在2次阶段组成一个完成的事务,在这个过程中所有的参与者都是阻塞的,其中来看就是大部分时间在等待其他参与者的响应而不是真正进行逻辑计算。
单点问题:
单点问题大问题出在协调者的角色上,当协调者执行本地任务还未来得及发出commit或者rollback或者发出部分命令(只有部分参与者收到commit或者rollback命令),这时候整个2PC阶段就无法运转甚至部分参与者一直锁定,同时也总成数据可能不一致。
太过保守:
当任意一台参与者因为本身的原因失败或者宕机或造成:
1、协调者只能等待超时,没有做到更好的时效。
2、整个事务流程全部失败,这明显和分布式设计的初衷有偏差,分布式本身就是为了综合极速能力并且极佳的水平扩缩性,这个容错设计是非常保守的。
  
分享到:
评论

相关推荐

    Java-23-通用设计-分布式事务-2PC.rar

    本资源“Java-23-通用设计-分布式事务-2PC.rar”可能包含一个视频教程(Java-23_通用设计_分布式事务_2PC.flv),旨在详细讲解如何在Java环境中实现2PC协议。 分布式事务的背景在于,当系统由多个数据库或服务组成...

    分布式事务-幂等

    常见的分布式事务模型有两阶段提交(2PC)、三阶段提交(3PC)以及更现代的方案如Saga、TCC(Try-Confirm-Cancel)和基于事件驱动的架构。 1. 两阶段提交(2PC):在第一阶段,协调者询问所有参与者是否准备好提交...

    分布式事务之2PC事务处理原理

    2PC(两阶段提交)是一种经典的分布式事务处理算法,它试图通过协调参与者的操作来实现全局的一致性。 **两阶段提交(2PC)的工作原理** 1. **准备阶段(投票阶段)**: 在这个阶段,事务协调者(通常是应用...

    分布式事务-可靠消息的服务的设计与实现(消息服务子系统)

    4. **两阶段提交(2PC)**:一种经典的分布式事务解决方案,分为准备阶段和提交阶段。但在高并发环境下,2PC可能会导致阻塞,效率较低。 5. **补偿事务(TCC)**:Try-Confirm-Cancel模式,服务提供者尝试执行业务...

    多数据源的分布式事务-已测试

    在IT行业中,分布式事务是一个重要的概念,特别是在大数据和微服务架构盛行的当下。"多数据源的分布式事务-已测试"这一主题表明我们探讨的是如何在具有多个数据源的环境中确保事务的一致性和完整性。这通常涉及到跨...

    rocketmq4.3 分布式事务-rocketmqTransaction.zip

    在RocketMQ中,分布式事务主要通过两阶段提交(2PC)协议来实现。 1. 第一阶段:准备阶段(Prepare Phase) 开发者在客户端发起一个全局事务,RocketMQ的事务监听器会先发送一个预提交消息到Broker。如果预提交...

    Java编程代码-分布式事务-源代码+讲义+资料

    分布式事务在Java编程中是一个重要且复杂的话题,它涉及到多个节点间的协调,以确保数据的一致性和完整性。在这个"Java编程代码-分布式事务-源代码+讲义+资料"的压缩包中,我们可以期待深入学习关于分布式事务的理论...

    springCloud微服务全家桶和分布式事务-springCloudFamily-FESCAR.zip

    2. **FESCAR原理**:学习FESCAR如何实现分布式事务,包括其两阶段提交的流程以及与Spring Cloud的整合方式。 3. **微服务架构设计**:探讨如何设计和实施微服务架构,包括服务拆分原则、接口定义、数据一致性等问题...

    Java-25-通用设计-分布式事务-消息队列.rar

    1. **两阶段提交(2PC)**:这是一个最基础的分布式事务协议,由预提交和提交两个阶段组成。但2PC存在一些缺点,如阻塞问题、单点故障等。 2. **补偿事务(Saga)**:Saga是一种长事务的解决方案,它将一个长事务...

    分布式事务-hm.pdf

    解决分布式事务的方法多样,如两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、 Saga模式、分布式事务协调器(如X/Open XA、Seata等)以及NoSQL数据库提供的特定事务模型。每种方案都有其优缺点,需根据...

    分布式事务-seata0.9版本(springboot-dubbo-seata-zk).zip

    通过深入理解和实践这个项目,你可以了解到分布式事务处理的原理和实践,包括两阶段提交(2PC)、分布式锁、 Saga模式等,同时也能掌握SpringBoot、Dubbo和Seata的集成使用,以及如何利用Zookeeper进行服务治理。...

    理解分布式事务 -贝聊科技1

    【分布式事务的理解】 在信息化高速发展的今天,分布式系统的应用越来越广泛,微服务和SOA(Service-Oriented Architecture,面向服务的架构)等服务架构模式成为主流。分布式系统通常由多个独立的子系统组成,它们...

    分布式事务专题-v1.1.pdf

    分布式事务的解决方案通常基于最终一致性,比如两阶段提交(2PC)和三阶段提交(3PC)协议。这些协议在处理分布式事务时,能够保证系统在面临网络分区或节点故障时仍然能按照预定的方式处理事务。 在分布式事务的控制...

    分布式事务专题-v1.1

    分布式事务是计算机科学中的一个重要概念,特别是在大型网络应用和企业级系统中,它扮演着确保数据一致性、准确性和完整性的关键角色。本专题主要聚焦于Java环境下的分布式事务处理,旨在帮助开发者理解和掌握如何在...

    学习总结 包括Java JVM MySQL NoSQL UML 缓存 消息 分布式事务-StudySummary.zip

    理解2PC(两阶段提交)、TCC(尝试、确认、补偿)等分布式事务解决方案,并根据实际场景选择合适的策略,是解决复杂分布式系统问题的关键。 这些知识涵盖了软件开发的多个重要领域,对于提升个人技能和解决实际问题...

    java分布式事务demo

    3. **两阶段提交(2PC)**:这是一种经典的分布式事务解决方案,包括准备阶段和提交阶段。所有参与者首先在准备阶段进行预提交,然后在提交阶段根据所有参与者的结果决定是否正式提交。然而,2PC存在单点故障、阻塞...

Global site tag (gtag.js) - Google Analytics