基于关联数据的图书馆语义云服务研究 9.2
作者: 虞为著
67.9万字 0.1万次阅读 1.1万累计人气值
更新至 第三章 2023-10-25 18:36:15
开始阅读 加入书架
手机免费阅读
七猫免费小说app
举报
  • 1
    作品总数
  • 67.9
    累计字数
  • 作品介绍
  • 作品目录 3章
简介

本书介绍了云计算技术的发展和在图书馆研究中的应用。本书提出通过构建基于云计算平台的图书馆服务,以关联数据作为信息资源连接的手段和方法,通过语义分析和互联,达到信息资源的融合,促进知识发现和创新。通过进行实验论证,本书证明了基于关联数据的图书馆云服务的可行性和有效性。

第一章

基于关联数据的图书馆

语义云服务研究 虞为著南京大学出版社

图书在版编目(CIP)数据基于关联数据的图书馆语义云服务研究 / 虞为著.

—南京: 南京大学出版社, 2016.12

ISBN 9787305178399Ⅰ. ①基…Ⅱ. ①虞…Ⅲ. ①数字图馆图书馆服

务研究Ⅳ. ①G250.76中国版本图书馆CIP数据核字(2016)第262277号出版发行南京大学出版社

社址南京市汉口路22号邮编 210093

出版人金鑫荣书名基于关联数据的图书馆语义云服务研究

著者虞为

责任编辑卢文婷田雁照排南京紫藤制版印务中心

印刷常州市武进第三印刷有限公司

开本787×10921/16印张19.75字数376千

版次2016年12月第1版2016年12月第1次印刷

ISBN9787305178399

定价60.00元网址:http://www.njupco.com

官方微博:http://weibo.com/njupco

微信服务号:njuyuexue

销售咨询热线:(025)83594756

 版权所有,侵权必究

 凡购买南大版图书,如有印装质量问题,请与所购

图书销售部门联系调换基于关联数据的图书馆语义云服务研究 目录目录

第一章云服务概述1

1.1云服务的概念1

1.1.1云服务的定义1

1.1.2云服务的层次结构3

1.1.3云服务的部署分类4

1.2云服务的特征5

1.2.1云服务的技术特征5

1.2.2云服务形式特征7

1.2.3云服务和其他技术服务的区别8

1.3云服务的应用9

1.4云服务的产业发展10

1.4.1应用市场分析10

1.4.2受关注的五大方面11

1.4.3云服务的应用衍生12

1.5云服务的发展历史14

1.5.1云计算发展时刻表14

1.5.2云服务发展分析15

1.5.3中国的云服务技术发展17

参考文献17

第二章云服务关键技术19

2.1Google云计算技术19

2.1.1MapReduce技术19

2.1.2GFS技术22

2.1.3Bigtable技术32

2.2Amazon云计算技术45

2.2.1Amazon EC246

2.2.2Elastic Block Store (EBS)48

2.2.3S348

2.2.4SimpleDB49

2.2.5Dynamo平台50

2.3其他云计算平台51

2.3.1开源云计算平台51

2.3.2云计算平台应用55

参考文献56

第三章关联数据概述57

3.1关联数据基本概念57

3.1.1关联数据的定义57

3.1.2关联数据的发展58

3.2关联数据的技术60

3.2.1关联数据基本原则60

3.2.2URI技术61

3.2.3HTTP技术64

3.2.4XML技术67

3.2.5RDF技术67

3.2.6SKOS技术72

3.2.7OWL73

3.2.8关联数据的创建和发布75

3.3关联数据的应用研究77

3.3.1关联数据的应用发展77

3.3.2关联数据与语义网的研究78

3.3.3关联数据的工具79

3.3.4语义网开发工具包Jena80

3.3.5关联数据项目81

参考文献83

第四章图书馆与关联数据85

4.1图书馆信息服务应用趋势85

4.2关联数据应用在图书馆中的优势87

4.2.1图书馆数据面临的问题88

4.2.2关联数据的优点89

4.3语义网与图书馆91

4.3.1语义网的定义92

4.3.2语义网的优点92

4.3.3图书馆功能在语义网中的应用93

4.3.4受控词表在语义网中的应用94

4.3.5语义网与数字图书馆94

4.4图书馆中的关联数据95

4.4.1图书馆关联数据中的数据集96

4.4.2图书馆关联数据中的元数据元素集98

4.4.3图书馆关联数据中的取值词汇集102

4.4.4小结105

4.5图书馆关联数据应用案例106

参考文献107

第五章图书馆语义云服务构建110

5.1图书馆中的云服务需求分析110

5.2相关的图书馆云服务应用112

5.2.1OCLC云服务112

5.2.2云软件112

5.2.3图书馆应用Amazon云服务113

5.2.4图书馆应用Google云服务113

5.3图书馆语义云服务中的大数据115

5.3.1图书馆中的延时数据115

5.3.2图书馆中的实时数据116

5.4图书馆语义云服务框架116

5.4.1快数据处理技术概述116

5.4.2语义云服务框架117

5.4.3图书馆语义云服务流程119

5.5图书馆语义云服务的系统实现120

5.5.1云计算平台的搭建120

5.5.2快数据处理框架构建128

5.5.3基于Spark的论文相似性快速检测系统132

5.5.4执行速度实验150

5.5.5软聚类实验151

5.5.6Spark平台上实验151

5.6本章小结153

参考文献153

第六章基于关联数据的图书馆云服务154

6.1图书馆数据关联匹配服务154

6.1.1目前研究现状155

6.1.2书目数据关联匹配架构156

6.1.3书目数据关联实现158

6.1.4小结166

6.2云服务中图书馆关联数据推荐服务166

6.2.1目前研究现状167

6.2.2从实时新闻到图书馆馆藏资源168

6.2.3思路和框架169

6.2.4技术与应用170

6.2.5实验与讨论172

6.2.6分析和讨论174

6.2.7关联数据的应用179

6.2.8小结184

6.3结论184

参考文献184

附录一书目数据间的关联匹配(Library to Amazon)(部分)188

附录二DBpedia和书目数据的关联匹配(DBpedia to Library)

(部分)191

附录三DBpedia和书目数据的关联匹配(DBpedia to Amazon)

(部分)196

附录四书目数据推荐(新闻10条,书目前50条)239

基于关联数据的图书馆语义云服务研究 第一章云服务概述 第一章云服务概述

“云”在过去往往用来表示电信网,后来也用来表示互联网和底层基础设施的抽象,因此“云”是网络、互联网的一种比喻说法。近几年来,“云计算”[1]作为一项新兴的技术,受到了来自学术界、工业界以及各国政府和企业的广泛关注,并在短暂的时间中对现有的网络技术进行了革命性的变革。继个人计算机变革、互联网变革之后,“云计算”被看作第三次IT浪潮,是中国战略性新兴产业的重要组成部分。构建在“云计算”技术之上的新的生产、生活的服务方式和商业模式也被人们称为“云服务”,它将带来生活、生产方式和商业模式的根本性改变。对于究竟什么是“云服务”以及如何构成,云服务有哪些特征和作用,现在仍然有不同的看法。本章将对这些问题进行阐述和分析。

1.1云服务的概念

从2007年开始,“云计算”这个词逐渐被人们熟悉,特别是在网络和信息处理领域。之所以称为“云”,是因为计算设施在网络中,用户无需关心它们所处的具体位置。云计算的产生得益于网络带宽的增长,网格计算、虚拟化技术、SOA和容错技术的发展融合以及互联网用户对计算能力和存储能力的需求增长。云计算可以看作一种计算模型,即把计算任务分布在大量计算机构成的资源池上,使用户能按需获取计算能力、存储空间和信息服务[2]。由于云计算使用价格低廉的服务器集群来降低成本、通过容错技术获得软件的高可用性、把应用程序与底层服务协作开发以便充分利用资源,用户可以获得廉价、高效和可扩展的计算和存储服务,提高了信息服务的能力和效率。我们也称云计算技术框架为云计算环境,在云计算环境下布置和运行的应用程序和相关技术需要遵循云计算技术框架的布置和原理,同时能够应用和发挥云计算技术的功效和优势,在云计算和大数据的环境中取得长足的发展。

1.1.1云服务的定义

云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。对于云计算的定义,有各种不同的观点。其中,维基百科的定义接受较为广泛,而美国国家标准与技术研究院的定义则较为详细。维基百科中的定义:云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机和其他设备[3]。美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务)。这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互[4]。

云计算概念被大量运用到工业领域中,国内的“阿里云”与云谷公司的XenSystem,以及在国外已经非常成熟的Intel和IBM,各种云计算的应用服务范围正日渐扩大,影响力也无可估量。如今,硬件产品飞速发展,使得互联网上数据量亦飞速增长,海量数据作为一个概念被提出时,单位以GB上升到TB计算。云计算的提出,给出了应用的另一种形式,使得用户根本就不必承受如此海量的数据计算。如果说,用“云”被当作现今用户应用的Internet互联网来理解的话,那么当“云”与“计算”联合起来后,其含义就变得复杂化。不同的用户和厂商对云计算的定义也不相同,通常是指由虚拟服务器组成的公用/效用计算(Utility computing)的升级版。行业中还存在另一种说法,认为任何在防火墙外的操作均可以被视为云计算,甚至包括常规的外包应用。如今比较领先的云计算厂商先后推出了自己的策略,包括Amazon、Google、Salesforce、微软、SUN、IBM、Oracle以及EMC的云策略,并初步探讨了云计算对企业的影响。

云服务指构建在云计算技术基础之上,通过网络以按需、易扩展的方式获得所需服务[5]。云服务可以是IT和软件、互联网相关,也可是其他服务。它意味着计算能力也可作为一种商品通过互联网进行流通。实际上,当考虑到海量数据应用的具体需求时,云服务的概念也可以这样阐述:在不增加硬件基础设施投资,无须训练新员工或不购买新软件的前提下,增加资源容量或提升计算性能的一种方法。云服务包含了所有通过网络实时订购或者按照使用量付费的服务模式,扩展了IT行业的现有能力。

除了以上的定义,基于云计算服务的定义还可以分为广义的云计算服务和狭义的云计算服务定义。狭义云计算服务指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源。广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。它意味着计算能力也可作为一种商品通过互联网进行流通[6]。

云服务由一系列可以动态升级和被虚拟化的服务和资源组成,这些服务和资源被所有云计算的用户共享并且可以方便地通过网络访问,用户无需掌握云计算的技术,只需要按照个人或者团体的需要使用云计算的服务和资源。

1.1.2云服务的层次结构

