宝贝我爱你 Good Luck To You!

云计算

第一章云计算概述

一、云计算的源起

云计算起源于外星人,你信吗?你一定是科幻片看多了。

其实是SETI项目,由美国宇航局和加州大学伯克利分校发起,运用后来被称作网格计算的技术。到项目网站下一个客户端,你机器闲的时候,开始下载SETI服务器端的分割好的实时天文数据(从射电望远镜和哈勃太空望远镜),然后计算,将结果返给SETI。

 

二、什么是云计算

1、 定义

1)定义1:加州伯克利大学云计算白皮书

云计算既包含互联网上的应用服务,也包含在数据中心提供这些服务的软硬件设施。互联网上的应用服务通常被称作SaaS(Software as a Service,软件即服务),而数据中心的软硬件设施就是我们称作的云(Cloud)。

2)定义2:Wikipedia

云计算(Cloud Computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。整个运行方式很像电网。

云计算是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变。用户不再需要了解”云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。

云其实是网络、互联网的一种比喻说法。因为过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。典型的云计算提供商往往提供通用的网络业务应用,可以通过浏览器等软件或者其他Web服务来访问,而软件和数据都存储在服务器上。云计算关键的要素,还包括个性化的用户体验。

云计算可以认为包括以下几个层次的服务:基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。云计算服务通常提供通用的通过浏览器访问的在线商业应用,软件和数据可存储在数据中心。

 

三、云计算的层次划分

如图1.3.1所示,云计算分四个层,分别为

1、 IaaS:基础设施即服务

IaaS(Infrastructure-as-a- Service):基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务。

2、 PaaS:平台即服务

PaaS(Platform-as-a- Service):平台即服务。PaaS实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。

3、 SaaS:软件即服务

SaaS(Software-as-a- Service):软件即服务。它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。

4、 DaaS:数据即服务

DaaS(Data-as-a-Service):数据即服务.它是最近提出的新概念,主要是数据的存储、分析、挖掘服务,从层次上看是paas的范畴,当数据又是saas产生的。

 

 

图1.3.1 云计算层次图

 

四、总结

看了前面一堆的定义和解释,相信已经云里雾里了。那到底什么是云计算?

云计算是个商业概念,把专业化IT能力向普通大众和企业进行贩卖

背后的技术早已存在,云计算将其从象牙塔里领出来,产业化、商品化

 

 

第二章云计算的发展

一、发展简史

云计算是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变。

1983年,太阳电脑(Sun Microsystems)提出”网络是电脑”(”The Network is the Computer”)。

2006年3月,亚马逊(Amazon)推出弹性计算云(Elastic Compute Cloud;EC2)服务。

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

2007年10月,Google与IBM开始在美国大学校园,包括卡内基梅隆大学、麻省理工学院、斯坦福大学、加州大学柏克莱分校及马里兰大学等,推广云计算的计划,这项计划希望能降低分布式计算技术在学术研究方面的成本,并为这些大学提供相关的软硬件设备及技术支持(包括数百台个人电脑及BladeCenter与System x服务器,这些计算平台将提供1600个处理器,支持包括Linux、Xen、Hadoop等开放源代码平台)。而学生则可以通过网络开发各项以大规模计算为基础的研究计划。

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

2008年2月1日,IBM(NYSE: IBM)宣布将在中国无锡太湖新城科教产业园为中国的软件公司建立全球第一个云计算中心(Cloud Computing Center)。

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

2008年8月3日,美国专利商标局网站信息显示,戴尔正在申请”云计算”(Cloud Computing)商标,此举旨在加强对这一未来可能重塑技术架构的术语的控制权。 2010年3月5日,Novell与云安全联盟(CSA)共同宣布一项供应商中立计划,名为”可信任云计算计划(Trusted Cloud Initiative)”。

2010年7月,美国国家航空航天局和包括Rackspace、AMD、Intel、戴尔等支持厂商共同宣布”OpenStack”开放源代码计划。

2010年10月微软表示支持OpenStack与Windows Server 2008 R2的集成;而Ubuntu已把OpenStack加至11.04版本中。

2011年2月,思科系统正式加入OpenStack,重点研制OpenStack的网络服务。

 

二、商业应用

在这一节中,主要介绍下三个伟大的公司,google,amazon,facebook在云计算方面的商业应用。

1、 google

第一个开始云计算应用的应该是google。

他将网格计算的模式反转了一下。

将pc放到数据中心,全世界各地几十上百万的集群。

抓他的网页,建索引,分析内容,然后匹配广告。

他借鉴网格计算的数据计算方法,也将数据分割,分别计算,然后汇总,这就是google发表的论文map/reduce。

并行算法的起源。

不过google比较小气,除了论文,其他的一概免谈。

 

图2.2.1 google的云计算

 

2、 amazon

在google之后,出了个亚马逊。

传统印象,跟当当、京东不是一样吗?

他确实就是个卖货的,不过他伟大就在于想到,我也有这么几万几十万台机器的管理能力,为啥我不能这些能力也换钱呢。

所以,aws出现了,按流量、按分钟、按小时出租我的IT基础设施,而且保证你的应用按需计费、信用卡结算。

 

图2.2.2 amazon的云计算

 

3、 facebook

Facebook要做的就是有巨大人流量的超市和商业中心,可以把他想成家乐福,人多,啥都好卖,场内帖广告,收钱,上架有上架费,卖多了还可分成

其实当年myspace和fb现在的商业模式差不多,也有成为伟大公司的潜力,可惜他没能继续向前

Fb的伟大之处,是彻底践行开放原则

核心业务用开源的hadoop,Fb不是发起者,是hadoop的积极使用者和贡献者

自从有了hadoop,google就彻底裸奔了,没什么秘密了

他发起的open compute项目连机房怎么建都开放了,这样,互联网巨头几万几十万集群怎么管理的也不再是秘密了

而且,扎克伯格提出一个和摩尔定律其名的sns定律,用户产生的数据量会随着时间以2的幂次方增长,比如今年用户数量为1的话,明天翻倍,后年4倍,后年就是8倍

为云计算和大数据运算描绘了广阔的应用前景

 

图2.2.3 facebook的云计算

 

 

第三章云计算背后的技术原理

一、MapReduce

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

1、 map & reduce

简单说来,一个映射函数就是对一些独立元素组成的概念上的列表(例如,一个测试成绩的列表)的每一个元素进行指定的操作(比如前面的例子里,有人发现所有学生的成绩都被高估了一分,他可以定义一个”减一”的映射函数,用来修正这个错误。)。事实上,每个元素都是被独立操作的,而原始列表没有被更改,因为这里创建了一个新的列表来保存新的答案。这就是说,Map操作是可以高度并行的,这对高性能要求的应用以及并行计算领域的需求非常有用。  

而化简操作指的是对一个列表的元素进行适当的合并(继续看前面的例子,如果有人想知道班级的平均分该怎么做?他可以定义一个化简函数,通过让列表中的元素跟自己的相邻的元素相加的方式把列表减半,如此递归运算直到列表只剩下一个元素,然后用这个元素除以人数,就得到了平均分。)。虽然他不如映射函数那么并行,但是因为化简总是有一个简单的答案,大规模的运算相对独立,所以化简函数在高度并行环境下也很有用。

2、 分布和可靠性

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

化简操作工作方式很类似,但是由于化简操作在并行能力较差,主节点会尽量把化简操作调度在一个节点上,或者离需要操作的数据尽可能近的节点上了;这个特性可以满足Google的需求,因为他们有足够的带宽,他们的内部网络没有那么多的机器。

3、 用途

在Google,MapReduce用在非常广泛的应用程序中,包括”分布grep,分布排序,web连接图反转,每台机器的词矢量,web访问日志分析,反向索引构建,文档聚类,机器学习,基于统计的机器翻译…”值得注意的是,MapReduce实现以后,它被用来重新生成Google的整个索引,并取代老的ad hoc程序去更新索引。

MapReduce会生成大量的临时文件,为了提高效率,它利用Google文件系统来管理和访问这些文件。

其他实现

Nutch项目开发了一个实验性的MapReduce的实现,也即是后来大名鼎鼎的hadoop

Phoenix是斯坦福大学开发的基于多核/多处理器、共享内存的MapReduce实现。

4、 统计词频的例子

如果想统计下过去10年计算机论文出现最多的几个单词,看看大家都在研究些什么,那收集好论文后,该怎么办呢?

方法一:我可以写一个小程序,把所有论文按顺序遍历一遍,统计每一个遇到的单词的出现次数,最后就可以知道哪几个单词最热门了。

这种方法在数据集比较小时,是非常有效的,而且实现最简单,用来解决这个问题很合适。

方法二:写一个多线程程序,并发遍历论文。

这个问题理论上是可以高度并发的,因为统计一个文件时不会影响统计另一个文件。当我们的机器是多核或者多处理器,方法二肯定比方法一高效。但是写一个多线程程序要比方法一困难多了,我们必须自己同步共享数据,比如要防止两个线程重复统计文件。

方法三:把作业交给多个计算机去完成。

我们可以使用方法一的程序,部署到N台机器上去,然后把论文集分成N份,一台机器跑一个作业。这个方法跑得足够快,但是部署起来很麻烦,我们要人工把程序copy到别的机器,要人工把论文集分开,最痛苦的是还要把N个运行结果进行整合(当然我们也可以再写一个程序)。

方法四:让MapReduce来帮帮我们吧!

MapReduce本质上就是方法三,但是如何拆分文件集,如何copy程序,如何整合结果这些都是框架定义好的。我们只要定义好这个任务(用户程序),其它都交给MapReduce。

5、 map函数和reduce函数

map函数和reduce函数是交给用户实现的,这两个函数定义了任务本身。

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, “1″>,这表示单词w咱又找到了一个;MapReduce将键相同(都是单词w)的键值对传给reduce函数,这样reduce函数接受的键就是单词w,值是一串”1″(最基本的实现是这样,但可以优化),个数等于键为w的键值对的个数,然后将这些”1″累加就得到单词w的出现次数。最后这些单词的出现次数会被写到用户定义的位置,存储在底层的分布式存储系统(GFS或HDFS)。

6、 工作原理

  

 

图3.1.1 MapReduce执行流程

上图是论文里给出的流程图。一切都是从最上方的user program开始的,user program链接了MapReduce库,实现了最基本的Map函数和Reduce函数。图中执行的顺序都用数字标记了。

1.MapReduce库先把user program的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了split0~4;然后使用fork将用户进程拷贝到集群内其它机器上。

2.user program的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用户指定的。

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

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

5.master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能映射到所有R个不同分区),当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。

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

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

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

 

