带你厘清事务一致性(下篇)
在上篇和中篇中,无论是单机事务的一致性,还是分布式事务的一致性,可以发现都是针对数据库的事务而言的,说到了分布式、一致性话题,我们再继续讨论一个概念--分布式系统的一致性。分布式系统的一致性是一个更加多元和复杂的场景,单纯的 2PC 或者 3PC 协议无法满足分布式系统中的其他一致性需求。
1. CAP 理论
CAP 理论是分布式系统、特别是分布式存储领域中被讨论的最多的理论。其中 C 代表一致性 (Consistency),A 代表可用性 (Availability),P 代表分区容错性 (Partition tolerance)。CAP 理论告诉我们 C、A、P 三者不能同时满足,最多只能满足其中两个。
在 CAP 理论中,P 是一定要满足的,那么也就意味着只有两种组合方案(AP 和 CP)进行选择,但是在实际中,面对鱼和熊掌不可兼得的情况下,我们还是想想方设法兼得的,也就是 C 和 A 各退一步,我们来保证系统的基本可用和最终一致性。
2.一致性
讨论分布式系统的一致性涉及到更多的一个概念可能是共识。举个最简单的例子就是在一个或多个进程提议了一个值后,通过某种协议让所有进程对这个值达成共识(一致),为了就某个值达成共识,各个进程需要提出自己的提议,最终通过分布式一致性算法,使得所有正确运行的进程学习到相同的值。
分布式一致性算法我们应该已经听过很多了,例如 Paxos、Raft 以及 Zab 协议等。Paxos 算法是布式系统中通用的一致性方案中的一种,它能达到某种最终一致性的状态。Raft,不同于 Paxos 直接从分布式一致性问题出发推导出来,Raft 则是从多副本状态机的角度提出,使用更强的假设来减少需要考虑的状态,使之变的易于理解和实现。Zab 协议 的全称是 Zookeeper Atomic Broadcast(Zookeeper 原子广播)。Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性。
3.总结
讲了这么多,我们再来回顾一下。本系列三篇文章从单机数据库的事务着手,明白了事务是数据库操作执行的单位,它包含 ACID 四个特性,D(持久性)是由日志来保证的;原子性和隔离性是通过并发控制管理器或调度器来保障的,其中隔离性又涉及到了四种不同的隔离级别(读未提交、读已提交、可重复读和可串行化);一致性其实是一个比较复杂的概念,它与其他的三个特性都有关系。但总体来讲,单机数据库事务还是比较简单的,各个特性都比较容易保障。到了分布式数据库中,情况就要复杂一点了,一个全局事务由多个节点的单机事务组成,如何去管理分布式事务的提交或者中止,如何进行故障故障恢复,要解决这些问题,就需要重新构建一个事务处理模型。解决分布式事务处理的一个基本思想就是 2PC,第一阶段进行提交请求阶段,第二阶段是提交执行阶段。以 2PC 为基础,又衍生出了 3PC、TCC 等协议。如果说在数据库中,一致性更多强调的是事务的一致性特性,在分布式系统中,一致性的概念重点在于共识。所谓的共识就是多个不同的节点进程之间就某个值达成一致。我们常听到的分布式一致性算法(Paxos、Raft)就是为了促进各个节点达成一致而生的。所以,现在你应该大致了解了这些概念了~
版权声明: 本文为 InfoQ 作者【小舰】的原创文章。
原文链接:【http://xie.infoq.cn/article/5c8d7e81e42e39a7a58f953fb】。文章转载请联系作者。
评论