0%

CAP定理与BASE理论

这里对分布式理论中的CAP定理与BASE理论进行介绍

abstract.jpg

CAP定理

基本原理

CAP定理(CAP Theorem),又被称作布鲁尔定理。其指出在一个分布式系统中,不可能同时满足以下三点要求

1. Consistency 一致性

在分布式系统中访问各节点副本时,数据是一致的。注意这里的一致性是强一致性

2. Availability 可用性

在分布式系统中访问各节点时均可以获得预期响应,即服务是可用的。但不保证返回的数据是最新的

3. Partition Tolerance 分区容错

在一个分布式系统中当出现网络异常或节点所在机器发生故障时,不可避免的会出现网络分区。比如A、B两个节点虽然各自都可以对外提供服务,但A、B之间的网络发生故障无法通信,即出现了分区。当发生网络分区后,整个分布式系统依然需要继续工作而不能就此停止,即所谓的分区容错

至此可以看出对于一个分布式系统而言,网络环境十分复杂,P是不可避免的、必须要保证的。那么当发生网络分区时,是满足Consistency一致性还是Availability可用性就成了一个问题

CP模型

当出现网络分区时,满足Consistency一致性。即CP模型,则系统会拒绝向其中写入数据。因为一旦写入,由于网络分区无法同步即会出现各节点数据不一致的情况。但从系统各节点读取数据时,不会出现不一致的情况。所以对于CP模型而言,其一致性是通过牺牲可用性来实现的。这里需要强调的是,在分布式系统中实现多节点的强一致性是非常困难、复杂的,典型的分布式强一致性算法有Raft、Paxos、ZAB等。CP模型常见的例子有Consul、Zookeeper

AP模型

当出现网络分区时,满足Availability可用性。即AP模型,则系统无论对于写数据还是读数据都会进行处理,以满足可用性。同理,由于网络分区无法进行数据同步,客户端从不同节点进行数据访问时,可能会出现结果不一致的情形。即可用性是通过牺牲一致性来实现的。AP模型典型的例子是Eureka

Note

值得一提的是,CAP定理不是指分布式系统在任何条件下都必须在可用性、一致性中进行二选一。在未发生网络分区的场景时,可用性和一致性是能够同时保证的。CAP定理阐述的是当发生网络分区时,即需要满足P时,我们需要在C、A之间做出抉择

BASE理论

Base理论是对CAP定理中AP模型的进一步发展,因为实际业务中很多分布式系统对于可用性的诉求相比较一致性会更高。故虽然不能保证CAP定理中的强一致性C,但分布式系统可以通过合适方式、手段来达到最终一致性

1. Basically Available 基本可用

当分布式系统发生不可预知的故障时,允许损失部分功能的可用性,保障核心功能的可用性,从而实现基本可用的目标。具体实现方式包括流量削峰、请求排队、服务降级、服务熔断等

2. Soft State 软状态

其指的是在保障基本可用性与最终一致性的要求下,系统中各节点的数据允许存在短暂的不一致。即所谓的中间过渡状态。而这种短暂的不一致不会影响到服务的可用性

3. Eventually Consistent 最终一致性

不要求分布式系统的强一致性,即无法实时保证系统中各节点数据都是一致的。其允许在时间上存在有一定的延迟,以实现系统中各节点数据最终达到一致的状态。当然具体地延迟时限取决于网络延时、系统负载、数据同步方案等诸多因素

参考文献

  1. 数据密集型应用系统设计(DDIA) Martin Kleppmann著
  2. 微服务设计 Sam Newman著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