二、云存储

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

1、 简介

  参考云状的网络结构,创建一个新型的云状结构的存储系统,这个存储系统由多个存储设备组成,通过集群功能、分布式文件系统或类似网格计算等功能联合起来协同工作,并通过一定的应用软件或应用接口,对用户提供一定类型的存储服务和访问服务。

当我们使用某一个独立的存储设备时,我们必须非常清楚这个存储设备是什么型号,什么接口和传输协议,必须清楚地知道存储系统中有多少块磁盘,分别是什么型号、多大容量,必须清楚存储设备和服务器之间采用什么样的连接线缆。为了保证数据安全和业务的连续性,我们还需要建立相应的数据备份系统和容灾系统。除此之外,对存储设备进行定期地状态监控、维护、软硬件更新和升级也是必须的。

如果采用云存储,那么上面所提到的一切对使用者来讲都不需要了。云状存储系统中的所有设备对使用者来讲都是完全透明的,任何地方的任何一个经过授权的使用者都可以通过一根接入线缆与云存储连接,对云存储进行数据访问。

图3.2.1云存储流程图

2、 功能

云存储提供的诸多功能和性能旨在满足伴随海量非活动数据的增长而带来的存储难题:

  · 随着容量增长,线性地扩展性能和存取速度。

  · 将数据存储按需迁移到分布式的物理站点。

  · 确保数据存储的高度适配性和自我修复能力,可以保存多年之久。

  · 确保多租户环境下的私密性和安全性。

  · 允许用户基于策略和服务模式按需扩展性能和容量。

  · 改变了存储购买模式,只收取实际使用的存储费用,而非按照所有的存储系统,包含未使用的存储容量,来收取费用。

  · 结束颠覆式的技术升级和数据迁移工作。

 