美国国家标准和技术研究院的云计算定义中明确了三种云服务模式:基础设施即服务IAAS、平台即服务PAAS和软件即服务SAAS[4,7]。

IAAS(Infrastructure as a Service),基础设施即服务。IAAS将硬件设备等基础设施封装成服务给用户使用,如处理能力、存储空间、网络组件或中间件。用户能掌控操作系统、存储空间、已部署的应用程序及网络组件(如防火墙、负载平衡器等),但并不掌控云基础架构。用户可以在这些硬件设备的基础上创建自己的应用开发平台。典型的基础设施即服务包括亚马逊公司开发的弹性计算云EC2和简单存储服务S3。

消费者通过Internet 可以从完善的计算机基础设施获得服务。这类服务称为基础设施即服务。基于 Internet 的服务(如存储和数据库)是 IAAS的一部分。提供给消费者的服务是对所有计算基础设施的利用,包括处理CPU、内存、存储、网络和其他基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、存储空间、部署的应用,也有可能获得有限制的网络组件(例如路由器、防火墙、负载均衡器等)的控制。

PAAS相比IAAS对资源做了更进一步的抽象。它将应用程序的运行环境作为服务提供给用户。用户可以使用主机操作应用程序。用户掌控运作应用程序的环境(也拥有主机部分掌控权),但并不掌控操作系统、硬件或运作的网络基础架构。平台通常是应用程序基础架构。PAAS自动负责对硬件资源的管理和容错,用户只需考虑在PAAS环境下的研发。现在主要的PAAS服务有Google App Engine和微软的Microsoft Windows Azure等。这类服务会受到厂商的设计规定与容量限制,用户也因此没有足够的自由。

SAAS指将某些特定应用的软件功能作为服务。用户可以直接使用这些软件功能,不需编写应用程序或考虑底层软硬件的配置问题。用户使用应用程序,但并不掌控操作系统、硬件或运作的网络基础架构。这是一种服务观念的基础,软件服务供应商,以租赁的概念提供客户服务,而非购买,比较常见的模式是提供一组账号密码。例如: Microsoft CRM与Salesforce.com云计算的这三种主要服务形式互为补充,互相融合,满足了不同用户各方面的信息服务需求。云计算的三种主要服务形式相互关系如图1.1所示。

图1.1云计算服务形式及相互关系

这类云服务是通过网络浏览器来向成千上万个用户提供某种单一的软件应用。在用户看来,这样他们不需要事先购买服务器设备或是软件授权;而对于厂商来说,与常规的软件服务模式相比,仅提供一项应用的成本也要低得多。另外,SAAS在人力资源软件应用中也比较普遍,甚至已经开始向企业应用领域拓展。而且,基于SAAS的“桌面”应用GoogleApps等的广泛应用,更加确定了SAAS软件即服务的领先模式。

在“软件即服务(SAAS)”的服务模式当中,用户能够访问服务软件及数据。服务提供者则维护基础设施及平台以维持服务正常运作。SAAS常被称为“随选软件”,并且通常是基于使用时数来收费,有时也会有采用订阅制的服务。推广者认为,SAAS使得企业能够借由外包硬件、软件维护及支持服务给服务提供者来降低IT营运费用。另外,由于应用程序是集中供应的,更新可以实时的发布,无需用户手动更新或是安装新的软件。SAAS的缺陷在于用户的数据是存放在服务提供者的服务器之上,使得服务提供者有能力对这些数据进行未经授权的访问。

用户通过浏览器、桌面应用程序或是移动应用程序来访问云服务。云服务使得企业能够更迅速地部署应用程序,并降低管理的复杂度及维护成本,允许IT资源的迅速重新分配以适应企业需求的快速改变。云服务依赖资源的共享以达成规模经济,类似基础设施。服务提供者集成大量的资源供多个用户使用,用户可以轻易地请求更多资源,并随时调整使用量,将不需要的资源释放回整个架构,因此用户不需要因为短暂尖峰的需求就购买大量的资源,仅需提升租借量,需求降低时便退租。服务提供者得以将目前无人租用的资源重新租给其他用户,甚至依照整体的需求量调整租金。

1.1.3云服务的部署分类

美国国家标准和技术研究院的云计算定义中也涉及了关于云服务的部署模型[4],给出了云计算服务部署的几种主要分类:公用云/公有云(Public Cloud)、私有云(Private Cloud)、社区云(Community Cloud)、混合云(Hybrid Cloud)。

公用云/公有云由一些公司运营和拥有,这些公司使用这种云服务为其他组织和个人提供对价格合理的计算资源的快速访问。使用公用云服务,用户无需购买硬件、软件或支持基础架构,这些都是由提供商拥有并管理的。简而言之,公用云服务可通过网络及第三方服务供应者,开放给客户使用。“公用”一词并不一定代表“免费”,也可能代表免费或相当廉价。公用云并不表示用户数据可供任何人查看。公用云供应者通常会对用户实施使用访问控制机制,公用云作为解决方案,既有弹性,又具备成本效益。

在公用云中的传输模式中支持已经转变为运营成本,故费用大幅下降,显然降低了进入门栏。这是由于体系架构由第三方提供,无需一次性购买,且没有了罕见的集中计算任务的压力。计算资源包在通用计算基础被分割为细粒度的,基于用户的操作。因此更少的IT技能可以在企业内部快速实施。

私有云由单个公司拥有和运营,该公司控制各个业务线和授权组自定义以及使用各种虚拟化资源和自动服务方式。私有云充分利用了很多云的高效性,同时提供更多的资源控制并明确掌控多租户。私有云具备许多公用云环境的优点,例如弹性、适合提供服务。两者差别在于私有云服务中,数据与程序皆在组织内管理,且与公用云服务不同,不会受到网络带宽、安全疑虑、法规限制影响。此外,私有云服务让供应者及用户更能掌控云基础架构、改善安全与弹性,因为用户与网络都受到特殊限制。

社区云由众多利益相仿的组织掌控及使用,例如特定安全要求、共同宗旨等。社区成员共同使用云数据及应用程序。

混合云使用私有云作为基础,同时结合了公共云服务的策略使用。事实是私有云不会独立于公司其他的 IT 资源和公用云而单独存在。大多数使用私有云的公司都将发展为管理跨数据中心的工作负载、私有云和公用云,因此创建了混合云。混合云的模式中,用户通常将非企业关键信息外包,并在公用云上处理,但同时掌控企业关键服务及数据。

1.2云服务的特征

互联网上的云服务特征和自然界的云、水循环具有一定的相似性,因此,云是一个相当贴切的比喻。下面,我们对云服务的技术特征和其他特征进行总结和归纳。

1.2.1云服务的技术特征

云服务的基本特征之一就是分布式[8]。云服务通过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再由多部服务器组成的庞大系统搜索、计算分析之后将处理结果回传给用户。因此远程的服务供应商可以在数秒之内,达成处理数以千万计甚至亿计的信息,达到和“超级电脑”同样强大性能的网络服务。它可分析DNA结构、基因图谱定序、解析癌症细胞等高级计算。例如Skype以点对点(P2P)方式来共同组成单一系统,又如Google通过MapReduce架构将数据拆成小块计算后再重组回来,其中Big Table技术完全跳脱一般数据库数据运作方式,以行设计存储又完全配合Google自己的文件系统,以帮助数据快速处理并提供服务。

云服务的核心技术组成还包括并行计算技术[8,9]。并行计算指的是同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理器来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。

云服务另一个重要的核心技术特征是虚拟化[10]。虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

云服务还有一些核心的技术特征包括SOA、容错技术等。面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在多种这样的系统中的服务可以以一种统一和通用的方式进行交互。容错就是当由于种种原因在系统中出现了数据、文件损坏或丢失时,系统能够自动将这些损坏或丢失的文件和数据恢复到发生事故以前的状态,使系统能够连续正常运行的一种技术。

这些云服务的核心技术是云服务技术的主要构成,也决定了云服务技术的独特之处,包括以下几个方面。

第一,用户能够以快速低价的方式获得技术架构资源服务。允许软件与云计算架构以类似人机交互方式来交互。云计算系统典型的运用基于REST(Representational State Transfer)网络架构的API。在公有云中的传输中技术支持已经转变为运营成本,故费用大幅下降,明显降低了进入门栏。这是由于体系架构是由第三方提供,且无需一次性购买,没有了罕见的集中计算任务的压力。称为计算资源包的通用计算基础上的原则在细粒度上基于用户的操作和更少的IT技能被内部实施。

设备和本地依赖允许用户通过网页浏览器来获取资源,而无需关注用户自身是通过何种设备,或在何地介入资源。通常设施是在非本地的,并且通过因特网获取,用户可以从任何地方来连接。多租户的软件架构技术允许在多用户池下共享资源与消耗。体系结构的中央化使得本地的耗用更少。

第二,系统可扩展性增加。可扩展性经由在合理粒度上按需的服务开通资源,接近实时的自服务,无需用户对峰值负载进行工程构造。原先利用率只有10%—20%的系统利用效率增加了。如果使用多个冗余站点,则改进了可靠性,这允许云服务以符合商业一致性以及灾备。

第三,性能受到监控,同时一致性以及松散耦合架构通过网络服务作为系统接口被构建起来。因为数据集中化了,故安全性得到了提升,增加了关注安全的资源等。较传统系统而言,安全性的要求更加高。部分原因是云服务提供商可以专注于用户所无法提供的资源构建安全性解决方案。维护云计算应用是很简单的,因为显而易见用户无须再在本机上进行安装。一旦改变达到了客户端,它们将更容易支持以及改进。

根据美国国家标准和技术研究院的定义,云服务应该具备以下几条特征[4]:

随需自助服务;

随时随地用任何网络设备访问;

多人共享资源池;

快速重新部署灵活度;

可被监控与量测的服务。

一般认为还有如下特征:

基于虚拟化技术快速部署资源或获得服务;

减少用户终端的处理负担;

降低了用户对于IT专业知识的依赖。

1.2.2云服务形式特征

云服务除上述的技术特征和定义外,在服务形式上还具有以下几个主要特征[8—10]。

第一,资源配置动态化。根据消费者的需求动态划分或释放不同的物理和虚拟资源,当增加一个需求时,可通过增加可用的资源进行匹配,实现资源的快速弹性提供;如果用户不再使用这部分资源时,可释放这些资源。云服务为客户提供的这种能力是无限的,实现了IT资源利用的可扩展性。

第二,需求服务自助化。云服务为客户提供自助化的资源服务,用户无需同提供商交互就可自动得到自助的计算资源能力。同时云系统为客户提供一定的应用服务目录,客户可采用自助方式选择满足自身需求的服务项目和内容。

