C 数据一致性
弱一致性(不保证总能得到最新的值)
最终一致性( 放宽对时间的要求,在被调完成操作响应后的某个时间点,被调多个节点的数据最终达成一致 )
强一致性(每个节点的数据都是最新版本)
A 可用性 数据具备高可用性
P 分区容错性 容忍网络出现分区 分区之间网络不可达
C和A都很容易 P到底是什么意思呢?
分布式的系统,节点之间的通信是通过网络来进行的。如果出现了一些故障,节点之间不连通了,整个网络就被划分成了几块区域。
这样数据就被分成了几块不连通的区域。这就叫做分区。
例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9QNL8yT-1602071097600)(C:\Users\yan\AppData\Roaming\Typora\typora-user-images\1601988770796.png)]
此时我们节点一和节点三是不可通信的,这就有了抉择:
如果允许当前用户注册一个账户,此时注册的记录数据只会在节点一和节点二或者节点二和节点三同步,因为节点一和节点三的记录不能同步的。
这种情况其实就是选择了可用性(availability),抛弃了数据一致性(consistency)如果不允许当前用户注册一个账户(就是要等到节点一和节点三恢复通信)。节点一和节点三一旦恢复通信,我们就可以保证节点拥有的数据是最新版本。
这种情况其实就是抛弃了可用性(availability),选择了数据一致性(consistency)CAP理论定义的其实是在容忍网络分区的条件下,“强一致性”和“极致可用性”无法同时达到。