CAP

分布式系统不可能同时满足一致性(C:Consistency), 可用性(A:Availability), 分区容忍性(Partion Tolerance), 最多只能同时满足其中两项.

一致性

一致性是指多个数据副本是否能保持一致的特性.

在一致性的条件下, 系统在执行数据更新操作之后能从一致性状态转移到另一个一致性状态.

对系统的一个数据更新成功之后, 如果所有用户都能够读取到最新的值, 该系统就被认为具有强一致性.

可用性

可用性指分布式系统在面对各种异常时可以提供正常服务的能力, 可以用系统可用时间占总时间的比值来衡量, 4个9的可用性表示系统99.99%的时间是可用的.

在可用性条件下, 要求系统提供的服务一直处于可用状态, 对于用户的每一个操作请求总是能够在有限时间内返回结果.

分区容忍性

网络分区指分布式系统中的节点被划分为多个区域, 每个区域内部可以通信, 但是区域之间无法通信.

在分区容忍性条件下, 分布式系统在遇到任何网络分区故障的时候, 仍然需要能够对外提供一致性和可用性的服务, 除非是整个网络环境都发生故障.

权衡

在分布式系统中, 分区容忍性必不可少, 因为需要总是假设网络是不可靠的. 因此CAP理论实际上是对可用性和一致性之间进行权衡.

可用性和一致性往往是冲突都, 很难使他们同时被满足. 在多个节点之间进行数据同步时:

  1. 为了保证一致性(CP), 需要让所有节点下线成为不可用的状态, 等待同步完成.

  2. 为了保证可用性(AP), 在同步过程中允许读取所有节点的数据, 但是数据可能不一致.