第三,以网络为中心。云服务的组件和整体构架由网络连接在一起并存在于网络中,同时通过网络向用户提供服务。而客户可借助不同的终端设备,通过标准的应用实现对网络的访问,从而使得云计算的服务无处不在。

第四,资源的池化和透明化。对云服务的提供者而言,各种底层资源(计算、储存、网络、资源逻辑等)的异构性被屏蔽,边界被打破,所有的资源可以被统一管理和调度,成为所谓的“资源池”,从而为用户提供按需服务;对用户而言,这些资源是透明的,无限大的,用户无须了解内部结构,只关心自己的需求是否得到满足即可。

1.2.3云服务和其他技术服务的区别

基于云计算的云服务常与基于网格计算、效用计算、自主计算的服务有很多不同之处[2]。

网格计算是分散式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机,常用来执行大型任务。网格计算的目的是,通过任何一台计算机都可以提供无限的计算能力。

效用计算是IT资源的一种打包和计费方式,比如按照计算、存储分别计量费用,像传统的电力等公共设施一样。在这个模型里服务提供商产生客户需要的计算资源和基础设施管理,并根据某个应用,而不是仅仅按照速率进行收费。

自主计算具有自我管理功能的计算机系统。自主计算的核心是自我监控、自我配置、自我优化和自我恢复。自我监控,即系统能够知道系统内部每个元素当前的状态、容量以及它所连接的设备等信息;自我配置,即系统配置能够自动完成,并能根据需要自动调整;自我优化,即系统能够自动调度资源,以达到系统运行的目标;自我恢复,即系统能够自动从常规和意外的灾难中恢复。

事实上,许多云服务部署依赖于计算机集群,也吸收了自主计算和效用计算的特点。它在硬件结构上是一种多对一的结构,从服务的角度或从功能的角度它是一对多的。例如,如果要设计商务链管理系统,可以先从市面上提供的免费云服务器主机,将应用服务放置于主机上,使用第三方所提供的数据库。这样一来,硬件成本大幅降低,且随时随地于任何终端设备上链接互联网,就能访问数据。

1.3云服务的应用

各类厂商开发了不同的云服务,从成熟的应用程序到存储服务再到垃圾邮件过滤,不一而足,各类云服务的开发和集成正在兴起,云服务也走入了企业应用。

● 公用/效用计算

公用/效用计算[11]如今也被赋予新的含义,众多厂商所共同倡导的云计算,正在为整个业界提供所需要的存储资源和虚拟化服务器等应用。现在,公用/效用计算不仅是企业应用一种补充手段,而且逐渐在数据中心开始占据一席之地。一些厂商开始帮助企业用户创建虚拟的数据中心,诸如Liquid Computing公司的LiquidQ的服务,能帮助企业将内存、I/O、存储和计算容量通过网络集成为一个虚拟的资源池来使用。

● 云计算领域的网络服务

与SAAS有些类似,网络服务厂商也是通过提供API让开发人员来开发互联网应用,而不是自己来提供功能全面的应用软件。这种云计算的服务范围非常广泛,从分散的商业服务,到GoogleMaps、ADP薪资处理、美国邮政服务、Bloomberg和常规信用卡处理服务等的全套API服务。

● 管理服务供应商

管理服务(managed service)是云服务最古老的形式之一,它面向IT管理人员而不是最终用户,例如用于电子邮件的病毒扫描服务,还有应用软件监控服务等。由SecureWorks、IBM和Verizon公司提供的管理安全服务就可归为此类,还包括目前被Google收购的Postini以云为基础的反垃圾邮件服务。MSP的其他产品还包含桌面管理服务,诸如CenterBeam和Everdream提供的产品。

● 服务商业平台

这种云计算服务融合了SAAS和MSP,实际上为用户提供了一种交互性服务平台。这在日常的商业贸易领域是非常普遍的,比如,某种消费管理系统可以让用户从一个网络平台上订购旅行或秘书类服务,而且服务的配送实现方式和价格也都是由用户事先设定好的。非常典型的例子是Rearden Commerce和Ariba。

● 云计算集成

SAAS供应商OpSource最近就推出了OpSource Services Bus,它使用了一家叫Boomi的小公司的云计算集成技术。另一家SAAS 供应商Workday最近也收购了该领域的另一家公司CapeClear。CapeClear提供的是针对B2B集成的ESB(enterprise service bus,企业服务总线)。

如今,不但对于大企业的IT部门云服务有着重要的价值,对于中小企业用户来说则会带来更直接的优势。在预算有限、人才有限的情况下,通过云服务,小企业也可以用到企业级的先进技术,而且前期成本较低,并且非常容易随着业务需求进行扩展。

由于很多云服务对于用户来说过于孤立,使得云服务更可能被看作虚无缥缈的运算。但是,随着虚拟化和SOA在企业中的逐渐普及,灵活、可扩展的基础架构最终可以让每一家企业都成为云的节点。实际上,随着云服务越来越成熟,会有越来越多的中小企业把对IT技术的需求转移到云上来,而不再花很多钱在公司内部构建复杂的IT架构。

1.4云服务的产业发展

中国云服务产业生态链的构建正在进行中,在政府的监管下,云服务提供商与软硬件、网络基础设施服务商以及云计算咨询规划、交付、运维、集成服务商、终端设备厂商等一同构成了云服务的产业生态链,为政府、企业和个人用户提供服务。

1.4.1应用市场分析

云服务在中国主要行业应用还仅仅是一小部分,但随着本土化云计算技术产品、解决方案的不断成熟,云服务理念的迅速推广普及,云服务必将成为未来中国重要行业领域的主流IT应用模式,为重点行业用户的信息化建设与IT运维管理工作奠定核心基础。

第一,医药医疗领域。

医药企业与医疗单位一直是国内信息化水平较高的行业用户,在新医改政策推动下,医药企业与医疗单位将对自身信息化体系进行优化升级,以适应医改业务调整要求,在此影响下,以“云信息平台”为核心的信息化集中应用模式将为医患用户服务,逐步取代各系统分散为主体的应用模式,进而提高医药企业的内部信息共享能力与医疗信息公共平台的整体服务能力。

第二,制造领域。

现代社会制造企业的竞争将日趋激烈,企业在不断进行产品创新、管理改进的同时,也在大力开展内部供应链优化与外部供应链整合工作,进而降低运营成本、缩短产品研发生产周期,未来云服务将在制造企业供应链信息化建设方面得到广泛应用,特别是通过对各类业务系统的有机整合,形成企业云供应链信息平台,加速企业内部研发一体化进程,进而提升制造企业竞争实力。

第三,金融与能源领域。

金融、能源企业一直是国内信息化建设的重要行业用户,国内各大银行及企业信息化建设已经进入资源整合集成阶段。在此期间,需要利用云计算模式,搭建基于基础设施服务的物理集成平台,对各类服务器基础设施应用进行集成,形成能够高度复用与统一管理的IT资源池,对外提供统一硬件资源服务,同时在信息系统整合方面,需要建立基于平台设施服务的系统整合平台,实现各异构系统间的互联互通。因此,云计算模式将成为金融、能源等大型企业信息化整合的创新所在。

第四,电子政务领域。

未来,云计算将推动中国各级政府机构公共服务平台建设,各级政府机构正在积极开展云计算环境下信息化的建设。这项工作需要通过云计算技术来构建高效运营的技术平台,其中包括利用虚拟化技术建立公共平台服务器集群,利用PAAS技术构建公共服务系统等方面,进而实现公共服务平台内部可靠、稳定的运行,提高平台不间断服务的能力。

第五,教育科研领域。

未来,云计算将为高校与科研单位提供实效化的研发平台。云计算应用已经在清华大学、中科院等单位得到了初步应用,并取得了很好的应用效果。在未来,云计算将在我国高校与科研领域得到广泛的应用普及,各大高校将根据自身研究领域与技术需求建立云计算平台,并对原来各下属研究所的服务器与存储资源加以有机整合,提供高效可复用的云计算平台,为科研与教学工作提供强大的计算机资源,进而大大提高研发工作效率。

第六,电信领域。

在国外,Orange、O2等大型电信企业除了向社会公众提供ISP网络服务外,同时也作为云计算服务商,向不同行业用户提供IDC设备租赁、SAAS产品应用服务,通过这些电信企业创新性的产品增值服务,也强力推动了国外公有云的快速发展、增长。因此,在未来,国内电信企业将成为云计算产业的主要受益者之一,从提供各类付费性云服务产品中得到大量收入,实现电信企业利润增长,通过对不同国内行业用户需求分析与云产品服务研发、实施,打造自主品牌的云服务体系。

1.4.2受关注的五大方面

第一,云计算扩展投资价值。云计算简化了软件、业务流程和访问服务。比以往传统模式改变的更多,这是帮助企业操作和优化他们的投资规模。

第二,混合云计算的出现。企业使用云计算(包括私人和公共)来补充他们的内部基础设施和应用程序。专家预测,这些服务将优化业务流程的性能。采用云服务是一个新开发的业务功能。

第三,以云为中心的设计。有越来越多将组织设计作为云计算迁移的元素。这仅仅意味着需要优化云的经历是那些将优先采用云技术的企业。这是一个趋势,预计增长更随着云计算的扩展到不同的行业。

第四,移动云服务。未来一定是移动,以这样或那样的方式。作为移动设备的数量上升显著的平板电脑、iPhone和智能手机是在移动中发挥了更多的作用。许多这样的设备被用来规模业务流程、通信等功能。

第五,云安全。人们担心他们在云端的数据安全。正因为此,用户应该期待看到更安全的应用程序和技术出现。许多新的加密技术和安全协议,在未来会越来越多地呈现出来。

1.4.3云服务的应用衍生

● 云物联[12]

云计算和物联网之间的关系可以用一个形象的比喻来说明:云计算是互联网中的神经系统的雏形,物联网是互联网正在出现的末梢神经系统的萌芽。物联网就是物物相连的互联网,说明:第一,物联网的核心和基础仍然是互联网,是在互联网基础上延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。

物联网的两种业务模式:

MAI(M2M Application Integration), 内部MAAS;

MAAS(M2M As A Service), MMO, MultiTenants(多租户模型)。

随着物联网业务量的增加,对数据存储和计算量的需求将带来对“云计算”能力的要求。

云计算:从计算中心到数据中心在物联网的初级阶段,PoP即可满足需求。

在物联网高级阶段,可能出现MVNO/MMO营运商(国外已存在多年),需要虚拟化云计算技术,SOA等技术的结合实现互联网的泛在服务:TaaS (everyTHING As A Service)。

