若想设计一个分布式架构的系统,掌握这项定理不可或缺。网络
**C是Consistency,也就是一致性,在CAP中的是强一致性。A是Availability ,可用性。P是Partition tolerance,分区容错性。在分布式系统中三者不可兼得,只能选两个。这就是CAP定理。**例如你保证了一致性和分区容错性就没法保证可用性。 架构
这里的一致性是强一致性,强一致性的意思就是例如节点A更新了数据,节点B能同时更新,这样客户端在每次读取得到数据都是最近更新的。可是在定理中是忽略掉咱们平日里的网络延迟的。现实状况网络延迟在如今仍是没法避免的,因此咱们只能实现最终一致性,可是目标仍是贴近强一致性,也就是尽力下降延时的时间。分布式
可用性指的是非故障的节点须要在合理的时间返回合理的响应。合理的响应的意思也就是不能搞个报错,不能是超时失败。举个例子好比说节点A更新了数据,同时要发布到节点B上,可是中间传输的电缆被挖掘机挖断了,此时用户去访问节点B,此时节点B应该返回老的数据,而不该该报错。这就是可用性。让用户感受系统仍是能用的。设计
分区容错性,指的是当网络分区了,系统还能正常的运行和响应。好比节点A和节点B没法通讯,你要考虑这个时候系统如何应该。虽然网络分区的几率低并且时间短可是这种状况是会发生的。因此理论上是牺牲C或者A,P是必定要达到的。cdn
举个例子,把P扔了。因此此时系统须要保证CA,而后此时发生了网络分区,节点A和B没法通讯了,此时客户端想要往节点A写入数据,可是由于此时没法同步数据至节点B。因此只有保证A不写入所以才能保证一致性。那你不让客户端往A写数据,你就只能报个错返回给客户端,说此时不能写,那是否是违反了可用性了?blog
因此在分布式系统中P是必定要保证的。因此在分布式系统中是CP,AP这样搭配的。同步
那CA呢?请注意,CAP所说的CAP三者只能存在二者,因此CA是能够能搭配的。就是在系统没有P的时候,CA搭配。也就是说当系统不存在分区状况的时候要知足C和A,当系统出现分区状况的以后视状况抛弃C或者A。it
CAP理论不是系统级别的,是数据级别的。啥意思呢?io
也就是说当出现网络分区的状况,你能够一部分数据遵照CP,一部分数据遵照AP。例如用户注册场景能够上CP,保证用户注册以后登陆的成功。而用户更换头像这种就上AP,毕竟用旧的数据影响也不会很大。class
所以咱们要根据不一样的业务场景来选择不一样的应对方案。CAP是能够灵活搭配的
若有错误欢迎指正! 我的公众号:yes的练级攻略