1. 背景

为什么需要云存储和云计算?对于商业搜索引擎来说,需要处理的数据超过百亿,并且不部分数据都是互联网页面这样的无结构化或者半结构化数据。云存储和云计算平台的目的,就是为了存储和管理这些海量数据变得简单化。目前来看,一套高效的云存储和云计算平台,已经成为了搜索引擎的核心竞争力。
这本书主要是通过Google提供的一整套云存储和云计算技术框架,来介绍相关的核心技术。主要是GFS/BigTable/MapReduce三驾马车。在阅读的过程中,也会选取其他公司的技术方案进行对比。

2 基本假设

由于互联网数据的爆炸性增长,导致大型互联网公司开始提倡并推行云存储与云计算,云存储和云计算平台的设计都遵循以下一些基本假设和要求

  1. 由大量廉价PC构成:目的主要是节省成本
  2. 机器节点出现故障是常态:这使得云存储和云计算技术方案在设计之初,就要在这个约束下提供可靠服务,考虑到数据的可用性和安全性
  3. 水平增量扩展:随着数据量的不断增大,需要靠增加机器来承载更多数据,同时必须在用户无感知的情况下实现增量扩展,对于云存储和云计算平台,这往往是通过数据的水平分割实现的。
  4. 弱数据一致性:云存储和云计算平台因其背景而必须拥有的特性:高可用性、易拓展性、高容错性。在此基础上,需要付出的代价就是弱数据一致性,这主要是因为很多互联网服务并不要求强数据一致性。
  5. 读多写少型服务:根据互联网服务的特点,设计云计算和云存储平台时,可以做出有针对性的优化来提升效率。

3 理论基础

3.1 CAP原则(Consistency/Availability/Partition Tolerance)

CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition Tolerance(分区容错性),三者不可得兼。

3.1.1 Partition Tolerance(分区容错性)

大多数分布式系统分布在多个子网络,每个子网络称作一个区(partition), 所谓的分区容错指的是区间通信可能会失败。实际使用中,失败指的是没有达到区之间通信的时限要求,当系统不能再时限内达成数据一致性,就意味着发生了分区的情况,这种情况下就必须在C与A之间做出选择。
对于分布式系统来说,分区容忍是天然具备的要求,所以P无法避免,在设计具体技术方案的时候,必须在一致性和可用性方面做出取舍。

3.1.2 Consistency(一致性)

一致性指的是对分布式系统所有节点的访问,都能够得到同一份最新的数据副本。

3.1.3 Availability(可用性)

可用性就是说服务可用,即每次对服务的访问都能够得到返回(不管数据是否是最新的数据)

3.1.4 为什么CAP三者不可兼得

简单来说,试想两个节点分别处于分区的两侧,如果要求至少一个节点更新状态,则会导致数据的不一致(丧失C),如果为了保证数据的一致性,将未成功更新状态的节点设置为不可用,则会导致服务不可用(丧失A),如果要求两个节点可以相互通信,保证数据的一致性,则会丧失P性质
CA without P:传统的关系数据库在三要素中会选择CA两个因素,获得强数据一致性和高可用性,但这会导致扩展性差。
CP without A:如果不要求可用,要求每个请求在Server之间强一致,那么P会导致同步的时间无限延长,很多传统的数据库分布事务属于这种模式。
AP without C:高可用并且允许分区,则需要放弃一致性,云存储数据库往往数属于此类。

3.2 ACID原则

ACID是传统关系型数据库采纳的原则,分别为原子性(Atomicity)、一致性(Consistency)、独立性(Isolation)、持久性(Durablity)

3.2.1 原子性(Atomicity)

指的是一个事务要么全部执行,要么完全不执行,也就是不允许事务执行了一半就终止。

3.2.2 一致性(Consistency)

事务在开始和结束时,应该始终满足一致性约束条件。
(例如约束了a + b = 100, 如果事务改变了a,那么必须也要改变b,否则事务会失败)

3.2.3 独立性(Isolation)

指的是多个事务如果同时执行,彼此之间不需要知晓对方存在,执行的时候相互不影响,不允许出现两个事务交错,间隔执行。

3.2.4 持久性(Durability)

指的是事务运行成功之后,对系统状态的更新是永久的,即使出现宕机也不会消失。

3.3 BASE原则

数据库系统采纳ACID原则来获得高可靠性和数据的强一致性,而云存储系统则采纳BASE原则,BASE原则是和ACID原则几乎相反的原理。BASE原则是对CAP原则权衡之后得到的结果,其核心思想是:既然无法做到强一致性,那么可以根据业务自身的特点,想办法让系统达到最终一致性。

3.3.1 基本可用(Basically Avaliable)

在绝大多数时间内系统处于可用状态,允许偶尔失败

3.3.2 软状态或者柔性状态(Soft State)

数据状态不要求在任意时刻都完全保持同步

3.3.3 最终一致性

最终一致性是一种弱一致性,尽管软状态不要求数据在任何时刻都保持一致同步,但是最终一致性要求在给定的时间窗口内数据可以到达一致性状态。

3.4 云存储系统的发展趋势

尽管当前大多数云存储系统采纳了BASE原则,但是云存储系统的发展正在向逐步提供局部的ACID特性发展,即全局而言符合BASE原则,局部支持ACID原则,这样可以获得两者各自的好处,在两者之间建立平衡。大多数的云存储平台都拿采纳了最终一致性

  • 所谓强一致性,指的是当数据更新之后或许的读取操作看到的都是最新的数据,弱一致性则放宽条件,允许读取到旧版本数据,最终一致性指的是给出一个时间窗口,在一段时间后系统能够保证所有备份数据的更新一致。

4. 数据模型

数据模型指的是云存储架构在应用开发者眼中的形式。比较常见的是KV模式和模式自由(Schema Free)列表模式。
从下图就可以看出,模式自由列表模式的记录类似于关系数据库,数据值可以由若干个列属性组成,不同的是数据库一旦确定列包含的属性就固定不变,云存储系统支持随时增加或者删除某个列属性,一行可以只存储部分列属性,不必完全存储。
image.png
云存储系统内部的存储结构可以归结为两种方式:哈希+链表/B+树,前者查询更快,但是一次只能查一条,不支持批量顺序查询,B+树则相反。两种方式各有优点,主要应用于不同场合。

5. 面临的基本问题

由于分布式存储系统来说,因其由大量廉价PC构成,因此不管采用何种方案,都会面临以下的问题。

  1. 数据如何在机器之间分布:海量数据下,单机无法承担全部数据的存储和计算,因此必须对数据进行切割,将大数据切成小份并分配到其他机器上,因此首先要考虑数据分布的策略。
  2. 多备份数据如何保证一致性:在这个背景下,随时都有可能有PC出现故障,存储在故障PC的数据因此不可用,出于数据可用性方面的考虑,云存储系统必须对数据进行多备份,而因为云计算环境下客户端程序会对数据进行并发读写,因此数据多个备份之间保证其状态一直是云存储系统的核心问题。
  3. 如何响应客户端的读/写请求:要求对客户端的数据读写请求做到延时尽可能短,数据尽可能正确,都是平台需要提供的基本功能和保证。
  4. 如何处理服务器的变更:当加入机器的时候,系统因自动为其分配任务,同样当数据损坏的时候,系统需要识别状态并对其负责存储的数据进行迁移和备份。
  5. 如何在机器之间进行均衡负载:这是为了解决PC之间分工不均的问题。

原文地址:http://www.cnblogs.com/Hugh-Locke/p/16930952.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性