● 云安全[2]

云安全(Cloud Security)是一个从“云计算”演变而来的新名词。云安全的策略构想是:使用者越多,每个使用者就越安全,因为如此庞大的用户群,足以覆盖互联网的每个角落,只要某个网站被挂马或出现某个新木马病毒,就会立刻被截获。

“云安全”通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中木马、恶意程序的最新信息,推送到Server端进行自动分析和处理,再把病毒和木马的解决方案分发到每一个客户端。

● 云存储[13]

云存储是在云计算概念上延伸和发展出来的一个新的概念,是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。 当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就转变成了一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。

● 云呼叫

云呼叫中心是基于云计算技术而搭建的呼叫中心系统,企业无需购买任何软、硬件系统,只需具备人员、场地等基本条件,就可以快速拥有属于自己的呼叫中心,软硬件平台,通信资源,日常维护与服务由服务器商提供。云呼叫具有建设周期短、投入少、风险低、部署灵活、系统容量伸缩性强、运营维护成本低等众多特点;无论是电话营销中心、客户服务中心,企业只需按需租用服务,便可建立一套功能全面、稳定、可靠、座席可分布全国各地,全国呼叫接入的呼叫中心系统。

● 云游戏

云游戏是以云计算为基础的游戏方式,在云游戏的运行模式下,所有游戏都在服务器端运行,并将渲染完毕后的游戏画面压缩后通过网络传送给用户。在客户端,用户的游戏设备不需要任何高端处理器和显卡,只需要基本的视频解压能力就可以了。 就现今来说,云游戏还并没有成为家用机和掌机界的联网模式,因为至今X360仍然在使用LIVE,PS是PS NETWORK,wii是wifi。但是几年后或十几年后,云计算取代这些东西成为其网络发展的终极方向的可能性非常大。 如果这种构想能够成为现实,那么主机厂商将变成网络运营商,他们不需要不断投入巨额的新主机研发费用,而只需要拿这笔钱中的很小一部分去升级自己的服务器就行了,但是达到的效果却是相差无几的。对于用户来说,他们可以省下购买主机的开支,但是得到的确是顶尖的游戏画面(当然对于视频输出方面的硬件必须过硬)。你可以想象一台掌机和一台家用机拥有同样的画面,家用机和我们今天用的机顶盒一样简单,甚至家用机可以取代电视的机顶盒而成为次时代的电视收看方式。

● 云教育

视频云计算应用在教育行业的实例:流媒体平台采用分布式架构部署,分为web服务器、数据库服务器、直播服务器和流服务器,如有必要可在信息中心架设采集工作站搭建网络电视或实况直播应用,在各个学校已经部署录播系统或直播系统的教室配置流媒体功能组件,这样录播实况可以实时传送到流媒体平台管理中心的全局直播服务器上,同时录播的学校也可以上传存储到信息中心的流存储服务器上,方便今后的检索、点播、评估等。

● 云会议

云会议是基于云计算技术的一种高效、便捷、低成本的会议形式。使用者只需要通过互联网界面,进行简单易用的操作,便可快速高效地与全球各地团队及客户同步分享语音、数据文件及视频,而会议中数据的传输、处理等复杂技术由云会议服务商帮助使用者进行操作。

目前国内云会议主要集中在以SAAS(软件即服务)模式为主体的服务内容,包括电话、网络、视频等服务形式,基于云计算的视频会议就叫云会议。云会议是视频会议与云计算的完美结合,带来了最便捷的远程会议体验。及时语移动云电话会议,是云计算技术与移动互联网技术的完美融合,通过移动终端进行简单的操作,提供随时随地高效地召集和管理会议。

● 云社交

云社交(Cloud Social)是一种物联网、云计算和移动互联网交互应用的虚拟社交应用模式,以建立著名的“资源分享关系图谱”为目的,进而开展网络社交,云社交的主要特征,就是把大量的社会资源统一整合和评测,构成一个资源有效池向用户按需提供服务。参与分享的用户越多,能够创造的利用价值就越大。

1.5云服务的发展历史

1.5.1云计算发展时刻表

1983年,太阳电脑提出“网络是电脑”。

2006年3月,亚马逊推出弹性计算云服务。

2006年8月9日,Google首席执行官埃里克·施密特在搜索引擎大会首次提出“云计算”的概念。Google“云端计算”源于Google工程师克里斯托弗·比希利亚所做的“Google 101”项目。

2007年10月,Google与IBM开始在美国大学校园,包括卡内基梅隆大学、麻省理工学院、斯坦福大学、加州大学伯克利分校及马里兰大学等,推广云计算的计划,这项计划希望能降低分散式计算技术在学术研究方面的成本,并为这些大学提供相关的软硬件设备及技术支持。而学生则可以通过网络开发各项以大规模计算为基础的研究计划。

2008年1月30日,Google宣布在台湾启动云计算学术计划,将与台湾台大、交大等学校合作,将这种先进的大规模、快速计算技术推广到校园。

2008年7月29日,雅虎、惠普和英特尔宣布一项涵盖美国、德国和新加坡的联合研究计划,推出云计算研究测试床,推进云计算。该计划要与合作伙伴创建6个数据中心作为研究试验平台,每个数据中心配置1400个至4000个处理器。这些合作伙伴包括新加坡资讯通信发展管理局、德国卡尔斯鲁厄大学Steinbuch计算中心、美国伊利诺伊大学香槟分校、英特尔研究院、惠普实验室和雅虎。

2008年8月3日,美国专利商标局网站信息显示,戴尔正在申请云计算商标,此举旨在加强对这一未来可能重塑技术架构的术语的控制权。戴尔在申请文件中称,云计算是“在数据中心和巨型规模的计算环境中,为他人提供计算机硬件定制制造”。

2010年3月5日,Novell与云安全联盟(CSA)共同宣布一项供应商中立计划,名为“可信任云计算计划”。

2010年7月,美国国家航空航天局和包括Rackspace、AMD、Intel、戴尔等支持厂商共同宣布OpenStack开放源代码计划,微软在2010年10月表示支持OpenStack与Windows Server 2008 R2的集成;而Ubuntu已把OpenStack加至11.04版本中。 2011年2月,思科系统正式加入OpenStack,重点研制OpenStack的网络服务。

2012年,云计算技术获得长足的发展,并和流计算技术等成为网络大数据处理的核心技术。

1.5.2云服务发展分析

云服务是继20世纪80年代大型计算机到客户端—服务器的大转变之后的又一种巨变。用户不再需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。云服务描述了一种基于互联网的新的IT服务增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。云服务主要经历了四个阶段才发展到现在这样比较成熟的水平。这四个阶段依次是电厂模式、效用计算、网格计算和云计算[2, 3]。

电厂模式阶段:电厂模式就好比是利用电厂的规模效应,来降低电力的价格,并让用户使用起来更方便,且无需维护和购买任何发电设备。

效用计算阶段:在1960年左右,当时计算设备的价格是非常高昂的,远非普通企业、学校和机构所能承受,所以很多人产生了共享计算资源的想法。1961年,人工智能之父麦肯锡在一次会议上提出了“效用计算”这个概念,其核心借鉴了电厂模式,具体目标是整合分散在各地的服务器、存储系统以及应用程序来共享给多个用户,让用户能够像把灯泡插入灯座一样来使用计算机资源,并且根据其所使用的量来付费。但由于当时整个IT产业还处于发展初期,很多强大的技术还未诞生,比如互联网等,所以虽然这个想法一直为人称道,但是总体而言没有被工业界大范围接受。

网格计算阶段:网格计算研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多低性能的计算机来处理,最后把这些计算结果综合起来攻克大问题。可惜的是,由于网格计算在商业模式、技术和安全性方面的不足,使其并没有在工程界和商业界取得预期的成功。

云计算阶段:云计算的核心与效用计算和网格计算非常类似,也是希望IT技术能像使用电力那样方便,并且成本低廉。但与效用计算和网格计算不同的是,在需求方面已经有了一定的规模,同时在技术方面也已经基本成熟了。

发展到云计算阶段,很多专家认为,云计算会改变互联网的技术基础,甚至会影响整个产业的格局。正因为如此,很多大型企业都在研究云计算技术和基于云计算的服务,亚马逊、谷歌、微软、戴尔、IBM等IT 国际巨头以及百度、阿里等国内业界都在其中。几年之内,云计算已从新兴技术发展成为当今的热点技术。从2003 年Google 公开发布的核心文件到2006 年Amazon EC2(亚马逊弹性计算云)的商业化应用,再到美国电信巨头AT&T(美国电话电报公司)推出的Synaptic Hosting(动态托管)服务,云计算从节约成本的工具到盈利的推动器,从ISP(网络服务提供商)到电信企业,已然成功地从内置的IT 系统演变成公共的服务。云计算是一个产生于IT 领域的概念,IT(Information Technology),即信息技术,包括感测技术、通信技术、计算机技术和控制技术等。在技术发展的历程中,类似于电子商务,云计算也是一个比较模糊的技术术语。这其中的一个原因是云计算可以在很多应用程序场景中运用,另外就是大量公司的商业炒作推动了这种趋势。Gartner 公司是全球最权威的技术咨询机构,它的技术成熟曲线就是根据技术发展周期理论来分析新技术的发展周期曲线(从1995 年开始每年均有报告),以帮助人们判断某种新技术是否采用。根据《2013—2017年中国云计算产业市场前瞻与投资机会分析报告》统计分析,这个曲线将技术成熟的过程划分为五个阶段:

一是萌芽期(Technology Trigger),又称感知期,人们对新技术产品和概念开始感知,并且表现出兴趣;

二是过热期(Peak of Inflated Expectations),人们一拥而上,纷纷采用这种新技术,讨论这种新技术,典型成功的案例往往会为人们的这种热情再加上把催化剂;

三是低谷期(Trough of Disillusionment),又称幻想破灭期,过度的预期,严峻的现实,往往会把人们心里的一把火浇灭;

四是复苏期(Slope of Enlightenment),又称恢复期。人们开始反思问题,并从实际出发考虑技术的价值。相比之前冷静不少;

五是成熟期(Plateau of Productivity),又称高原期。该技术已经成为一种平常。从著云台2011 年的技术成熟度报告,我们可以看到云计算已经绕过了应用上的瓶颈,开始真正“落地”。云计算如一阵飓风席卷整个IT 界,伴之而来的优势是非常明显的。2012 年更是云计算快速发展的一年,各种云技术、云方案陆续出台,无论是早期亚马逊的Cloud Drive,还是2011 年苹果公司推出的iCloud,抑或是2012 年4 月微软推出的System Center 系统等,都把目标盯紧了云计算这块大“肥肉”。

