本节书摘来自异步社区出版社《NoSQL权威指南》一书中的第1章,第1.5节,作者:【美】Joe Celko(乔•塞科) ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 CAP定理
2000年,Eric Brewer在ACM分布式计算原理主题研讨会做了主题演讲,并介绍了CAP定理(也称Brewer定理)。2002年,在麻省理工学院的Seth Gilbert和Nancy Lynch的努力下进行了修订和修改,后来又有很多人参与。
这个定理是针对分布式计算系统的,而传统并发模型会假设有中央并发管理机制。悲观并发模型有一个“交通警察”,乐观并发模型有一个“服务领班”。CAP代表一致性(consistency)、可用性(availability)和分区容错性(partition tolerance)。
**一致性。**与ACID是同样的概念。系统可靠地遵循其既定的数据内容规则吗?一个集群中的所有节点都能看到它们应该看到的所有的数据吗?不要简单地认为这是最基本的以至于没有数据库会违背它。有一些安全数据库会常常欺骗某些用户!例如,当我们登录到《星球日报》报社的数据库时,我们被告知,Clark Kent是一个温和的记者,为一家伟大的都市报纸工作。但如果你是Lois Lane,系统会告诉你,Clark Kent是一位超人,一位来自另一个星球的陌生访问者。
可用性。是指请求的时候数据库服务或系统是可用的。每个请求会获得失败或成功之外的反应吗?可以登录和连接会话到数据库吗?
分区容错性或健壮性。是指一个系统即使数据丢失或系统故障仍能继续运行。单个节点故障不应该导致整个系统崩溃。我在看我的3条腿的猫—它是分区容错的。但是,如果它是一匹马的话,我们可能就会射杀它(3条腿的猫是能够站稳的,但3条腿的马却不能)。
分布式系统只能保证CAP理论中的两个特性,而不是所有3个特性。如果需要可用性和分区容错性,可能不得不在一致性方面做出让步,并且忘记ACID。从本质上讲,系统说“我能让你访问到一个节点,但是我不确定你找到的数据是否正确”或者“我可以保证可用性和数据是正确的,但不能保证它是完整的。”这就像关于软件项目的一个古老的笑话:你可以让项目按时交付、满足预算要求或是正确性的,但只能在其中选择两样。
为什么我们不想失去以前的优势?我们很想保持这些优势,但是大型计算机在大数据面前已经无能为力,并且“大数据”已经遍布各个领域。不再有中央计算机,今天每个企业都要在网络上处理数百、数千或者数万个数据源数和用户。
我们一直认为“大数据”在推动硬件限制的改进。在大型机的辉煌岁月中有一个古老的笑话:你需要做的就是购买更多的磁盘来解决任何问题。
如今,数据体积使用了以前从未用过的术语,SI前缀peta(PB,1015)和exa(EB,1018)在1975年的第15届Conférence Générale des Poids et Mesures(CGPM)被通过。