3、 分类

云存储可分为以下三类:

1)公共云存储

像亚马逊公司的Simple Storage Service(S3)和Nirvanix公司提供的存储服务一样,它们可以低成本提供大量的文件存储。供应商可以保持每个客户的存储、应用都是独立的,私有的。其中以Dropbox为代表的个人云存储服务是公共云存储发展较为突出的代表,国内比较突出的代表的有金山快盘坚果云酷盘115网盘华为网盘等。

公共云存储可以划出一部分用作私有云存储。一个公司可以拥有或控制基础架构,以及应用的部署,私有云存储可以部署在企业数据中心或相同地点的设施上。私有云可以由公司自己的IT部门管理,也可以由服务供应商管理。

2)内部云存储

这种云存储和私有云存储比较类似,唯一的不同点是它仍然位于企业防火墙内部。

3)混合云存储

这种云存储把公共云和私有云/内部云结合在一起。主要用于按客户要求的访问,特别是需要临时配置容量的时候。从公共云上划出一部分容量配置一种私有或内部云可以帮助公司面对迅速增长的负载波动或高峰时很有帮助。尽管如此,混合云存储带来了跨公共云和私有云分配应用的复杂性。

 

4、 隐患

从功能实现上来讲,异地文件存取与文件分享共步技术早上互联网形成之初就已经得到应用,上个世纪初互联网刚刚进入国内时就有厂商提供过网盘服务,当时所谓的网盘并不是现在大家所熟知的网络虚拟磁盘,当时的网盘更像是一个SVN 或FTP 的客户端,而今十多年的发展以后,融入了移动互联网营销理念与新技术的”网盘”被包装成了”云存储”高调的出现在大众面前,据相关统计数据显示国内一线的云存储服务商每天的用户数据新增量已经达PB为单位,可见每天都有数以亿计的用户正在向自己云存储空间中上传下载着各种文件,在这种环境下排除网络带宽消耗之外,我们是否应该反思一下云存储下的未来隐患