1.5.3中国的云服务技术发展

中国云计算产业分为市场准备期、起飞期和成熟期三个阶段。当前,中国云计算产业尚处于导入和准备阶段,处于大规模爆发的前夜[2]。

准备阶段(2007—2010):主要是技术储备和概念推广阶段,解决方案和商业模式尚在尝试中。用户对云计算认知度仍然较低,成功案例较少。初期以政府公共云建设为主。

起飞阶段(2010—2015):产业高速发展,生态环境建设和商业模式构建成为这一时期的关键词,进入云计算产业的“黄金机遇期”。此时期,成功案例逐渐丰富,用户了解和认可程度不断提高。越来越多的厂商开始介入,出现大量的应用解决方案,用户主动考虑将自身业务融入云。公共云、私有云、混合云建设齐头并进。

成熟阶段(2015—):云计算产业链、行业生态环境基本稳定;各厂商解决方案更加成熟稳定,提供丰富的XaaS产品。用户云计算应用取得良好的绩效,并成为IT系统不可或缺的组成部分,云计算成为一项基础设施。中国主要的云服务平台主要有:阿里云、盛大云、新浪SAE等。

参考文献

[1] Armbrust M., Fox A., Griffith R., et al. Above the Cloud: A Berkeley View of Cloud Computing. www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS200928.pdf [EB]. Retrieved Oct, 2012.

[2] 刘鹏.云计算[B].电子工业出版社,2010.

[3] 云计算定义.https://en.wikipedia.org/wiki/Cloud_computing [EB]. Retrieved Aug, 2012.

[4] The NIST Definition of Cloud Computing [R].National Institute of Standards and Technology. Retrieved 24 July 2012.

[5] Katzan H. Jr. “Cloud Software Service: Concepts, Technology, Economics” [J]. Service Science, 2009, 1(4). pp: 256269.

[6] Hassan, Qusay. “Demystifying Cloud Computing” [J]. The Journal of Defense Software Engineering, 2011.

[7] R. Buyya, J. Broberg, A.Goscinski. Cloud Computing: Principles and Paradigms[B]. New York, USA: Wiley Press. pp. 144. ISBN 978047088799+8. 2011.

[8] He, Sijin; Guo, L.; Guo, Y.; Ghanem, M. “Improving Resource Utilisation in the Cloud Environment Using Multivariate Probabilistic Models”. 2012 IEEE 5th International Conference on Cloud Computing (CLOUD). pp. 574–581. 2012.

[9] Dario Bruneo, Salvatore Distefano, Francesco Longo, Antonio Puliafito, Marco Scarpa: WorkloadBased Software Rejuvenation in Cloud Systems. IEEE Trans. Computers 62(6): 10721085, 2013.

[10] He, Sijin; L. Guo; Y. Guo; C. Wu; M. Ghanem; R. Han. “Elastic Application Container: A Lightweight Approach for Cloud Resource Provisioning”. IEEE 26th International Conference on Advanced Information Networking and Applications (AINA). pp. 1522. 2012.

[11] Vincenzo D. Cunsolo, Salvatore Distefano, Antonio Puliafito, Marco Scarpa: Volunteer Computing and Desktop Cloud: The Cloud@Home Paradigm. IEEE International Symposium on Network Computing and Applications, NCA 2009, pp. 134139, 2009.

[12] 刘云浩.物联网导论[B].科学出版社,2011.

[13] Sadalage, Pramod; Fowler, Martin. NoSQL Distilled: A Brief Guide to the Emerging World ofPolyglot Persistence. AddisonWesley,2012. 第二章云服务关键技术 第二章云服务关键技术

云服务技术是分布式技术、虚拟化技术、SOA技术等多项计算机技术的混合和发展的产物,但其本身并不等同于传统的技术,而是通过发展新的技术带来的技术革命。本章将对云服务发展中处于核心位置的技术和平台进行阐述。

2.1Google云计算技术

Google是目前世界上最大的网络搜索引擎公司。除了网络搜索服务,Google还提供包括地图、Email、Docs等多项网络服务。这些网络服务必须对网络上快速流动的海量数据进行迅速有效的处理。Google通过运用云计算技术出色地解决了其所面临的问题。Google所使用的云计算技术主要包括:MapReduce分布式编程模型[1]、GFS文件系统[2]和Bigtable海量数据库[3]。这三项技术被称为Google的三大法宝,保证了Google在大数据网络环境下的数据处理和运算能力。本文将对这三项技术做详细的介绍。

2.1.1MapReduce技术

MapReduce是一种编程模型,用于大规模数据集的并行运算。概念“Map”(映射)和“Reduce”(化简)及主要思想,都是从函数式编程语言里借鉴过来的,还有从矢量编程语言里借鉴过来的特性。MapReduce有助于编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce函数,用来保证所有映射的键值对中的每一个共享相同的键组。

简单说来,一个映射函数就是对一些独立元素组成的概念上的列表的每一个元素进行指定的操作。事实上,每个元素都是被独立操作的,而原始列表没有被更改,因为这里创建了一个新的列表来保存新的答案。这就是说,Map操作是可以高度并行的,这对高性能要求的应用以及并行计算领域的需求非常有用。

MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性。每个节点会周期性地把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。每个操作使用命名文件的原子操作以确保不会发生并行线程间的冲突。当文件被改名的时候,系统可能会把他们复制到任务名以外的另一个名字上去。

化简操作工作方式很类似,但是由于化简操作并行能力较差,主节点会尽量把化简操作调度在一个节点或者离需要操作的数据尽可能近的节点上。这个特性可以满足Google的需求,因为它们有足够的带宽,它们的内部网络没有那么多的机器。在Google,MapReduce用在非常广泛的应用程序中,包括分布grep,分布排序,web连接图反转,每台机器的词矢量,web访问日志分析,反向索引构建,文档聚类,机器学习,基于统计的机器翻译等。值得注意的是,MapReduce实现以后,被用来重新生成Google的整个索引,并取代老的ad hoc程序去更新索引。MapReduce会生成大量临时文件,为了提高效率,它利用Google文件系统来管理和访问这些文件。

2.1.1.1应用案例

Map函数:接受一个键值对(keyvalue pair),产生一组中间键值对。MapReduce框架会将Map函数产生的中间键值对里键相同的值传递给一个Reduce函数。

Reduce函数:接受一个键以及相关的一组值,将这组值进行合并产生一组规模更小的值。

统计词频的MapReduce函数的核心代码非常简短,主要就是实现这两个函数。

Map(String key, String value):

// key: document name

// value: document contents

for each word w in value:

EmitIntermediate(w, "1");

Reduce(String key, Iterator values):

// key: a word

// values: a list of counts

int result = 0;

for each v in values:

result += ParseInt(v);

Emit(AsString(result));

在统计词频的例子里,Map函数接受的键是文件名,值是文件的内容,Map逐个遍历单词。每遇到一个单词w,就产生一个中间键值对,这表示单词w又找到了一个;MapReduce将键相同的键值对传给Reduce函数,这样Reduce函数接受的键就是单词w,值是一串“1”,个数等于键为w的键值对的个数,然后将这些“1”累加就得到单词w的出现次数。最后这些单词的出现次数会被写到用户定义的位置,存储在底层的分布式存储系统。

2.1.1.2技术流程

MapReduce的实现需要和用户程序互相联系,由用户程序对文件进行输入,如图2.1所示主要需要以下几个步骤:

图2.1MapReduce框架图

MapReduce库先把用户程序的输入文件划分为M份,M为用户定义,每一份通常有16MB到64MB,然后使用fork将用户进程拷贝到集群内其他机器上。

用户程序的副本中有一个称为Master,其余称为worker,Master是负责调度的,为空闲worker分配作业,worker的数量也是可以由用户指定的。

被分配了Map作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split对应;Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给Map函数,Map函数产生的中间键值对被缓存在内存中。

缓存的中间键值对会被定期写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;这些中间键值对的位置会被通报给Master,Master负责将信息转发给Reduce worker。

Master通知分配了Reduce作业的worker其所负责的分区在什么位置,当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业,所以排序是必须的。

Reduce worker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给Reduce函数,Reduce函数产生的输出会添加到这个分区的输出文件中。

当所有的Map和Reduce作业都完成了,Master唤醒正版的user program,MapReduce函数调用返回user program的代码。

所有执行完毕后,MapReduce输出放在了R个分区的输出文件中(分别对应一个Reduce作业)。用户通常并不需要合并这R个文件,而是将其作为输入交给另一个MapReduce程序处理。整个过程中,输入数据是来自底层分布式文件系统(GFS)的,中间数据是放在本地文件系统的,最终输出数据是写入底层分布式文件系统的。而且我们要注意Map/Reduce作业和Map/Reduce函数的区别:Map作业处理一个输入数据的分片,可能需要调用多次Map函数来处理每个输入键值对;Reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次Reduce函数,Reduce作业最终也对应一个输出文件。

2.1.2GFS技术

GFS的全称是Google File System,为了满足Google迅速增长的数据处理要求,Google设计并实现的Google文件系统(GFS)。Google文件系统是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务,也可以提供容错功能。

GFS在很多方面上与之前出现过的分布式文件系统有着许多相似的地方,比如性能、可扩展性、可靠性和可用性。但是,它的设计更多地基于Google的应用的特性和技术环境,因此也与之前的文件系统设计有着显著的不同。Google仔细地考察过传统的取舍,并且在设计空间中对各种不同方案做了深入的研究。

GFS与以往文件系统所不同的特点如下:

第一,部件错误不再被当作异常,而是将其作为常见的情况加以处理。因为文件系统由成百上千个用于存储的机器构成,而这些机器是由廉价的普通部件组成并被大量的客户机访问。部件的数量和质量使得一些机器随时都有可能无法工作并且有一部分还可能无法恢复。所以实时地监控、错误检测、容错、自动恢复对系统来说必不可少。

第二,按照传统的标准,文件都非常大。长度达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理快速增长的、包含数以万计的对象、长度达TB的数据集时,传统的文件系统很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。

第三,大部分文件的更新是通过添加新数据完成的,而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流,有些是档案性质的数据,有些是在某个机器上产生、在另外一个机器上处理的中间数据。

由于这些对大型文件的访问方式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。

第四,工作量主要由两种读操作构成:对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百kB,通常达1MB 或更多。来自同一个客户的连续操作通常会读文件的一个连续的区域。随机的读操作通常在一个随机的偏移处读几个kB。性能敏感的应用程序通常将对少量数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来来回回地读。

