CAP定理指出,分布式软件系统不可能同时提供以下三种保证(CAP)中的两种以上:一致性,可用性和分区容错性。当我们设计一个分布式系统时,在CAP之间进行权衡几乎是我们想要考虑的第一件事。 CAP定理说,在设计分布式系统时,我们只能选择以下两个:
一致性:所有节点同时看到相同的数据。通过在允许进一步读取之前更新多个节点来实现一致性。
可用性:每个请求都会获得成功/失败的响应。通过跨不同服务器复制数据来实现可用性。
分区容差:尽管消息丢失或部分故障,系统仍可继续工作。数据在节点和网络的组合中得到充分复制,以通过间歇性中断使系统保持正常运行。
我们无法构建一个持续可用,顺序一致且容忍任何分区故障的通用数据存储。 我们只能构建一个具有这三个属性中任意两个的系统。
因为,为了保持一致,所有节点都应以相同的顺序看到同一组更新。 但是,比如A服务器更新了,此时B服务器还未更新。这个时候客户端向B服务器请求这个数据(根据P,所以向任何一个服务器请求都是OK的) 为应对这种可能性,唯一可以做的就是停止提供来自过时的数据源B的请求,直到B也更新完成,这样就不满A,服务不再100%可用。