1)版权风险

有关版权问题目前已经大范围的出现在了国内的网盘服务中,一些个人或团体会将以影视音乐为主体的文件通过云存储的客户端上传至网盘中,然后通过分享的方式对圈子内提供下载,大量的有版权的视频音乐被这种特殊盗版方式进行传播,而且这种传播方式暂时属于监管的空白,部分云存储提供商在版权单位的压力下开始限制链接分享的范围,加强文件的过滤。但是这些手段目前不能从根本上解决云存储中用户上传文件的盗版传播。而要建立起一整套影视文件数字指纹签名检验系统除了庞大的研发的运维成本外,各个利益团体之间的技术标准统一也是短期内难以统一的,但是在问题得到解决之前,此刻这种分享还在进行中,面临侵权问题不仅是用户还是云存储的提供商。

2)个人隐私

有很多移动平台用户喜欢随时将自己用手机或平板拍摄的照片与视频通过云存储快速上传到网盘中,这样可以非常快捷的通过WEB 或PC 客户端在异地甚至即时取回照片,但是大家可能不太相信的是你上传的每一张照片或其他文件都有可能是云存储的服务端是明文保存的,据参与过某云存储项目开发的人员介绍从目前运维成本上考虑实现私钥加密不太现实,管理员可以服务端的平台中直接查看和删除用户上传的文件,这些文件中不泛用户的机密文件或用户私隐,现阶段大型服务端都是通过建立严格的制度体系来约束管理人员的职业操守,但是人都是弱点的,一旦人的操守被弃的时候在其权力范围内可视的内容是否还是只属你是自己呢?

3)数据安全

从数据安全上分两个方面分析:

1.用户的操作安全:目前大多数的云存储都设计了多客户端数据同步机制,一般以最后一次更新为标准,其他客户端开启时自动同步,这点与SVN的设计有很大的差别,当一个用户在公司编辑某个文件后,回到家中再次编辑,那么当他再次回到公司时文件已是昨晚在家更新过的,这是理想状态下的,在很多时候用户编辑一个文件后,会发现编辑有误,想取回存在公司的文件版本时,可能在没有支持版本管理云存储中你的附本也已经被错误的更新了,同样的道理你删除一个文件时候,如果没有额外的备份,也许你到网盘回收站中再找了,版本管理技术上并不存在问题,但是会加大用户的操作难度,目前的云存储服务商只有少数的私有云提供商有限的支持,多数情况下这种覆盖是时常发生的。

2.服务端的安全操作:云存储服务器早已经成为了黑客入侵的目标,因为服务器上不仅有无穷用户数据,对此类大用户群服务的劫持更加是黑色收入的重要来源,也就是说服务器的安全性直接影响着用户上传数据的安全,在服务器虚拟化技术的支撑下V2V迁移的可靠性相当高,多数的云存储厂商都预备安全防护方案,但是不能忽视的永远人的操作。

4)运营停止

在当下的互联网环境下,提供公众的云存储服务,每年的资金投入在5亿元以上,而且目前对私提供的云存储盈利模式还并不清晰,究竟有多少服务商可以持续永久的提供这种服务,这种服务后期是否收费?是否会因为亏损问题、盈收问题而被迫停止运营,在这种情况已有用户的数据向何处迁移?数据安全由谁负责,IM和Emai的盈利模式已经成熟所以相关厂商可以持续免费到现在,而云存储的投入至入是前两者之和的十倍,厂商之间的服务整合和公约形成,首要解决并不是技术问题,而是利益分配问题,服务商在一定时间会关停服务才是用户数据留存问题最大的隐患。

 

 

三、虚拟化技术

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

1、 概念

  

 

图3.3.1 微软虚拟化技术

虚拟化是一个广义的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案。如同空旷、通透的写字楼,整个楼层几乎看不到墙壁,用户可以用同样的成本构建出更加自主适用的办公空间,进而节省成本,发挥空间最大利用率。这种把有限的固定的资源根据不同需求进行重新规划以达到最大利用率的思路,在IT领域就叫做虚拟化技术

虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上;而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作

虚拟化技术也与VMware Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。

虚拟化技术有很多定义,下面就给出了一些这样的定义。

“虚拟化是以某种用户和应用程序都可以很容易从中获益的方式来表示计算机资源的过程,而不是根据这些资源的实现、地理位置或物理包装的专有方式来表示它们。换句话说,它为数据、计算能力、存储资源以及其他资源提供了一个逻辑视图,而不是物理视图。” — Jonathan Eunice, Illuminata Inc。

“虚拟化是表示计算机资源的逻辑组(或子集)的过程,这样就可以用从原始配置中获益的方式访问它们。这种资源的新虚拟视图并不受实现、地理位置或底层资源的物理配置的限制。” — Wikipedia

“虚拟化:对一组类似资源提供一个通用的抽象接口集,从而隐藏属性和操作之间的差异,并允许通过一种通用的方式来查看并维护资源。” — Open Grid Services Architecture Glossary of Terms。

2、 目的

虚拟化的主要目的是对 IT 基础设施进行简化。它可以简化对资源以及对资源管理的访问。

消费者可以是一名最终用户、应用程序、访问资源或与资源进行交互的服务。资源是一个提供一定功能的实现,它可以基于标准的接口接受输入和提供输出。资源可以是硬件,例如服务器磁盘、网络、仪器;也可以是软件,例如 Web 服务。

消费者通过受虚拟资源支持的标准接口对资源进行访问。使用标准接口,可以在 IT 基础设施发生变化时将对消费者的破坏降到最低。例如,最终用户可以重用这些技巧,因为他们与虚拟资源进行交互的方式并没有发生变化,即使底层物理资源或实现已经发生了变化,他们也不会受到影响。另外,应用程序也不需要进行升级或应用补丁,因为标准接口并没有发生变化。

IT 基础设施的总体管理也可以得到简化,因为虚拟化降低了消费者与资源之间的耦合程度。因此,消费者并不依赖于资源的特定实现。利用这种松耦合关系,管理员可以在保证管理工作对消费者产生最少影响的基础上实现对 IT 基础设施的管理。管理操作可以手工完成,也可以半自动地完成,或者通过服务级协定(SLA)驱动来自动完成。

在这个基础上,网格计算可以广泛地利用虚拟化技术网格计算可以对 IT 基础设施进行虚拟化。它处理 IT 基础设施的共享和管理,动态提供符合用户和应用程序需求的资源,同时还将提供对基础设施的简化访问。

 

 

四、Bigtable

BigTable是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库

1、 简介

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

2、 功能

在很多方面,Bigtable和数据库很类似:它使用了很多数据库的实现策略。并行数据库【14】和内存数据库【13】已经具备可扩展性和高性能,但是Bigtable提供了一个和这些系统完全不同的接口。Bigtable不支持完整的关系数据模型;与之相反,Bigtable为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式(alex注:也就是对BigTable而言,数据是没有格式的,用数据库领域的术语说,就是数据没有Schema,用户自己去定义Schema),用户也可以自己推测(alex注:reasonabout)底层存储数据的位置相关性(alex注:位置相关性可以这样理解,比如树状结构,具有相同前缀的数据的存放位置接近。在读取的时候,可以把这些数据一次读取出来)。数据的下标是行和列的名字,名字可以是任意的字符串。Bigtable将存储的数据都视为字符串,但是Bigtable本身不去解析这些字符串,客户程序通常会在把各种结构化或者半结构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可以控制数据的位置相关性。最后,可以通过BigTable的模式参数来控制数据是存放在内存中、还是硬盘上。

  特点:

  1、适合大规模海量数据,PB级数据;

  2、分布式、并发数据处理,效率极高;

  3、易于扩展,支持动态伸缩;

  4、适用于廉价设备;

  5、适合于读操作,不适合写操作。

  6、不适用于传统关系数据库;

  应用:

BigTable为谷歌旗下的搜索、地图、财经、打印、以及社交网站Orkut、视频共享网站YouTube和博客网站Blogger等业务提供技术支持。

2010年9月,Google宣布将放弃MapReduce新索引系统将迁移至BigTable平台。新平台基于Colossus,也被称为GFS2。

3、 数据模型

Bigtable不是关系型数据库,但是却沿用了很多关系型数据库的术语,像table(表)、row(行)、column(列)等。这容易让读者误入歧途,将其与关系型数据库的概念对应起来,从而难以理解。

本质上说,Bigtable是一个键值(key-value)映射。按作者的说法,Bigtable是一个稀疏的,分布式的,持久化的,多维的排序映射。

先来看看多维、排序、映射。Bigtable的键有三维,分别是行键(row key)、列键(column key)和时间戳(timestamp),行键和列键都是字节串,时间戳是64位整型;而值是一个字节串。可以用 (row:string, column:string, time:int64)→string 来表示一条键值对记录。

行键可以是任意字节串,通常有10-100字节。行的读写都是原子性的。Bigtable按照行键的字典序存储数据。Bigtable的表会根据行键自动划分为片(tablet),片是负载均衡的单元。最初表都只有一个片,但随着表不断增大,片会自动分裂,片的大小控制在100-200MB。行是表的第一级索引,我们可以把该行的列、时间和值看成一个整体,简化为一维键值映射,类似于:

 

