分布式领域CAP理论,
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
更具体一点说:
1、一致性:读操作总能读取到之前完成的写操作,满足这个条件的系统称为强一致系统,这里的“之前”一般对同一个客户端而言。
2、可用性:读写操作在单台机器发生故障的时候仍然能够进行,不需要等待发生故障的机器重启或者其上面的服务迁移到其他的机器,在分布式领域来说一般是用多副本来保证
3、分区可容忍性:机器故障、网络故障、机器停电等异常情况下仍然能够满足一致性和可用性。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择,所谓的分区就是逻辑上的二部分的数据都不完备,都需要对方的数据进行补充才能达到一致。
举例: A和B二个副本,A和B之间通过复制协议进行同步,同时,客户端C1在A上进行了a1数据的更新,客户端C2在B上进行了b1数据的更新,进行复制的时候,网络发生了终端,那么A和B各自形成了一个分区,每个分区的数据都不完整。分区期间,独立且能自我保证一致性的节点子集合可以继续执行操作,只是无法保证全局范围的不变性约束不受破坏。
知乎上比较好的答复:https://www.zhihu.com/question/54105974?from=profile_question_card
关于P
满足P代表对失败的容忍,满足 A,C,而不满足 P 意味着当网络分区没有发生时,系统既能满足 A,也能满足C,而当存在网络分区时,将不再保证 A,C。实际上我们说一个分布式系统满足可用性,通常也附带了满足一定程度的P,因为失败一定存在,而不存在失败满足可用性又是如此容易;一致性也如此。
因为P引入A和C的变化
1,P是分布式系统的起点,全称:network partition,常指拔网线和宕机,因为这两种现象,同伴是无法区分的,所以归为一类。分布式系统下,P是大概率事件,假设服务器开一年必宕机一次,则365台的集群必然天天宕机。数据分存这365台之上,则数据必然天天不完整。你设计的分布式系统能容忍吗?绝大多数是不能,不能则
2,复制,是解决这一问题的标准做法
3,复制,引发了C
4,C引发了A
分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。这就从延迟的角度抓住了设计的核心问题:分区两侧是否在无通信的情况下继续其操作?
从这个实用的观察角度出发可以导出若干重要的推论。第一,分区并不是全体节点的一致见解,因为有些节点检测到了分区,有些可能没有。第二,检测到分区的节点即进入分区模式——这是优化C和A的核心环节。
出现分区的情况下,各分区如何继续服务(包括服务期间的限制条件),如何通过分区恢复达到一致状态是分布式中的一个重要的问题
infoq上有一篇很好的文章
http://www.infoq.com/cn/articles/cap-twelve-years-later-how-the-rules-have-changed
维基百科地址:
https://zh.wikipedia.org/wiki/CAP%E5%AE%9A%E7%90%86