CAP理论
分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。
- 一致性(Consistency):客户端的每一次的每次读操作,不管访问哪个节点,要么读到的是同一份最新写入的数据,要不然读取失败。(强调数据正确)
- 可用性(Availablity):任何来自客户端的请求,不管访问哪个非故障节点,都能得到相应数据,但不保证是同一份最新数据。(强调服务可用)
- 分区容忍性(Partition):当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然可以继续工作。(强调集群对分区故障的容错能力)-这无法避免,所以是分布式系统中必须要考虑的。
实际上,在分布式系统设计中,P是前提,如果没有P本质上就退化到了 - 单机版mysql。
所以,在发生网络分区情况下/分布式系统设计中,我们需要在A和C之间进行抉择,选择保证数据一致还是服务可用。而集群正常运行时,A和C是都可以保证的。
- CP架构在当发生网络分区时,为了保证返回给客户端数据准确性,为了不破坏一致性,可能会因为无法响应最新数据,而拒绝响应。在网络分区恢复后,完成数据同步,才可处理客户端请求。(基于raft的etcd等,redis,mongodb)
- AP架构在发生网络分区时,发生分区的节点不需要等待数据完成同步,便可处理客户端请求,将尽可能的给用户返回相对新的数据。在网络分区恢复后,完成数据同步。(couchdb)