table{

  ”1″ : {sth.},//一行

  ”aaaaa” : {sth.},

  ”aaaab” : {sth.},

  ”xyz” : {sth.},

  ”zzzzz” : {sth.}

  

列是第二级索引,每行拥有的列是不受限制的,可以随时增加减少。为了方便管理,列被分为多个列族(column family,是访问控制的单元),一个列族里的列一般存储相同类型的数据。一行的列族很少变化,但是列族里的列可以随意添加删除。列键按照family:qualifier格式命名的。这次我们将列拿出来,将时间和值看成一个整体,简化为二维键值映射,类似于:

 

  table{

  // …

  ”aaaaa” : { //一行

  ”A:foo” : {sth.},//一列

  ”A:bar” : {sth.},//一列

  ”B:” : {sth.} //一列,列族名为B,但是列名是空字串

  },

  ”aaaab” : { //一行

  ”A:foo” : {sth.},

  ”B:” : {sth.}

  },

  // …

  }

 

或者可以将列族当作一层新的索引,类似于:

 

 table{

  // …

  ”aaaaa” : { //一行

  ”A” : { //列族A

  ”foo” : {sth.}, //一列

  ”bar” : {sth.}

  },

  ”B” : { //列族B

  ”" : {sth.}

  }

  },

  ”aaaab” : { //一行

  ”A” : {

  ”foo” : {sth.},

  },

  ”B” : {

  ”" : “ocean”

  }

  },

  // …

  }

 

时间戳是第三级索引。Bigtable允许保存数据的多个版本,版本区分的依据就是时间戳时间戳可以由Bigtable赋值,代表数据进入Bigtable的准确时间,也可以由客户端赋值。数据的不同版本按照时间戳降序存储,因此先读到的是最新版本的数据。我们加入时间戳后,就得到了Bigtable的完整数据模型,类似于:

 

  table{

  // …

  ”aaaaa” : { //一行

  ”A:foo” : { //一列

  15 : “y”, //一个版本

  4 : “m”

  },

  ”A:bar” : { //一列

  15 : “d”,

  },

  ”B:” : { //一列

  6 : “w”

  3 : “o”

  1 : “w”

  }

  },

  // …

  }

 

  查询时,如果只给出行列,那么返回的是最新版本的数据;如果给出了行列时间戳,那么返回的是时间小于或等于时间戳的数据。比如,我们查询”aaaaa”/”A:foo”,返回的值是”y”;查询”aaaaa”/”A:foo”/10,返回的结果就是”m”;查询”aaaaa”/”A:foo”/2,返回的结果是空。

  

Bigtable实例:

Figure 1是Bigtable论文里给出的例子,Webtable表存储了大量的网页和相关信息。在Webtable,每一行存储一个网页,其反转的url作为行键,比如”com.google.maps”,反转的原因是为了让同一个域名下的子域名网页能聚集在一起。图1中的列族”anchor”保存了该网页的引用站点(比如引用了CNN主页的站点),qualifier是引用站点的名称,而数据是链接文本;列族”contents”保存的是网页的内容,这个列族只有一个空列”contents:”。图1中”contents:”列下保存了网页的三个版本,我们可以用(“com.cnn.www”, “contents:”, t5)来找到CNN主页在t5时刻的内容。

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

 

四、其他技术

图3.4.1 云计算背后的技术

从上面云计算的沿革来看,背后的技术无外乎就那些早已存在的技术,如并行计算、分布式存储、负载均衡、虚拟化、ITSM等等。在此就不多做详述了。

 

 

 

第四章云计算的展望与未来

一、云计算的优点

1、 即付即用(As pay as Use)

即付即用的概念就好比你想吃鸡蛋,只需去菜场或者超市去买,而不需要先养一只母鸡,等其下单。而在传统的IT项目中,都需要购买服务器,将服务器托管到机房,还需要购买带宽,自建机房还需要支付电费。再信息技术不断发展之后,出现了IDC,可以租用服务器,但是还是按年付或者月付的,完全没有精确到秒和cpu。现在的云计算概念,可以按照你用了多少带宽,多少存储空间,多少计算能力(cpu)等来收费,在系统空闲的时候,不收任何费用。做到了IT项目成本的节省。

2、 虚拟化技术

1)提高服务器的利用率、节省成本

