CAP 定理介绍

本文最后更新于:1 年前

前言

在互联网行业飞速发展的 21 世纪,分布式系统正变得越来越重要,大型互联网公司如 Google,Amazon,MicroSoft,Alibaba,Tencent 等之所以被认为技术很厉害,很大程度上是因为其后台十分强悍,而这些后台一定是由若干个大的分布式系统组成的,因此理解分布式系统的运行原理对于程序员有非常重要的意义。

CAP 定理是分布式系统方向一个比较宽泛但很重要的基本定理,也可以作为理解分布式系统的起点。

这篇博客将简单介绍一下 CAP 定理。

历史

2000 年,柏克莱加州大学(University of California, Berkeley)的计算机科学家 Eric Brewer 在分布式计算原则研讨会(Symposium on Principles of Distributed Computing)提出,分布式系统有三个指标。

  • Consistency(可用性)
  • Availability(一致性)
  • Partition tolerance(网络分区容错性)

它们的第一个字母分别是 C、A、P。

理论上,只能从 CAP 三者中选择两者,然而,这种选择的边界并非是非此即彼的(not binary),很多时候混合考虑不同程度的各个因素,结果可能是更好的。( The whole spectrum in between is useful; mixing different levels of Availability and Consistency usually yields a better result

需要注意的是,尽管我们常说某个系统能够满足 CAP 属性中的 2 个,但并不是必须满足 2 个,许多系统只具有 0 或 1 个 CAP 属性。

此外,很多同学会纠结单机系统到底是 CA 系统还是 CP 系统,个人觉得纠结这个问题没有任何意义,注意 CAP 定律的完整表述:Any networked shared-data system can have at most two of the three desired properties,也就是说 CAP 定理并不针对单机系统做限定,因此将这个不属于单机的概念强加在单机系统上并无意义。

定义 & 证明

其实 CAP 定理已经被大家讲烂了,网上一搜都会出现很多附带个人解读且不一定正确的博客,我自己之前也写过一版,后面也觉得太烂了。

幸运的是我找到了一篇 博客,这篇博客的后半部分( 对 CAP 的常见误解 章节, CAP 理论的一些疑问 章节和 CAP 的不足 章节)总结的很清晰中肯,在这里分享给大家,我之前写的垃圾就删了吧。

总结

个人认为,CAP 定理的核心在于,在网络分区的情况下,我们需要对 C 和 A 做出相应的妥协,我们不可能完全满足 CA,但是我们可以合理控制 C 和 A 之间的比例让我们的应用/中间件正常提供服务,同时也尽量提升基础设施的稳定性来保障 P。

附录 1

《Spanner,真时,CAP 理论》是 Google VP,CAP 理论之父在情人节当天撰写的,主要介绍了 Google 的 Spanner 数据库的真时(TrueTime)服务和 CA 特性,以及结合 CAP 理论的一些思考,建议阅读,阅读 Spanner 论文后阅读更佳。

附录 2

DDIA 的作者针对 CAP 定理也有一番见地,建议阅读。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!