CAP理论

CAP分布式理论

2002年CAP理论正式成为分布式计算领域的公认定理

CAP指一致性(Consisitency),可用性(Avaliability),分区容忍性(Partition tolerance)下图可以清晰的阐述三者之江的关系,一个分布式系统最多能同时满足其中的两项。

CAP理论_第1张图片

  1. 传统关系数据库的ACID模型具有高一致性+可用性,很难满足分区容忍性

    • 原子性 一个事务要么成功,要么失败,不存在中间不确定的状态
    • 一致性 事务的起始和完成,数据库的状态应该保持一致
    • 隔离性 事务假设只有自己在数据库中进行操作,彼此不知晓
    • Durability 一旦完成,不能反悔
  2. BASE模型具有可用性+分区容忍性,牺牲了高一致性

    • Basiclly avaliable 基本可用,支持分区失败
    • Soft 软状态 状态可以在一段时间能不一致
    • Eventually consistent 最终一致就可以,不需要时刻保持一致

CAP定义

1. 一致性是指更新操作完成并返回客户端完成后,所有节点在同一只时间的数据完全一致

一致性是指在一个时间窗口内,让用户尽量感受不到这个窗口的存在,通常时间取决于服务端是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性。

对于一致性,应该从客户端和服务端去考虑。从客户端来看,一致性是指在并发访问时,如何保证读取到的数据是最新的。从服务端来看,怎样可以快速复制更新的数据到整个系统,也就是尽量使时间窗口尽可能的短。

从服务端来看,如何尽快将更新后的值分发到整个系统,降低达到最终一致性的时间窗口,是提高系统可用性和用户体验的根本,分布式系统需要注意以下几点:

- N-复本数
- W-更新数据时需要完成的节点数
- R-读取数据时需要读取的节点数

如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。

如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。

最终一致性保证在一段时候后获取的值时更新后的值

2. 可用性是指服务一致可用,而且是正常响应时间

对于一个可用性分布式系统,非故障节点必须对每一个请求作出响应,也就是说系统必须最终终止,当这是一个分区容忍系统时,即使发生严重的网络故障,也必须响应请求。当出现用户操作失败时,可用性很差。

3. 分区容忍性是指分布式系统某些节点或网络故障时,系统仍然可以对外提供服务

总结

对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流程的严重程度。对于涉及到钱财这样不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务,这是保证CA,舍弃P。

你可能感兴趣的:(CAP理论)