2PC 3PC Two-phase commit Three-phase commit
两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。
接下来正式介绍2PC。顾名思义,2PC将分布式事务分成了两个阶段,两个阶段分别为提交请求(投票)和提交(执行)。协调者根据参与者的响应来决定是否需要真正地执行事务,具体流程如下。
提交请求(投票)阶段协调者向所有参与者发送prepare请求与事务内容,询问是否可以准备事务提交,并等待参与者的响应。
参与者执行事务中包含的操作,并记录undo日志(用于回滚)和redo日志(用于重放),但不真正提交。
参与者向协调者返回事务操作的执行结果,执行成功返回yes,否则返回no。
提交(执行)阶段
分为成功与失败两种情况。
若所有参与者都返回yes,说明事务可以提交:协调者向所有参与者发送commit请求。
参与者收到commit请求后,将事务真正地提交上去,并释放占用的事务资源,并向协调者返回ack。
协调者收到所有参与者的ack消息,事务成功完成。
若有参与者返回no或者超时未返回,说明事务中断,需要回滚:协调者向所有参与者发送rollback请求。
参与者收到rollback请求后,根据undo日志回滚到事务执行前的状态,释放占用的事务资源,并向协调者返回ack。
协调者收到所有参与者的ack消息,事务回滚完成。
三阶段提交(Three-phase commit),也叫三阶段提交协议(Three-phase commit protocol),是二阶段提交(2PC)的改进版本。
也就是说,除了引入超时机制之外,3PC把2PC的准备阶段再次一分为二,这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。
1、引入超时机制。同时在协调者和参与者中都引入超时机制。
2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
===============================================
BASE理论
BASE理论是由eBay架构师提出的。BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网分布式系统实践的总结,是基于CAP定律逐步演化而来。
其核心思想是即使无法做到强一致性,但每个应用都可以根据自身业务特点,才用适当的方式来使系统打到最终一致性。
BASE理论简介
BASE理论是Basically Available(基本可用),Soft State(软状态)和Eventually Consistent(最终一致性)三个短语的缩写。
其核心思想是:
既是无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
总体来说BASE理论面向的是大型高可用、可扩展的分布式系统。
与传统ACID特性相反,不同于ACID的强一致性模型,
BASE提出通过牺牲强一致性来获得可用性,并允许数据段时间内的不一致,但是最终达到一致状态。
同时,在实际分布式场景中,不同业务对数据的一致性要求不一样。因此在设计中,ACID和BASE理论往往又会结合使用。
什么是基本可用呢?假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言:
响应时间上的损失:正常情况下的搜索引擎0.5秒即返回给用户结果,而基本可用的搜索引擎可以在2秒作用返回结果。
功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单。但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
软状态
什么是软状态呢?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种“硬状态”。
软状态指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
最终一致性
上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性。这个时间期限取决于网络延时、系统负载、数据复制方案设计等等因素。
而在实际工程实践中,最终一致性分为5种:
因果一致性(Causal consistency)
读己之所写(Read your writes)
会话一致性(Session consistency)
单调读一致性(Monotonic read consistency)
单调写一致性(Monotonic write consistency)
在实际的实践中,这5种系统往往会结合使用,以构建一个具有最终一致性的分布式系统。
实际上,不只是分布式系统使用最终一致性,关系型数据库在某个功能上,也是使用最终一致性的。比如备份,数据库的复制过程是需要时间的,这个复制过程中,业务读取到的值就是旧的。当然,最终还是达成了数据一致性。这也算是一个最终一致性的经典案例。
====================================================
CAP原则
CAP的3选2伪命题
实际上,不是为了P(分区容错性),必须在C(一致性)和A(可用性)之间任选其一。
分区的情况很少出现,CAP在大多时间能够同时满足C和A。
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
CAP原则是NOSQL数据库的基石。
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP三个特性只能满足其中两个,那么取舍的策略就共有三种:
CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。传统的关系型数据库RDBMS:Oracle、MySQL就是CA。
CP without A:如果不要求A(可用),相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。
AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。
==传统的关系型数据库RDBMS:Oracle、MySQL、Eureka就是CA。
==设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase、ZK服务发现等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库
明显的区别可能就是Zookeeper为CP设计,而Eureka为AP设计
CAP理论提出就是针对分布式数据库环境的,所以,P这个属性是必须具备的。
P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,这时候就形成了P(partition),也就是由于网络问题,将系统的成员隔离成了2个区域,互相无法知道对方的状态,这在分布式环境下是非常常见的。
因为P是必须的,那么我们需要选择的就是A和C。
大家知道,在分布式环境下,为了保证系统可用性,通常都采取了复制的方式,避免一个节点损坏,导致系统不可用。那么就出现了每个节点上的数据出现了很多个副本的情况,而数据从一个节点复制到另外的节点时需要时间和要求网络畅通的,所以,当P发生时,也就是无法向某个节点复制数据时,这时候你有两个选择:
选择可用性 A(Availability),此时,那个失去联系的节点依然可以向系统提供服务,不过它的数据就不能保证是同步的了(失去了C属性)。
选择一致性C(Consistency),为了保证数据库的一致性,我们必须等待失去联系的节点恢复过来,在这个过程中,那个节点是不允许对外提供服务的,这时候系统处于不可用状态(失去了A属性)。
最常见的例子是读写分离,某个节点负责写入数据,然后将数据同步到其它节点,其它节点提供读取的服务,当两个节点出现通信问题时,你就面临着选择A(继续提供服务,但是数据不保证准确),C(用户处于等待状态,一直等到数据同步完成)。
Eureka服务治理机制与Dubbo服务治理机制的比较
Feature Eureka Zookeeper
服务健康检查 可配支持 (弱)长连接,keepalive
CAP AP CP
watch支持(客户端观察到服务提供者变化) 支持 long polling/大部分增量 支持
自我保护 支持 -
客户端缓存 支持 -
自身集群的监控 metrics -
Eureka支持健康检查,自我保护等
***Zookeeper为CP设计,Eureka为AP设计。
***作为服务发现产品,可用性优先级较高,一致性的特点并不重要,宁可返回错误的数据,也比不反回结果要好得多。
服务列表变更Zookeeper服务端会有通知,Eureka则通过长轮询来实现,Eureka未来会实现watch机制
=====================================
ACID
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,
所必须具备的四个特性:
原子性(atomicity,或称不可分割性)、一致性(consistency)、
隔离性(isolation,又称独立性)、持久性(durability)。
在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。
例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性。
ACID的概念在ISO/IEC 10026-1:1992文件的第四段内有所说明。
Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
相关推荐
OceanBase 支持分布式事务,使用 Paxos + 2PC 协议来确保事务的一致性和可靠性。该协议可以确保在分布式系统中,事务的提交和回滚能够正确执行。 CAP 理论: OceanBase 遵循 CAP 理论,即一致性、可用性和分区容忍...
OceanBase支持分布式事务,使用Paxos + 2PC协议来保证事务的一致性和可靠性。 Paxos协议 Paxos协议是一种分布式一致性协议,用于解决分布式系统中的数据一致性问题。它可以确保分布式系统中的数据是一致的,避免...
1.基础概念:了解事务的ACID、CAP理论、BASE理论,为分布式方案打基础 2.2PC/3PC:通过2PC演化各种方案:XA方案、JTA、LCN、Seata 3.TCC:TCC不依赖本地事务的解决方案 4.可靠消息最终一致性:唯有了解方案原理,方能...
本文将深入解析给定文件中的几个核心概念,包括CAP理论、BASE模型以及事务处理中的ACID与BASE原则,并对两阶段提交(2PC)协议进行详细探讨。 #### CAP理论 CAP理论是分布式系统设计中的一个重要理论,它指出任何...
传统的两阶段提交(2PC)协议在分布式环境中存在阻塞和单点故障的风险,因此,现代云时代的架构选择了Paxos协议和2PC的结合来实现更可靠的分布式事务。Paxos通过多数派共识机制保证高可用性,而CAP定理指出在分区...
- 柔性事务基于BASE理论,通常应用于分布式环境,包括两阶段提交(2PC)、TCC(Try-Confirm-Cancel)补偿型事务、基于消息的异步确保型事务和最大努力通知型事务。在分布式场景中,通常推荐使用柔性事务。 **最佳...
经过多年的发展,各数据库厂商提出了多种分布式事务解决方案,例如两阶段提交(2PC)/三阶段提交(3PC)、TCC方案、可靠消息最终一致性(本地消息表方案-eBay、RocketMQ 事务消息方案-阿里/Apache)、最大努力通知...
因此,为了解决2PC的不足,出现了其他替代方案,比如三阶段提交(3PC)、补偿事务(TCC,Try-Confirm-Cancel)、Saga事务等。这些方案在一定程度上缓解了2PC的可用性问题,通过更复杂的协调机制来确保事务的正确性和...
分布式计算的理论基础包括ACID原则、CAP理论、BASE理论、最终一致性以及一致性散列。ACID原则保证了数据库事务处理的四个关键特性:原子性、一致性、独立性和持久性。CAP理论则指出在分布式系统中,不能同时满足一致...
全书共 8 章,分为五部分:第一部分(第 1 章)主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了 ACID、CAP 和 BASE 等经典分布式理论;第二部分(第 2~4 章)介绍了 2PC、3PC 和 ...
2. BASE理论:基本可用、软状态、最终一致,适用于对强一致性的容忍度较高的系统。 3. TCC(Try-Confirm-Cancel):尝试执行、确认执行、取消执行,提供了一种补偿型事务模式。 4. Saga:长事务,通过一系列短事务...
在实践中,分布式事务的处理需要事务管理器来协调各个本地事务,确保要么全部成功要么全部回滚,这是通过两阶段提交(2PC)、三阶段提交(3PC)等协议实现的。除此之外,也有基于消息队列、补偿事务(TCC)等不同...
解决分布式事务的方法多样,如两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、 Saga模式、分布式事务协调器(如X/Open XA、Seata等)以及NoSQL数据库提供的特定事务模型。每种方案都有其优缺点,需根据...
4. BASE理论:基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency),是与ACID相对的一个理论,更适合大规模分布式系统。 开源工具: 在Java领域,JTA(Java Transaction ...
4. **两阶段提交(2PC)和三阶段提交(3PC)**:2PC在提交阶段存在超时问题,可能导致资源锁定,3PC通过增加预提交阶段来缓解这一问题,提高系统的容错性。 【CAP理论】指出,在分布式系统中,一致性(C)、可用性...
4. 分布式事务:ACID特性在分布式环境下的挑战,以及2PC、TCC、Saga等事务管理策略。 5. 数据一致性:如何保证分布式数据库的数据一致性,如MVCC、最终一致性和BASE原则。 6. 容错机制:如何设计系统以应对节点...
分布式事务解决方案实战1 ...总之,分布式事务是解决现代分布式系统中数据一致性问题的核心技术,其设计和实现涉及到对CAP定理、BASE理论的深刻理解和权衡。理解这些概念对于构建健壮、高可用的分布式系统至关重要。
7. **分布式事务的挑战**:例如,CAP理论、BASE理论、事务性能优化、故障恢复、幂等问题等,源码可能包含针对这些问题的解决方案。 通过分析和学习这些源码,读者可以更深入地理解分布式事务的各种策略和实现细节,...
它基于CAP和BASE理论,结合2PC、SAGA和TCC等分布式事务模型,为开发者提供了一种高效、可靠且低侵入的解决方案。这对于构建大规模分布式系统,尤其是那些对数据一致性要求较高的业务,具有重大的实践价值。
全书共8章,分为五部分:第一部分(第1章)主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论;第二部分(第2~4章)介绍了2PC、3PC和Paxos三种分布式...