由于硬件技术的发展远超于软件技术,所以现在一台主流服务器在跑一个应用上,很多时候会出现资源剩余的情况。将一台服务器,虚拟出多台服务器来用。提高了服务器的利用率。

2)管理方便

虚拟化技术现在已经比较成熟,有一套自有的管理系统,方便直接查看和运维。减少了传统运维中,需一台台的登陆服务器进行维护。

3)伸缩性

当应用的规模逐渐广泛,需要更多的内存和cpu时,可以扩展划分,不需要重装系统等繁复的操作。

3、 数据的安全性

云存储的数据一般在同一机房存储3份以上,跨域再存储3份,故任何一台服务器硬盘损坏或者宕机,对业务系统没有任何影响。保证了数据的安全。

4、 高可用

在一个集群中,断掉任何节点,都会自动切掉,保证系统的高可用。

 

二、现状

1、 前(钱)景良好

2011年全球云计算市场中PaaS+SaaS市场为846.3亿美金,IaaS约为60亿美金

运营商构建PaaS和SaaS,以成为计算能力出租、应用程序出租运营商的空间巨大,大型企业建设自身的PaaS和SaaS的需求明显

 

2、 各大政府支持:

美国–政府预算对云计算大力支持,国家首席信息官成立云计算工作组,全面协调云计算产业和政府IT服务

英国–由国家首席信息官发布了数字英国报告,将大力支持政府云计划,重点提供安全私密、高可信的云服务

日本–内务部和通信监管机构计划建立一个大规模的云计算基础设施,以支持所有政府运作所需的信息系统

韩国–发布《搞活云计算综合计划》,决定在2014年之前向云计算投资6146亿韩元(36亿人民币),争取使韩国云计算市场规模扩大目前的四倍

中国–各地都建设了云基地

图4.2.1 云计算在中国

 

3、 主要问题

1)安全性

数据放在公有云上,是否会被黑客或者运营商泄密。

2)信任/公信力

立法保护

文化/习惯/用户的接受……

3)缺乏应用

“云计算,首先是发展应用,而非建硬件设施。”工信部副部长杨学山说,云计算的实质是将现有资源用好,盘活。

4)缺乏统一的标准

大家都在做,都说自己是云计算。

在统一标准上,中国工信部的主管官员们非常有远见,一直致力于统一中国云计算的标准,并且增强中国云计算技术和标准在世界上的话语权。

5)力量分散

力量分散,缺乏核心技术的联合攻关、缺乏国家层面的统一部署

 

三、展望未来

1、 物联网

云计算是通过资源的集约化来提高效率,其初衷是解决特大规模数据处理问题,因此它被业界认为是支撑物联网”后端”的最佳选择,云计算为物联网提供后端处理能力与应用平台。物联网将联网的对象从计算机扩展到更多的触角(终端),其中产生的大量数据存储及计算需求需要云计算来作为支撑平台。

 

2、 智慧城市

它是指城市中”互联网+物联网”的物物相联,通过超级计算机和云计算将其整合,应用诸多信息化技术来提升城市管理水平,服务民生,实现人类社会与物理世界的融合。

 

 

结论

云计算到底好不好?是浮云?

答案是肯定的。

但是我们现在要做的:

一是在技术方面统一标准。

二是进行实践,实践是检验真理的唯一标准。

预计在未来的五到十年中,云计算会逐渐走入人们生活的方方面面。

留言列表
发表评论
来宾的头像