第五,GFS工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。在随机位置对少量数据的写操作也支持,但不必非常高效。系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。

2.1.2.1技术特性

GFS提供了一个相似的文件系统界面,虽然它没有像工业界标准的POSIX那样实现标准的API。文件在目录中按层次组织起来并由路径名标识。一个GFS集群由一个Master和大量的ChunkServer构成,并被许多客户访问。Master和 ChunkServer通常是运行用户层服务进程的Linux机器。只要资源和可靠性允许,ChunkServer和Client可以运行在同一个机器上。文件被分成固定大小的块。每个块由一个不变的、全局唯一的64位的chunkhandle标识,chunkhandle是在块创建时由Master分配的。ChunkServer将块当作Linux文件存储在本地磁盘并可以读和写由chunkhandle和位区间指定的数据。出于可靠性考虑,每一个块都被复制到多个ChunkServer上。默认情况下,保存3个副本,但这可以由用户,即Client程序指定。

Master维护文件系统所有的元数据,包括名字空间、访问控制信息、从文件到块的映射以及块的当前位置。它也控制系统范围的活动,如块租约管理、孤儿块的垃圾收集、ChunkServer间的块迁移。Master定期通过HeartBeat消息与每一个 ChunkServer通信,给ChunkServer传递指令并收集它的状态。

与每个应用相联的GFS客户代码实现了文件系统的API并与Master和ChunkServer通信以代表应用程序读和写数据。客户与Master的交换只限于对元数据的操作,所有数据方面的通信都直接和ChunkServer联系。

客户和ChunkServer都不缓存文件数据。因为用户缓存的益处微乎其微,这是由于数据太多或工作集太大而无法缓存。不缓存数据简化了客户程序和整个系统,因为不必考虑缓存的一致性问题,但用户缓存元数据。ChunkServer也不必缓存文件,因为块是作为本地文件存储的。

只有一个Master也极大地简化了设计并使得Master可以根据全局情况做出先进的块放置和复制决定。但是我们必须要将Master对读和写的参与减至最少,这样它才不会成为系统的瓶颈。Client从来不会从Master读和写文件数据。Client只是询问Master它应该和哪个 ChunkServer联系。Client在一段限定的时间内将这些信息缓存,在后续的操作中Client直接和ChunkServer交互。

Client有以下几点特性:

Client使用固定的块大小将应用程序指定的文件名和字节偏移转换成文件的一个块索引(chunk index)。

给Master发送一个包含文件名和块索引的请求。

Master回应对应的chunk handle和副本的位置(多个副本)。

Client以文件名和块索引为键缓存这些信息(handle和副本的位置)。

Client向其中一个副本发送一个请求,很可能是最近的一个副本。请求指定了chunk handle(ChunkServer以chunk handle标识chunk)和块内的一个字节区间。

除非缓存的信息不再有效(cache for a limited time)或文件被重新打开,否则以后对同一个块的读操作不再需要Client和Master间的交互。

通常Client可以在一个请求中询问多个chunk的地址,而Master也可以很快回应这些请求。

块规模是设计中的一个关键参数。GFS选择的是64MB,这比一般的文件系统的块规模要大得多。每个块的副本作为一个普通的Linux文件存储,在需要的时候可以扩展。

块规模较大的好处是减少Client和Master之间的交互。因为读写同一个块只要在开始时向Master请求块位置信息。对于读写大型文件来说,这种减少尤为重要。即使对于访问少量数据的随机读操作也可以很方便地为一个规模达几个TB的工作集缓存块位置信息。

Client在一个给定的块上很可能执行多个操作,和一个ChunkServer保持较长时间的TCP连接可以减少网络负载。这减少了Master上保存的元数据的规模,从而使得可以将元数据放在内存中。

Master存储了三种类型的元数据:文件的名字空间和块的名字空间,从文件到块的映射,块的副本的位置。所有的元数据都放在内存中。前两种类型的元数据通过向操作日志登记修改而保持不变,操作日志存储在Master的本地磁盘并在几个远程机器上留有副本。使用日志使得程序员可以很简单地、可靠地更新Master的状态,即使在Master崩溃的情况下也不会有不一致的问题。相反,Master在每次启动以及当有ChunkServer加入的时候询问每个ChunkServer的所拥有的块的情况。

2.1.2.2GFS工作流程

下面简单描述一下GFS文件系统的工作流程,如图2.2所示:

图2.2GFS体系结构

客户端使用固定大小的块将应用程序指定的文件名和字节偏移转换成文件的一个块索引,向Master发送包含文件名和块索引的请求;

Master收到客户端发来的请求,向块服务器发出指示,同时时刻监控众多ChunkServer的状态。ChunkServer缓存Master从客户端收到的文件名和块索引等信息;

Master通过和ChunkServer的交互,向客户端发送chunkhandle和副本位置。其中文件被分成若干个块,而每个块都是由一个不变的,全局唯一的64位的chunkhandle标识。Handle是由Master在块创建时分配的。而出于安全性考虑,每一个文件块都要被复制到多个ChunkServer上,一般默认3个副本;

客户端向其中的一个副本发出请求,请求指定了chunk handle和块内的一个字节区间;

客户端从ChunkServer获得块数据,任务完成。

通常Client可以在一个请求中询问多个chunk的地址,而Master也可以很快回应这些请求。

GFS文件系统是可以被多个用户同时访问的,一般情况下,Application和ChunkServer是可以在同一台机子上的,主要的数据流量是通过 Application和ChunkServer之间,由于数据访问的本地性极大地减少了Application与Master之间的交互访问,减少了 Master的负荷量,提高了文件系统的性能。

客户端从来不会从Master读和写文件数据。客户端只是询问Master它应该和哪个 ChunkServer联系。Client在一段限定的时间内将这些信息缓存,在后续的操作中客户端直接和ChunkServer交互。由于Master对于读和写的操作极少,所以极大地减小了Master的工作负荷,真正提高了Master的利用性能。

Master为GFS的控制和神经系统,副本为Master的备份,Chunk主要用来和用户交换数据。网络中的主机瘫痪,不会对整个系统造成大的影响,替换上去的主机会自动重建数据。即使Master的瘫痪,也会有Shadow作为替补,并且Shadow在一定时候也会充当Master来提供控制和数据交换。Google每天有大量的硬盘损坏,但是由于GFS系统,这些硬盘的损坏是允许的。

2.1.2.3数据交互

Master和ChunkSever间的数据交流包括以下几点:

第一,内存数据结构。

因为元数据存储在内存中,所以Master的操作很快。进一步,Master可以轻易而且高效地定期在后台扫描它的整个状态。这种定期扫描被用于实现块垃圾收集、ChunkServer出现故障时的副本复制、为平衡负载和磁盘空间而进行的块迁移。

这种方法的一个潜在的问题就是块的数量也即整个系统的容量是否受限于Master的内存。实际上,这并不是一个严重的问题。Master为每个 64MB的块维护的元数据不足64个字节。除了最后一块,文件所有的块都是满的。类似的,每个文件的名字空间数据也不足64个字节,因为文件名是以一种事先确定的压缩方式存储的。如果要支持更大的文件系统,那么增加一些内存的方法对于用户将元数据保存在内存中所获得的简单性、可靠性、高性能和灵活性来说,只是一个很小的代价。

第二,块位置。

Master并不为ChunkServer所拥有的块的副本保存一个不变的记录。它在启动时通过简单的查询来获得这些信息。Master可以保持这些信息的更新,因为它控制所有块的放置并通过HeartBeat消息来监控ChunkServer的状态。

这样做的好处是因为ChunkServer可能加入或离开集群、改变路径名、崩溃、重启等,一个集群有成百个server,这些事件经常发生,这种方法就排除了Master与ChunkServer之间的同步问题。

另一个原因是只有ChunkServer才能确定它自己到底有哪些块,由于错误,ChunkServer中的一些块可能会很自然地消失,这样在Master中就没有必要为此保存一个不变的记录。

第三,操作日志。

操作日志包含了对元数据所做的修改的历史记录。它作为逻辑时间线定义了并发操作的执行顺序。文件、块以及它们的版本号都由它们被创建时的逻辑时间而唯一地、永久地被标识。

操作日志非常重要,因此必须要将它可靠地保存起来,并且只有在元数据的改变固定下来之后才将变化呈现给用户。所以GFS将操作日志复制到数个远程的机器上,并且只有在将相应的日志记录写到本地和远程的磁盘上之后才回答用户的请求。

Master可以用操作日志来恢复它的文件系统的状态。为了将启动时间减至最小,日志就必须要比较小。每当日志的长度增长到超过一定的规模后,Master就要检查它的状态,它可以从本地磁盘装入最近的检查点来恢复状态。

创建一个检查点比较费时,Master的内部状态是以一种在创建一个检查点时并不耽误即将到来的修改操作的方式来组织的。Master切换到一个新的日志文件并在一个单独的线程中创建检查点。这个新的检查点记录了切换前所有的修改。在一个有数十万文件的集群中用一分钟左右就能完成。创建完后,将它写入本地和远程的磁盘。

第四,数据完整性。

名字空间的修改必须是原子性的,它们只能由Master处理,名字空间锁保证了操作的原子性和正确性,而Master的操作日志在全局范围内定义了这些操作的顺序。

文件区间的状态在修改之后依赖于修改的类型,不论操作成功还是失败,也不论是不是并发操作。如果不论从哪个副本上读,所有的客户都看到同样的数据,那么文件的这个区域就是一致的。如果文件的区域是一致的并且用户可以看到修改操作所写的数据,那么它就是已定义的。如果修改是在没有并发写操作的影响下完成的,那么受影响的区域是已定义的,所有的Client都能看到写的内容。成功的并发写操作未定义但是一致。失败的修改将使区间处于不一致的状态。

Write操作在应用程序指定的偏移处写入数据,而record append操作使得数据即使在有并发修改操作的情况下也至少可以原子性地被加到GFS指定的偏移处,偏移地址被返回给用户。

在一系列成功的修改操作后,最后的修改操作保证文件区域是已定义的。GFS通过对所有的副本执行同样顺序的修改操作并且使用块版本号检测过时的副本来做到这一点。

因为用户缓存了位置信息,所以在更新缓存之前有可能从一个过时的副本中读取数据。但这因缓存的截止时间和文件的重新打开而受到限制。

在修改操作成功后,部件故障仍可以是数据受到破坏。GFS通过Master和ChunkServer间定期的handshake,借助校验和来检测对数据的破坏。一旦检测到,就从一个有效的副本尽快重新存储。只有在GFS检测前,所有的副本都失效,这个块才会丢失。

