CAP

来自智得网
跳转至: 导航、​ 搜索

简介

CAP理论

CAP理论是2000年由Eric Brewer教授提出的。即一个分布式系统不可能同时满足一致性,可用性,分区容忍性这三个需求,而最多只能同时满足2个。2002年MIT的Seth Gilbert和Nancy lynch证明了CAP的正确性。

CAP中的C是consistency(一致性)的缩写,首先解释一下一致性,一致性概念在计算机领域至少有下列含义:

  • 数据库事务(ACID)的一致性是指数据变更的过程中需要满足正确的状态约束,这些约束分是数据库层面的约束,比如外键关系,但有一部分约束是指业务层实现的约束,例如转账的过程中用户的账户金额不能小于0。
不同于AID是数据库层面需要提供的能力,C需要用户自己实现。
  • CAP中的一致性,指的是一个读操作从能读取到之前写操作的结果,在分布式场景下更多的指数据副本之间的一致性。这里的一致性从事件约束可以分为强一致性和最终一致性,强一致性是指用户每次都可以读取到最新的数据,最终一致性是指可以在确定的时间内查询到最新的数据。从实现的方式上可以分为顺序一致性和线性一致性。

可用性是指系统的可用性,每一次请求都能在一定的时间内响应。

分区容忍性主要解决的是脑裂问题,即网络出现分区的情况下的状态。

因为分布式理论天然需要支持分区容忍性,所以CAP的概念真正的本质是在网络分区的情况下,只能在一致性和可用性中选择一个特性。

原理

分区容忍性

分布式环境下的集群节点必然是有不同区域的物理分布的,分布可能是大的城域网分区,也可能是不同机房的分区,甚至小到机房的不同机架。

分区即集群的节点因为联通问题分成了两部分,此时面临的问题是两个分区同时提供服务,即脑裂问题,脑裂问题会导致后续的数据无法合并,因此分区容忍性就是解决脑裂问题。

对于存在leader节点的集群,脑裂风险来源于两个方面,一个是分区之后选出两个Leader节点,解决方案是有奇数个节点,而且要求必须要大于1半节点才可以选主。

第二个风险是新旧Leader。

无Leader的集群,对服务器个数也有要求。

Availability

可用性的解决方案就是冗余。

网络接入链路冗余

集群冗余

存储多备份冗余

Consistency

  • 两阶段提交(2PC)

2PC经常用于分布式事务的场景,但是其思想也可以用于多副本数据的一致性保证。两阶段提交引入了协调者统一管理所有的节点(参与者)的操作,来确保多节点之间的操作同时成功或者失败。

Paxos

raft

应用

zookeeper

euraka