C:一致性:不同节点之间的数据保持一致,数据相同。客户端访问任何一个节点得到的数据都是一致的。
    A:可用性:只要服务没有全挂掉,每个请求都必须得到一个响应。
    P:分区容错性:当节点之间的连接中断或者高延迟导致通信受阻时,系统仍然是可用的,可以正常提供服务。

    CAP的选择只能选择其二,无法兼顾其三。证明如下:

    对于非分布式系统,可以满足AC的需求,比如事务的ACID中的AC。
    对于分布式系统,必须拥有分区一致性P。
    在满足P的情况下,我们假定有节点A和B,且A与B之间的通信被断开,由于满足P,因此A和B仍可对外提供服务。
    此时我们有客户端,发送请求将值V设置成1,该请求被路由到了A,A执行成功;客户端又发送请求将值V设置成2,该请求被路由到了结点B,B执行成功。
    若要满足高可用:此时节点A和B均可提供服务,则客户端从A和B请求V值分别为1和2,数据不一致。
    若要满足一致性:此时节点A和B的V值不同,因此A和B不能提供一致的数据,不能提供服务,无法满足高可用。

    对于分布式系统,分区容错性是必须的,因此剩下的选择只有一致性或可用性。
    对于数据不一致会产生影响的,采用CP架构,否则建议使用AP架构。