英文定义:In a distributed system (a collection of interconnected nodes that share data.), you can only have two out of the following three guarantees across a write/read pair: Consistency, Availability, and Partition Tolerance - one of them must be sacrificed.node
关键点解释:网络
一、互联和共享数据的情形并发
二、cap关注的是对数据的读写操做,而不是分布式系统的全部功能分布式
一、一致性 Consistency高并发
A read is guaranteed to return the most recent write for a given client.对某个指定的客户端来讲,读操做保证可以返回最新的写操做结果spa
二、可用性 Availabilityscala
A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).设计
非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)blog
三、分区容错性 partition tolerancethree
The system will continue to function when network partitions occur.
当出现网络分区后,系统可以继续履行职责
一、cap的适用场景是副本性的数据,订单数据和库存数据状态不一致不属于cap讨论的范畴
二、P要求分布式和数据同步,C要求数据彻底一致,A要求返回及时
三、cap中的一致性是线性一致性,指分布式节点中的数据读写一致性,
四、base理论是对CAP中AP方案的一个补充
五、cp系统发生分区时不是彻底的不可用,是主分区仍然可用
一、cap关注的粒度是数据,而不是整个系统
用户帐号数据选择cp,而用户信息数据选择ap
二、cap是忽略网络延迟的
单个用户的余额、单个商品的库存,理论上要求选择 CP 而实际上 CP 都作不到,只能选择 CA。也就是说,只能单点写入,其余节点作备份,没法作到分布式状况下多点写入。
三、正常运行状况下,不存在cp和ap的选择,能够同时知足ca
四、放弃并不等于什么都不作,须要为分区恢复后作准备
cp分区恢复后把数据同步到故障节点,达到同时知足CA状态
ap分区恢复后进行数据合并,达到同时知足CA状态
设计分布式系统的两大初衷:横向扩展(scalability)和高可用性(availability)。“横向扩展”是为了解决单点瓶颈问题,进而保证高并发量下的「可用性」;“高可用性”是为了解决单点故障(SPOF)问题,进而保证部分节点故障时的「可用性」。由此能够看出,分布式系统的核心诉求就是「可用性」。这个「可用性」正是 CAP 中的 A:用户访问系统时,能够在合理的时间内获得合理的响应。
为了保证「可用性」,一个分布式系统一般由多个节点组成。这些节点各自维护一份数据,可是无论用户访问到哪一个节点,原则上都应该读取到相同的数据。为了达到这个效果,一个节点收到写入请求更新本身的数据后,必须将数据同步到其余节点,以保证各个节点的数据「一致性」。这个「一致性」正是 CAP 中的 C:用户访问系统时,能够读取到最近写入的数据。
须要注意的是:CAP 并无考虑数据同步的耗时,因此现实中的分布式系统,理论上没法保证任什么时候刻的绝对「一致性」;不一样业务系统对上述耗时的敏感度不一样。
分布式系统中,节点之间的数据同步是基于网络的。因为网络自己固有的不可靠属性,极端状况下会出现网络不可用的状况,进而将网络两端的节点孤立开来,这就是所谓的“网络分区”现象。“网络分区”理论上是没法避免的,虽然实际发生的几率较低、时长较短。没有发生“网络分区”时,系统能够作到同时保证「一致性」和「可用性」。
发生“网络分区”时,系统中多个节点的数据必定是不一致的,可是能够选择对用户表现出「一致性」,代价是牺牲「可用性」:将未能同步获得新数据的部分节点置为“不可用状态”,访问到这些节点的用户显然感知到系统是不可用的。发生“网络分区”时,系统也能够选择「可用性」,此时系统中各个节点都是可用的,只是返回给用户的数据是不一致的。这里的选择,就是 CAP 中的 P。
分布式系统理论上必定会存在 P,因此理论上只能作到 CP 或 AP。若是套用 CAP 中离散的 C/A/P 的概念,理论上没有 P 的只多是单点(子)系统,因此理论上能够作到 CA。可是单点(子)系统并非分布式系统,因此其实并不在 CAP 理论的描述范围内。