Zookeeper系列(2)--2PC、3PC及其应用

  在上一篇中,我们介绍了为什么使用分布式,为什么会出现分布式数据一致性问题,以及相关分布式理论:CAP/BASE理论,这些是我们进行后边介绍的分布式一致性算法的基础,正是由于在系统的可用性和数据一致性之间反复的权衡,于是出现了一系列的一致性协议,如2PC,3PC,paxos算法等。本篇就介绍两个最常见的分布式一致性算法:两阶段提交(2PC),三阶段提交(3PC)以及它们的相关应用。

其实我觉得这些分布式一致性算法其实应该叫分布式共识(distributed consensus)算法,不同的一致性上下文含义不同。共识系统则很清晰, 就是多个参与者针对某一个议题达成一致意见,如经典的具有高度容错的基于消息传递的paxos算法,而2pc,3pc无法容错,太过保守。而不是针对使副本数据都一致。这是我的一点看法,其实我看这个的概念的时候也很迷糊,到现在还是在头脑中争议很大,但我觉得,对于这些概念的理解应该放在固定的业务场景中,看在业务中解决了什么问题,而不是转牛角尖非要把这些算法分门别类。

另外,我自己的理解,这些分布式一致性算法的目的并不是达到了副本数据的强一致性,因为CAP理论告诉我们,这是不可能的,而是在可用性和一致性的均衡处理上,用这些算法可以达到BASE状态,确保我们的分布式系统正确运行,那些数据副本的同步问题并不是一致性算法所要解决的,因为副本的同步不管是Mysql主从同步,还是其他master-slave集群的同步都是异步的,所以不可能达到强一致性,所以这些一致性算法是用来保证分布式系统的可用--一致的算法。例如,我们可以将paxos算法看做是分布式共识算法,它的目的就是怎么样对某个值(决议)在集群中达成一致,所以这可以用于集群中的leader选举,写数据过程。而2pc,3pc就是解决分布式事务(参与事务的事务管理器,参与者位于不同的节点)的原子性,一致性问题,而且这些算法并不是只能单一的应用于某个问题上,有很多问题都可以转化为用这些算法解决。

2PC、3PC的基本概念

2PC,3PC主要是基于分布式事务的分布式一致性算法(因为分布式事务也可能会导致数据的不一致问题,这跟副本的不一致性从大类上看是都归于数据的不一致)。
在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。由于存在事务机制,可以保证每个独立节点上的数据操作可以满足ACID。但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况。所以从理论上讲,两台机器理论上无法达到一致的状态。如果想让分布式部署的多台机器中的数据保持一致性,那么就要保证在所有节点的数据写操作,要不全部都执行,要么全部的都不执行。但是,一台机器在执行本地事务的时候无法知道其他机器中的本地事务的执行结果。所以他也就不知道本次事务到底应该commit还是 roolback。所以,常规的解决办法就是引入一个“协调者”的组件来统一调度所有分布式节点的执行。使用2PC,3PC可以实现分布式的强一致性和分布式事务(广义-狭义??)。
分布式事务的概念:
通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。 所谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成一个工作,这个工作即是一个全局事务,例如,一个事务中可能更新几个不同的数据库(可以是不同的应用对应的数据库,也可以是副本??)。对数据库的操作发生在系统的各处但必须全部被提交或回滚。此时一个数据库对自己内部所做操作的提交不仅依赖本身操作是否成功,还要依赖与全局事务相关的其它数据库的操作是否成功,如果任一数据库的任一操作失败,则参与此事务的所有数据库所做的所有操作都必须回滚。 一般情况下,某一数据库无法知道其它数据库在做什么。因此,在一个 DTP 环境中,交易中间件是必需的,由它通知和协调相关数据库的提交或回滚。而一个数据库只将其自己所做的操作(可恢复)影射到全局事务中。
二阶提交协议三阶提交协议就是根据这一思想衍生出来的。可以说二阶段提交其实就是实现XA分布式事务的关键(确切地说:两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做)

我的理解:其实我们也可以将2PC,3PC算法看做是和paxos一样的用来对某个决议达成共识的算法,这里的决议就是是否要提交这个事务从而更新数据。但是2PC,3PC存在很多问题,比如太过保守、单点问题,所以才会产生具有高度容错性的paxos算法。

2PC

二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。2PC就是用来解决分布式事务的原子性问题。所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。其过程为:

第一阶段:准备阶段
  • 12
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值