2.1.2.4系统交互

GFS的设计目标是充分利用每个机器的网络带宽,避免网络瓶颈和延迟即为了有效地利用网络,因此GFS将数据流和控制流分离。数据是以流水线的方式在选定的ChunkServer链上线性传递的。每个机器的整个对外带宽都被用作传递数据。为避免瓶颈,每个机器在收到数据后,即将它收到的数据尽快传递给离它最近的机器。

GFS提供了一个原子性的添加操作record append。在传统的写操作中,Client指定被写数据的偏移位置,向同一个区间的并发的写操作是不连续的,区间有可能包含来自多个Client的数据碎片。在record append中,Client只是指定数据。GFS在其选定的偏移出将数据至少原子性地加入文件一次,并将偏移返回Client。

在分布式的应用中,不同机器上的许多Client可能会同时向一个文件执行添加操作,添加操作被频繁使用。如果用传统的write操作,可能需要额外的、复杂的、开销较大的同步, 例如通过分布式锁管理。在GFS中,这些文件通常以多个生产者单个消费者队列的方式或包含从多个不同Client的综合结果。

Record append和前面讲的write操作的控制流差不多,只是在primary上多了一些逻辑判断。首先,Client将数据发送到文件最后一块的所有副本上。然后向primary发送请求。Primary检查添加操作是否会导致该块超过最大的规模(64M)。如果这样,它将该块扩充到最大规模,并告诉其他副本做同样的事,同时通知Client该操作需要在下一个块上重新尝试。如果记录满足最大规模的要求,primary就会将数据添加到它的副本上,并告诉其他的副本在同样的偏移处写数据,最后primary向Client报告写操作成功。如果在任何一个副本上record append操作失败,Client将重新尝试该操作。这时候,同一个块的副本可能包含不同的数据,因为有的可能复制了全部的数据,有的可能只复制了部分。GFS不能保证所有的副本每个字节都是一样的。它只保证每个数据作为一个原子单元被写过至少一次。这个结论是这样得出的:操作要想成功,数据必须在所有的副本上同样的偏移处被写过。进一步,从这以后,所有的副本至少和记录一样长,所以后续的记录将被指定到更高的偏移处或者一个不同的块上,即使另一个副本成了primary。根据一致性保证,成功的record append操作的区间是已定义的,而受到干扰的区间是不一致的。

快照操作几乎在瞬间构造一个文件和目录树的副本,同时将正在进行的其他修改操作对它的影响减至最小。一般使用copyonwrite技术来实现snapshot。当Master受到一个snapshot请求时,它首先将要snapshot的文件上块上的lease。这使得任何一个向这些块写数据的操作都必须和Master交互以找到拥有lease的副本。这就给Master一个创建这个块的副本的机会。副本被撤销或终止后,Master在磁盘上登记执行的操作,然后复制源文件或目录树的元数据以对它的内存状态实施登记的操作。这个新创建的snapshot文件和源文件(其元数据)指向相同的块。

Snapshot之后,客户第一次向chunk c写的时候,它发一个请求给Master以找到拥有lease的副本。Master注意到chunk c的引用记数比1大,它延迟对用户的响应,选择一个chunk handle c′,然后要求每一有chunk c的副本的ChunkServer创建一个块c′。每个ChunkServer在本地创建chunk c′避免了网络开销。从这以后和对别的块的操作没有什么区别。

2.1.2.5Master操作

Master执行所有名字空间的操作,除此之外,它还在系统范围管理数据块的复制:决定数据块的放置方案,产生新数据块并将其备份,和其他系统范围的操作协同来确保数据备份的完整性,在所有的数据块服务器之间平衡负载并收回没有使用的存储空间。

第一,名字空间管理和加锁。

与传统文件系统不同的是,GFS没有与每个目录相关的能列出其所有文件的数据结构,它也不支持别名(unix中的硬连接或符号连接),不管是对文件或是目录。GFS的名字空间逻辑上是从文件元数据到路径名映射的一个查用表。

Master在执行某个操作前都要获得一系列锁,例如,它要对/d1/d2…/dn/leaf执行操作,则它必须获得/d1,/d1/d2,…, /d1/d2/…/dn的读锁,/d1/d2…/dn/leaf的读锁或写锁。Master操作的并行性和数据的一致性就是通过这些锁来实现的。

第二,备份存储放置策略。

一个GFS集群文件系统可能是多层分布的。一般情况下是成千上万个文件块服务器分布于不同的机架上,而这些文件块服务器又被分布于不同机架上的客户来访问。因此,不同机架上的两台机器之间的通信可能通过一个或多个交换机。数据块冗余配置策略要达到两个目的:最大的数据可靠性和可用性,最大的网络带宽利用率。因此,如果仅仅把数据的拷贝置于不同的机器上很难满足这两个要求,必须在不同的机架上进行数据备份。这样即使整个机架被毁或是掉线,也能确保数据的正常使用。这也使数据传输,尤其是读数据,可以充分利用带宽,访问多个机架,而写操作,则不得不涉及更多的机架。

第三,产生、重复制、重平衡数据块。

当Master产生新的数据块时,如何放置新数据块,要考虑如下几个因素:尽量放置在磁盘利用率低的数据块服务器上,这样,慢慢地各服务器的磁盘利用率就会达到平衡。尽量控制在一个服务器上的“新创建”的次数。由于上一小节讨论的原因,我们需要把数据块放置于不同的机架上。

Master在可用的数据块备份低于用户设定的数目时需要进行重复制。这种情况源于多种原因:服务器不可用,数据被破坏,磁盘被破坏,或者备份数目被修改。每个被需要重复制的数据块的优先级根据以下几项确定:首先是现在的数目距目标的距离,对于能阻塞用户程序的数据块,需提高它的优先级。然后,Master按照产生数据块的原则复制数据块,并把它们放到不同的机架内的服务器上。

Master周期性的平衡各服务器上的负载:它检查 chunk分布和负载平衡,通过这种方式来填充一个新的服务器而不是把其他的内容统统放置到它上面带来大量的写数据。数据块放置的原则与上面讨论的相同。此外,Master还决定那些数据块要被移除,原则上它会清除那些空闲空间低于平均值的服务器。

第四,垃圾收集。

在一个文件被删除之后,GFS并不立即收回磁盘空间,而是等到垃圾收集程序在文件和数据块级的检查中收回。

当一个文件被应用程序删除之后,Master会立即记录下这些变化,但文件所占用的资源不会被立即收回,而是重新给文件命名一个隐藏的名字,并附上删除的时间戳。在Master定期检查名字空间时,它删除超过三天(可以设定)的隐藏文件。在此之前,可以以一个新的名字来读文件,还可以以前的名字恢复。当隐藏的文件在名字空间中被删除以后,它在内存中的元数据即被擦除,这就有效地切断了它和所有数据块的联系。

在一个相似的定期的名字空间检查中,Master确认孤儿数据块(不属于任何文件)并擦除它的元数据,在和Master的心跳信息交换中,每个服务器报告它所拥有的数据块,Master返回元数据不在内存的数据块,服务器即可以删除这些数据块。

第五,过时数据的探测。

在数据更新时,如果服务器停机了,那么它所保存的数据备份就会过时。对每个数据块,Master都设置了一个版本号来区别更新过的数据块和过时的数据块。当 Master授权一个新的lease时,它会增加数据块的版本号并会通知更新数据备份。Master和备份都会记录下当前的版本号,如果一个备份当时不可用,那么它的版本号不可能提高,当ChunkServer重新启动并向Master报告它的数据块集时,Master就会发现过时的数据。

Master在定期的垃圾收集程序中清除过时的备份,在此以前,出于效率考虑,它会认为根本不存在过时的数据。作为另一个安全措施, Master在给客户及关于数据块的应答或是另外一个读取数据的服务器数据时都会带上版本信息,在操作前客户机和服务器会验证版本信息以确保得到的是最新的数据。

2.1.2.6容错和诊断

第一,高可靠性。

● 快速恢复

不管如何终止服务,Master和数据块服务器都会在几秒钟内恢复状态和运行。实际上,GFS不对正常终止和不正常终止进行区分,服务器进程都会被切断而终止。客户机和其他的服务器会经历一个小小的中断,然后它们的特定请求超时,重新连接重启的服务器,重新请求。

● 数据块备份

如上文所讨论的,每个数据块都会被备份到不同机架上的不同服务器上。对不同的名字空间,用户可以设置不同的备份级别。在数据块服务器掉线或是数据被破坏时,Master会按照需要来复制数据块。

● Master备份

为确保可靠性,Master的状态、操作记录和检查点都在多台机器上进行了备份。一个操作只有在数据块服务器硬盘上刷新并被记录在Master和其备份上之后才算是成功的。如果Master或是硬盘失败,系统监视器会发现并通过改变域名启动它的一个备份机,而客户机则仅仅是使用规范的名称来访问,并不会发现Master的改变。

第二,数据完整性。

每个数据块服务器都利用校验和来检验存储数据的完整性。因为每个服务器随时都有发生崩溃的可能性,并且在两个服务器间比较数据块也是不现实的。同时,在两台服务器间拷贝数据并不能保证数据的一致性。每个Chunk按64 kB 的大小分成块,每个块有32位的校验和,校验和与日志存储在一起,与用户数据分开。

在读数据时,服务器首先检查与被读内容相关部分的校验。因此,服务器不会传播错误的数据。如果所检查的内容和校验和不符,服务器就会给数据请求者返回一个错误的信息,并把这个情况报告给Master。客户机就会读其他的服务器来获取数据,而Master则会从其他的拷贝来复制数据,等到一个新的拷贝完成时,Master就会通知报告错误的服务器删除出错的数据块。

附加写数据时的校验和计算优化了,因为这是主要的写操作。GFS只是更新增加部分的校验和,即使末尾部分的校验和数据已被损坏而GFS没有检查出来,新的校验和与数据会不相符,这种冲突在下次使用时将会被检查出来。

相反,如果是覆盖现有数据的写,在写以前,GFS必须检查第一和最后一个数据块,然后才能执行写操作,最后计算和记录校验和。如果我们在覆盖以前不先检查首位数据块,计算出的校验和则会因为没被覆盖的数据而产生错误。

在空闲时间,服务器会检查不活跃的数据块的校验和,这样可以检查出不经常读的数据的错误。一旦错误被检查出来,服务器就会拷贝一个正确的数据块来代替错误的。

第三,诊断工具。

