C
: (consistency
) 数据一致性- 所有 节点拥有数据的最新版本
A
: (availability
) 可用性P
: (partition-tolerance
) 分区容错性 : 容忍网络出现分区,分区之间网络不可达
集群
同一个业务,部署在多个服务器上 (不同的服务器运行同样的代码,干同一件事)
- 通过多台计算机完成同一个工作,达到更高的效率。
- 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。
分布式
分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。 组件之间彼此进行交互以实现一个共同的目标。
参考资料:
一般我们说的分布式系统,P:分区容错性 (partition-tolerance
) 这个是必需的,这是客观存在的。
CAP是无法完全兼顾的,我们可以 倾向于AP,或者倾向于CP。
举个例子,在一个集群中, 有三台机器,他们之间均可以互相通信。如果发生了某些故障导致其中的某两台机器之间无法继续通信,就会导致集群中出现了 分区
出现分区后的集群,在 Node 1 & Node 2
之间无法保证数据一致性,如果这时仍然处理请求,则意味着舍弃了数据一致性来确保可用性。
在CAP理论中,C 所表示的一致性是强一致性(每个节点的数据都是最新版本),其实一致性还有其他级别的:
- 弱一致性:弱一致性是相对于强一致性而言,它不保证总能得到最新的值;
- 最终一致性 (
eventual consistency
):放宽对时间的要求,在被调完成操作响应后的某个时间点,被调多个节点的数据最终达成一致
在实际生产中,通常会针对数据一致性和可用性做一些取舍。(多数情况下要至少保证最终一致性)
可用性 | 可用水平(%) | 年可容忍停机时间 |
---|---|---|
容错可用性 | 99.9999 | < 1 min |
极高可用性 | 99.999 | < 5 min |
具有鼓掌恢复能力的可用性 | 99.99 | < 53 min |
高可用性 | 99.9 | < 8.8 h |
商品可用性 | 99 | < 87.6 h |
所以,CAP理论定义的其实是在容忍网络分区的条件下,“强一致性”和“极致可用性”无法同时达到。
参考资料:
扩展阅读: