CAP定理分析

1.什么是CAP定理

   一个分布式系统不可能同时满足一致性可用性分区容错性这三个基本需求,最多只能同时满足其中的2个。
   一致性(C:Consistency) 指数据在多个副本之间能够保持一致的特性。
   可用性(A: Availability) 指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。
   分区容错性(P:Partition tolerance) 分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。

2.为什么不能同时满足CAP?

假设有如下一个系统:


一个简单的分布式系统

   整个系统由两个节点配合组成,之间通过网络通信,当节点 A 进行更新数据库操作的时候,需要同时更新节点 B 的数据库(这是一个原子的操作)。

   上面这个系统怎么满足 CAP 呢?C:当节点A更新的时候,节点B也要更新,A:必须保证两个节点都是可用的,P:当节点 A,B 出现了网络分区,必须保证对外可用。

   可见,根本完成不了,只要出现了网络分区,A 就无法满足,因为节点 A 根本连接不上节点 B。如果强行满足 C 原子性,就必须停止服务运行,从而放弃可用性 C。

组合 分析结果
CA   满足原子和可用,放弃分区容错。说白了,就是一个整体的应用。
CP   满足原子和分区容错,也就是说,要放弃可用。当系统被分区,为了保证原子性,必须放弃可用性,让服务停用。
AP   满足可用性和分区容错,当出现分区,同时为了保证可用性,必须让节点继续对外服务,这样必然导致失去原子性。

3.能不能同时满足CAP?

   比如 C 使用弱一致性,可以先将数据存起来,稍后再更新,实现 “最终一致性”。

你可能感兴趣的:(CAP定理分析)