Bootstrap

CAP到底讲什么?

这篇博文主要是对《CAP理论十二年回顾:”规则”变了
的个人解读。

CAP到底讲什么,为什么不能同时满足?

首先明确一点,CAP是一个分布式系统的特性,如果你没有多个服务节点,就不可能发生分区。先解释下概念:
- C —— 执行的结果能同时反映到所有节点上。等同于所有节点访问同一份最新的数据副本。也许这里需要很多的具体不变性约束,比如主键不能重复。
- A —— 这个是指访问的节点是正常的,那么就能正常执行请求(所以和P的一个冲突点就是当系统部分失效,这个系统到底是判定为失效还是正常?)
- P —— 这个特性是说当系统的节点之间通信出现了问题,导致之间不能同步,然后还能继续提供服务。
其实我第一次读这个概念,就是不明白为啥这三个方面不能全部同时获得。然后看了个这个例子:

理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。一般来说跨区域的系统,设计师无法舍弃P性质,那么就只能在数据一致性和可用性上做一个艰难选择。不确切地说,NoSQL运动的主题其实是创造各种可用性优先、数据一致性其次的方案;而传统数据库坚守ACID特性(原子性、一致性、隔离性、持久性)&#

;