|
|
51CTO旗下网站
|
|
移动端

1.3.6 Brewer的CAP理论

《Cassandra 权威指南》第1章Cassandra 概况,本章我们介绍了Cassandra 的特征、历史和主要特性。我们了解到了哪些公司使用了Cassandra 和它们的使用目的。我们还回顾了数据库技术的发展史,以此可以从历史角度看待Cassandra 的价值。本节为大家介绍Brewer的CAP理论。

作者:王旭 译来源:人民邮电出版社|2011-07-18 20:22

1.3.6 Brewer的CAP理论

要理解Cassandra 的设计和它所谓的“最终一致性”数据库,我们首先需要了解一下CAP 理论。CAP 理论由Eric Brewer 提出,所以有时又被称为Brewer 理论。

2000 年,当时在加州大学伯克利分校工作的 Eric Brewer 在ACM 分布式计算原理会议上提出了CAP 理论。依据这个理论,在一个大规模分布式数据系统中,有三个需求是彼此循环依赖的:一致性、可用性和分区耐受性。

一致性(Consistency)

对于所有的数据库客户端使用同样的查询都可以得到同样的结果,即使是有并发更新的时候也是如此。

可用性(Availability)

所有的数据库客户端总是可以读写数据。

分区耐受性(Partition Tolerance)

数据库可以分散到多台机器上,即使发生网络故障,被分成多个分区,依然可以提供服务。

Brewer 理论是说,对于任意给定系统,只能强化这三个特性中的两个。这很类似于软件开发中的名言:“你可以让软件很好,让它很快,或者很便宜:不过三个里面你只能选择两个。”

由于循环依赖关系,我们不得不在它们之中做出选择。比如,你期望获得更强的一致性,那可能就只能拥有较低的分区耐受性,除非你在可用性上做一些让步。

CAP 理论在2002 年被MIT 的Seth Gilbert 和Nancy Lynch 所证明。不过,在分布式系统中你将不得不面对网络分区的问题,而且在某些时候,机器也常常出现故障,从而导致某些节点不可达。丢包同样是与生俱来的问题。所以,我们可以得到结论,一个分布式系统必须尽力在网络发生分裂的情况下继续工作(具有分区耐受性),这样我们实际上只能在剩下的两个特性里二选一:可用性或是一致性。

如图1-1 所示,三个特性没有相互交叠的区域。

 
图1-1:CAP 理论指出,同时只能
具有这三个特性中的两个

通过图示来观看每个不同的非关系型数据存储系统在CAP 图谱中排在什么位置,可能更有助于理解这个概念。图1-2 是在2009 年MongoDB 的创始人和CEO,Dwight Merriman 在纽约MySQL 用户组演讲的幻灯片的基础上绘制的(你可以在http://bit.ly/7r6kRg 查看这个幻灯片)。这里,我根据我的研究修改了某些系统在图中的位置。

图1-2 显示了我们本章中讨论的几种不同数据库系统的关注焦点。注意,图中的数据库的位置与其具体配置有关。正如Stu Hood 指出的,一个分布式MySQL 数据库只有在使用了Google 的同步复制补丁的时候才可以被认为是一致的系统,否则,它应该只能被看做是可用和分区耐受的系统。

非常有趣的一点是,一个系统在CAP 体系中所处的位置和一个存储机制最初被发明时想要解决的问题,两者并不一定是一致的,比如,CP 边上既有图数据库,也有面向文档的数据库。

 
图1-2:数据库在CAP 连线上的位置

在这张图里,关系型数据库通常会在一致性和可用性的连线上,这意味着它们在网络失效的时候(比如网线中断)都会无法工作。这通常是由于设置了一个单主节点造成的,因为主节点可能发生故障,其他的一组服务器也可能没有足够的机制让它们在网络分裂的情况下能继续提供服务。

诸如Neo4J 之类的基于图的数据库和或多或少沿袭自Google 的BigTable 的设计的数据库(如MongoDB、HBase、Hypertable 以及Redis)全都较少地关注可用性,更多地强调一致性和分区耐受性。

如果你对海量数据存储或是NoSQL 数据库的特性有兴趣,可以看一下本书附录。

***, 包括Cassandra、Voldemort、CouchDB 和Riak 在内的沿袭自Amazon 的Dynamo 的设计的数据库都更强调可用性和分区耐受性。不过,这并不意味着它们认为一致性不重要,它们舍弃的一致性并不比Bigtable 舍弃的可用性更多。按照Bigtable 的论文,“某些”数据的平均不可用时间大约为0.0047%(论文第4 节),这就是说,这些特性都是相对的,因为我们是在讨论一些已经非常可靠的系统。你可以把(C,A,P)三个字母看做是几个旋钮,按照你自己的需求来调节系统,Dynamo 类的系统倾向于那些可以容忍“最终一致性”的场合,这里的“最终”实际也就是毫秒级的时间,读时修复意味着读操作可以返回一致的结果,而且如果需要,你也可以达到强一致性。

那么,实际上,在CAP 中只能三选二到底意味着什么呢?

CA

主要支持一致性和可用性,这意味着你很可能使用了两阶段提交的分布式事务。也就是说,如果网络发生分裂,那么系统可能会停止响应,这也意味着你的系统很可能被限制在一个数据中心集群以降低网络分区发生的可能性。如果你只需要这个级别的规模扩展,那么可以选择CA 取向的系统,它较易于管理,允许你使用简单而且熟悉的结构。

CP

主要支持一致性和分区耐受性,你可以通过改进系统架构,设置数据分片来提升可扩展性。你的数据将保持一致性,但如果有节点发生故障,仍然会有部分数据无法访问(不可用)。

AP

主要支持可用性和分区耐受性,你的系统可能返回不太精确的数据,但系统将始终可用,即使是网络发生分区的时候也是如此。DNS 可能是这类系统中最为著名的例子了,这类系统可扩展性非常强,高可用,而且具有分区耐受性。

注意,这里的介绍是要给出一个概观,以便从比较高的维度来对这些系统进行比较,但实际系统的区分并不是这么绝对。比如,Google 的BigTable在这个体系中究竟应该放在什么位置就并不确切。Google 的文件中声称BigTable 是“高可用的”,不过在文件后面的部分却说,如果Chubby(BigTable 的持久化锁服务)由于服务故障或是网络问题持续不可用超过一段时间的话,BigTable 将变得“不可用”(论文第4 节)。对于读操作,文件说,“我们没有考虑数据的多个副本和其他由于视图或是索引造成的不同形式的多副本的可能性。”***,文件指出“BigTable 不想解决中心控制和拜占庭容错”(第10 节)。由于这些不太一致的信息,你可以发现确定一个数据库的CAP 到底在什么样的水平并不是一门精确科学。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

网络渗透测试——保护网络安全的技术、工具和过程

网络和计算机安全问题已经成为政府、企业必须面对的现实问题。应对安全威胁的途径之一就是采用渗透测试的方法模拟黑客的攻击,找出网络和计...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客