广泛而细致的诊断日志以微小的代价换取了在问题隔离、诊断、性能分析方面起到的重大作用。GFS服务器用日志来记录显著的事件(例如服务器停机和启动)和远程的应答。远程日志记录机器之间的请求和应答,通过收集不同机器上的日志记录,并对它们进行分析恢复,GFS可以完整地重现活动的场景,并用此来进行错误分析。

2.1.2.7GFS文件系统的商业竞争优势

当然,作为Google的技术基石,GFS可以给大量的用户提供总体性能较高的服务,包括:

Google采用的存储方法是大量的、分散的普通PC机的存储方式,极大降低了成本;

对大文件数据快速的存取,这个毫无疑问是可以达到的;

容易扩展,它是成本很低的普通电脑,支持动态的插入节点;

容错能力强,它的数据同时会在多个chunk server上进行备份,具有相当强的容错性;

高效访问,它是通过Bigtable来实现的,是GFS上层的结构。GFS在实现分布式文件系统的做法上面很多都是简单的,但是确实非常高效。

GFS文件系统稳定性是毋庸置疑的,很多生产环境都在应用,虽然性能不是最优,但是应用与网络大数据的环境已经足够。不过GFS也有缺陷,GFS提供了一个类似的文件系统界面,它没有像POSIX那样标准地实现API。文件在目录中按层次组织起来并有路径名标示。这些难题仍然有待解决。

2.1.3Bigtable技术

Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上,如从URL到网页到卫星图像;还是在响应速度上,如从后端的批量处理到实时数据服务。尽管应用需求差异很大,但是针对Google的这些产品,Bigtable还是成功地提供了一个灵活的、高性能的解决方案。

Bigtable的设计目的是可靠地处理PB级别的数据,并且能够部署到上千台机器上。Bigtable已经实现了下面的几个目标:适用性广泛、可扩展、高性能和高可用性。Bigtable已经在超过60个Google的产品和项目上得到了应用,包括 Google Analytics、Google Finance、Orkut、Personalized Search、Writely和Google Earth。这些产品对Bigtable提出了迥异的需求:有的需要高吞吐量的批处理,有的则需要及时响应,快速返回数据给最终用户。它们使用的Bigtable集群的配置也有很大的差异:有的集群只有几台服务器,有的则需要上千台服务器、存储几百TB的数据。

在很多方面,Bigtable和数据库很类似:它使用了很多数据库的实现策略。并行数据库和内存数据库已经具备可扩展性和高性能。但是Bigtable提供了一个和这些系统完全不同的接口。Bigtable不支持完整的关系数据模型;与之相反,Bigtable为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式,用户也可以自己推测底层存储数据的位置相关性。数据的下标是行和列的名字,名字可以是任意的字符串。Bigtable将存储的数据都视为字符串,但是Bigtable本身不去解析这些字符串,客户程序通常会把各种结构化或者半结构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可以控制数据的位置相关性。最后,可以通过BigTable的模式参数来控制数据是存放在内存中还是硬盘上。

2.1.3.1数据模型

Bigtable是一个稀疏的、分布式的、持久化存储的多维度排序Map。Map的索引是行关键字、列关键字以及时间戳;Map中的每个value都是一个未经解析的byte数组。(row:string,column:string,time:int64)→string。表中的行关键字可以是任意的字符串。对同一个行关键字的读或者写操作都是原子的,不管读或者写这一行里多少个不同列,这个设计决策能够使用户很容易地理解程序在对同一个行进行并发更新操作时的行为。

Bigtable不是关系型数据库,但是沿用了很多关系型数据库的术语,像table(表)、row(行)、column(列)等。这容易让读者误入歧途,将其与关系型数据库的概念对应起来。本质上说,Bigtable是一个键值(keyvalue)映射。Bigtable通过行关键字(key)的字典顺序来组织数据。Bigtable的键有三维,分别是行键(row key)、列键(column key)和时间戳(timestamp),行键和列键都是字节串,时间戳是64位整型;而值是一个字节串。可以用 (row:string, column:string, time:int64)→string 来表示一条键值对记录。

行键可以是任意字节串,通常有10—100字节。行的读写都是原子性的。Bigtable按照行键的字典序存储数据。Bigtable的表会根据行键自动划分为分区,每个分区叫作一个“Tablet”,Tablet是数据分布和负载均衡调整的最小单位。最初表都只有一个分区,但随着表不断增大,分区会自动分裂,分区的大小控制在100 MB—200MB。这样做的结果是,当操作只读取行中很少几列的数据时效率很高,通常只需要很少几次机器间的通信即可完成。用户可以通过选择合适的行关键字,在数据访问时有效利用数据的位置相关性,从而更好地利用这个特性。

列是第二级索引,每行拥有的列是不受限制的,可以随时增加减少。为了方便管理,列被分为多个列族,列族是访问控制的基本单位。一个列族里的列一般存储相同类型的数据,便于数据的压缩和保存。一行的列族很少变化,但是列族里的列可以随意添加删除。列键按照family:qualifier格式命名。列族在使用之前必须先创建,然后才能在列族中任何列关键字下存放数据;列族创建后,其中任何一个列关键字下都可以存放数据。

列关键字的命名语法如下——列族:限定词。列族的名字必须是可打印的字符串,而限定词的名字可以是任意的字符串。比如,Webtable有个列族language,language 列族用来存放撰写网页的语言。访问控制、磁盘和内存的使用统计都是在列族层面进行的。

时间戳是第三级索引。在Bigtable中,表的每一个数据项都可以包含同一份数据的不同版本;不同版本的数据通过时间戳来索引。Bigtable可以给时间戳赋值,用来表示精确到毫秒的“实时”时间,代表数据进入Bigtable的时间,也可以由客户端赋值。如果应用程序需要避免数据版本冲突,那么它必须自己生成具有唯一性的时间戳。数据项中,不同版本的数据按照时间戳倒序排序,即最新的数据排在最前面,因此先读到的是最新版本的数据。

在Webtable的应用实例中,contents:列存储的时间戳信息是网络爬虫抓取一个页面的时间。上面提及的垃圾收集机制可以只保留最近三个版本的网页数据。

Bigtable提供了建立和删除表以及列族的API函数。Bigtable还提供了修改集群、表和列族的元数据的API,比如修改访问权限。

// Open the table

Table *T = OpenOrDie("/bigtable/web/webtable");

// Write a new anchor and delete an old anchor

RowMutation r1(T, "com.cnn.www");

r1.Set("anchor:www.cspan.org", "CNN");

r1.Delete("anchor:www.abc.com");

Operation op;

Apply(&op, &r1)

客户程序可以对Bigtable进行如下操作:写入或者删除Bigtable中的值,从每个行中查找值,或者遍历表中的一个数据子集。调用Apply函数对Webtable进行了一个原子修改操作:它为www.cnn.com增加了一个锚点,同时删除了另外一个锚点。

Scanner scanner(T);

ScanStream *stream;

stream = scanner.FetchColumnFamily("anchor");

stream->SetReturnAllVersions();

scanner.Lookup("com.cnn.www");

for (; !stream->Done(); stream->Next()) {

printf("%s %s %lld %s\\n",

scanner.RowName(),

stream->ColumnName(),

stream->MicroTimestamp(),

stream->Value());

}

C++代码使用Scanner抽象对象遍历一个行内的所有锚点。客户程序可以遍历多个列族,有几种方法可以对扫描输出的行、列和时间戳进行限制。

再来看看Bigtable的其他特征:持久化、分布式、稀疏。持久化的意思是Bigtable的数据最终会以文件的形式放到GFS上。Bigtable建立在GFS之上本身就意味着分布式,当然分布式的意义还不仅限于此。稀疏的意思是,一个表里不同的行,列可能完完全全不一样。

Bigtable还支持一些其他的特性,利用这些特性,用户可以对数据进行更复杂的处理。首先,Bigtable支持单行上的事务处理,利用这个功能,用户可以对存储在一个行关键字下的数据进行原子性的读—更新—写操作。虽然Bigtable提供了一个允许用户跨行批量写入数据的接口,但是,Bigtable目前还不支持通用的跨行事务处理。其次,Bigtable允许把数据项用做整数计数器。最后,Bigtable允许用户在服务器的地址空间内执行脚本程序。脚本程序使用Google开发的Sawzall数据处理语言。

2.1.3.2Bigtable技术支持

Bigtable是建立在其他几个Google基础构件上的。Bigtable使用Google的分布式文件系统(GFS)存储日志文件和数据文件。Bigtable集群通常运行在一个共享的机器池中,池中的机器还会运行其他的各种各样的分布式应用程序,Bigtable的进程经常要和其他应用的进程共享机器。Bigtable依赖集群管理系统来调度任务、管理共享的机器上的资源、处理机器的故障以及监视机器的状态。

Bigtable内部存储数据的文件是Google SSTable格式的。SSTable的全称是Sorted Strings Table,是一种不可修改的有序的键值映射,提供了查询、遍历等功能。SSTable是一个持久化的、排序的、不可更改的Map结构,而Map是一个keyvalue 映射的数据结构,key和value的值都是任意的Byte串。可以对SSTable进行如下的操作:查询与一个key值相关的value,或者遍历某个 key值范围内的所有的keyvalue对。从内部看,SSTable是一系列的数据块,Bigtable将块默认设为64 kB。SSTable使用块索引,通常存储在SSTable的最后,来定位数据块;在打开SSTable的时候,索引被加载到内存。每次查找都可以通过一次磁盘搜索完成,首先使用二分查找法在内存中的索引里找到数据块的位置,然后再从硬盘读取相应的数据块。也可以选择把整个SSTable都放在内存中,这样就不必访问硬盘了。在SSTable的尾部存储着块索引,在访问SSTable时,整个索引会被读入内存。每一个Tablet在GFS里都是按照SSTable的格式存储的,每个Tablet可能对应多个SSTable。

Bigtable还依赖一个高可用的、序列化的分布式锁服务组件,叫作Chubby[4]。一个Chubby服务包括了5个活动的副本,其中的一个副本被选为Master,并且处理请求。只有在大多数副本都是正常运行的,并且彼此之间能够互相通信的情况下,Chubby服务才是可用的。当有副本失效的时候,Chubby使用Paxos算法来保证副本的一致性。Chubby提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁,读写文件的操作都是原子的。Chubby客户程序库提供对Chubby文件的一致性缓存。每个Chubby客户程序都维护一个与Chubby服务的会话。如果客户程序不能在租约到期的时间内重新签订会话的租约,这个会话就过期失效了。当一个会话失效时,它拥有的锁和打开的文件句柄都失效了。Chubby客户程序可以在文件和目录上注册回调函数,当文件或目录改变或者会话过期时,回调函数会通知客户程序。