CAP理论是一个经典的分布式系统理论。CAP理论告诉咱们:一个分布式系统不可能同时知足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时知足其中两项。数据库
一、一致性网络
在分布式环境下,一致性是指数据在多个副本之间可否保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操做后,应该保证系统的数据仍然处于一直的状态。架构
对于一个将数据副本分布在不一样分布式节点上的系统来讲,若是对第一个节点的数据进 行了更新操做而且更新成功后,却没有使得第二个节点上的数据获得相应的更新,因而在对第二个节点的数据进行读取操做时,获取的依然是老数据(或称为脏数 据),这就是典型的分布式数据不一致的状况。在分布式系统中,若是可以作到针对一个数据项的更新操做执行成功后,全部的用户均可以读取到其最新的值,那么 这样的系统就被认为具备强一致性。分布式
二、可用性spa
可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每个操做请求老是可以在有限的时间内返回结果。这里的重点是"有限时间内"和"返回结果"。设计
"有限时间内"是指,对于用户的一个操做请求,系统必须可以在指定的时间内返回对 应的处理结果,若是超过了这个时间范围,那么系统就被认为是不可用的。另外,"有限的时间内"是指系统设计之初就设计好的运行指标,一般不一样系统之间有很 大的不一样,不管如何,对于用户请求,系统必须存在一个合理的响应时间,不然用户便会对系统感到失望。blog
"返回结果"是可用性的另外一个很是重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果一般可以明确地反映出队请求的处理结果,即成功或失败,而不是一个让用户感到困惑的返回结果。部署
三、分区容错性it
分区容错性约束了一个分布式系统具备以下特性:分布式系统在遇到任何网络分区故障的时候,仍然须要可以保证对外提供知足一致性和可用性的服务,除非是整个网络环境都发生了故障。io
网络分区是指在分布式系统中,不一样的节点分布在不一样的子网络(机房或异地网络) 中,因为一些特殊的缘由致使这些子网络出现网络不连通的情况,但各个子网络的内部网络是正常的,从而致使整个系统的网络环境被切分红了若干个孤立的区域。 须要注意的是,组成一个分布式系统的每一个节点的加入与退出均可以看做是一个特殊的网络分区。
既然一个分布式系统没法同时知足一致性、可用性、分区容错性三个特色,因此咱们就须要抛弃同样:
CA:放弃分区容错性,增强一致性和可用性,其实就是传统的单机数据库的选择
AP:放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是不少分布式系统设计时的选择,例如不少NoSQL系统就是如此
CP:放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用
须要明确的一点是,对于一个分布式系统而言,分区容错性是一个最基本的要求。由于 既然是一个分布式系统,那么分布式系统中的组件必然须要被部署到不一样的节点,不然也就无所谓分布式系统了,所以必然出现子网络。而对于分布式系统而言,网 络问题又是一个一定会出现的异常状况,所以分区容错性也就成为了一个分布式系统必然须要面对和解决的问题。所以系统架构师每每须要把精力花在如何根据业务 特色在C(一致性)和A(可用性)之间寻求平衡。