2007 年 11 月 16 日 ,在美国参加 2007 超级计算大会( Supercomputing 07 )期间,我和另外两位同事到硅谷的 IBM 阿尔马登( Almaden )研究中心进行了访问。那天听到了一个新名词 “ 云计算 ” ( Cloud Computing ),也正是在那个星期, IBM 和谷歌正式对外宣布开展云计算合作。尽管在此之前知道亚马逊公司通过亚马逊弹性计算云( Amazon Elastic Compute Cloud , Amazon EC2 )来提供网格计算服务,但是真正把 “ 云 ” 作为一个计算名词提出来还是第一次听到,不知道 IBM 和谷歌提出的云计算这个名词是否是从亚马逊借鉴而来。
那天, IBM 的资深科学家向我们详细讲解了什么叫云计算以及 IBM 在云计算方面的解决方案。听完以后总觉得这个云计算的概念和当时热门的网格计算很相似。 IBM 给出的云计算解决方案归纳起来就是三层架构:最底层用来屏蔽物理运行环境差异性的是采用开源的虚拟机解决方案 Xen ;在 Xen 虚拟机上的是 IBM 的资源管理套件 Tivoli ,它提供了基于策略的资源分配、安全、存储和系统 管理解决方案;最上层是一个跨平台的自由集成开发环境 Eclipse 。云计算所基于的底层硬件环境仍然是一个分布式计算环境,但 IBM 的云计算解决方案留给我们印象最深的是 IBM 开发的一套用于云计算的资源预留的系统 HiPODS ( High Performance On Demand Solutions )。当时我想如果能把 HiPODS 的某些思想和我们为 ChinaGrid 开发的网格中间件中国教育科研网格平台( China Grid Support Platform , CGSP )结合起来,就能很好地解决网格计算中的资源预留问题,为用户提供更有保障的服务。
到了 2008 年,很多人都开始谈论云计算。云计算成为 2008 年最热门的词汇,一时间原先在网格领域从事研究工作的国外学者开始纷纷转向云计算,开始撰写云计算相关的学术论文;所有原先跟分布式系统相关的国际学术会议都开始有云计算的主题了;一些著名的期刊,像 IEEE[1] 《互联网计算( Internet Computing )》,也开始出云计算的专刊了。很多人都在问这样一些问题, “ 云计算和网格计算到底有什么区别? ”“ 云计算会不会只是一个概念创新? ”“ 云计算真如大家所期望的那样实用吗? ” 等等。
先来看看维基百科对云计算的定义: 云 计算是分布式计算技术的一种,其最基本的概念,是通过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再交由多部服务器所组成的庞大系统进行搜寻 和计算分析,最后将处理结果回传给用户。通过这项技术,网络服务提供者可以在数秒内,处理数以千万计甚至亿计的信息,达到和超级计算机同样强大效能的网络 服务。按照这样的定义,好像和网格计算没有什么实质性的区别,但是看看目前一些成熟的云计算实例,云计算和网格计算又有一些差异。
网格计算和云计算本质的区别在于: 网格计算强调的是一个由多机构组成的虚拟组织,多个机构的不同服务器构成一个虚拟组织为用户提供一个强大的计算资源;而从目前云计算的成熟案例来看,云计算更强调在一个机构内部的分布式计算资源的共享。无论是亚马逊的 EC2 或者 S3 ( Simple Storage Service ,简单存储服务),还是谷歌的云计算,其实都是由一个能统一控制资源的机构提供计算 / 存 储资源,也正是因为由这样的一个机构来提供资源,才能确保用户的服务质量。比如可以按照用户的需求首先在云中为用户部署所需要的运行环境(当然资源预留和 动态部署技术的成熟也得益于最近几年兴起的虚拟化技术的研究成果,正因为虚拟化技术使得可以把用户和底层的软硬件运行环境分离开来)或者预留存储资源,这 样在用户运行的时候可以确保所需的资源。原来在网格环境下无法将庞大的计算处理程序分拆成无数个较小的子程序在多个机构提供的资源之间进行处理,而在云计 算环境下由于确保了用户运行环境所需的资源,将用户提交的一个处理程序分解成较小的子程序在不同的资源上进行处理就成为可能。由于确保了用户运行所需要的 资源和环境,因此针对用户的收费就成为可能。
云计算的应用背景 明确且有商业价值。很多人认为云计算的成功是因为有很清晰的商业模式,与其这样说倒不如说云计算针对的应用背景非常明确。比起网格计算,云计算更强调服务,无论是 SaaS ( Software as a Service ,软件即服务或者 Storage as a Service 存储即服务),还是 PaaS ( Platform as a Service , 平台即服务),云计算把软件、存储、平台等都作为一种服务提供给用户,无论你是做科学计算还是做数据在线存储,云计算都是以一种服务的形式呈现给最终用 户。正是因为有了服务,云计算才能针对不同的服务采取不同的商业模式。尤其在云计算中备受关注的云存储,由于是为终端用户提供存储服务,而这种服务的对象 可以是普通用户(比如谷歌的 Gmail 服务),所以才使得普通用户能够接受云存储所采用的商业模式,即按照提供的存储空间来收费。 2006 年 7 月我曾经在意大利的 Cetraro 参加了一个国际高性能计算高峰论坛,在会上来自美国圣地亚哥超级计算机中心( San Diego Supercomputer Center )的弗兰 · 柏曼( Fran Berman )教授曾经做了一个 “100 Years of Data – What’s Involved in Preserving Data for the Foreseeable Future?” 的 报告,在报告中柏曼教授明确指出,对于每个人来说都有很重要的数据,因此数据的长期保存(保存几十年到一百年)就成为数据存储和管理当中最具挑战性的课 题,而目前解决这一问题的惟一途径就是采用在线存储,因此为个人或者团体提供在线存储服务将成为一个最具潜力的行业,也正是因为这样,在线存储的合理收费 是可以接受的。
云计算还有一个优势之处在于,无论哪一种云计算解决方案,都提供了一套便于用户编程的工具和手段。谷歌目前的云技术,主要由 MapReduce 、 GFS 及 BigTable 三项技术组成,为用户进行海量数据处理提供了手段,同时谷歌还提供了谷歌混搭编辑器 ( Google Mashup Editor ),它是一个 AJAX 的编程框架和一组开发工具集,这组工具集可以使开发者简单快速的开发出基于谷歌服务(例如谷歌地图 和谷歌搜索)的简单网络应用和混搭( Mashup )产品。作为 MapReduce[2] 的一个实现, Hadoop 是 Apache 开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、 Facebook 和雅虎等。 Hadoop 为应用程序透明地提供了一组稳定 / 可靠的接口 。在 Hadoop 中实现了谷歌的 MapReduce 算法,它能够把应用程序分割成许多很小的工作单元,每个单元可以在任何集群节点上执行或重复执行。此外, Hadoop 还提供一个分布式文件系统 HDFS ( Hadoop Distributed File System )用来在各个计算节点上存储数据,并提供了对数据读写的高吞吐率。由于应用了 Map/Reduce 和分布式文件系统使得 Hadoop 框架具有高容错性,它会自动处理失败节点。
云 计算是网格计算的自然延伸,它赋予了网格计算更多的内容和技术,但本质上它和网格计算一样都是分布式计算的一种。在这一点上,中国的学者从一开始理解网格 计算就是云计算的思路,和欧美的学者对于网格计算的理解不完全一致。回想一下网格计算发展的历程,欧美的学者提出网格计算的初衷是为了实现高性能计算,作 为高性能计算的一种替代方案,但是后来的种种实践证明了网格计算并不是高性能计算最合适的解决方案,为了实现高性能计算仍然要大力发展高性能(现在强调高 效能)计算机。但是从网格技术引入中国之时起,我国的学者便赋予了它云计算的特征,那就是更加注重资源共享,而不是单纯的高性能计算。
以 中国教育科研网格为例,在一期建设中我们开展了包括大学课程在线、大学数字博物馆网格、就业网格和精品课程网格等,按照传统的欧美学者对于网格计算的认 识,这些应用不属于严格意义上的网格计算,但是我们赋予了它们网格计算的涵义,通过将分布在各个学校中的教学资源、科普资源、学生信息资源通过网格中间件 整合共享,实现了异构分布资源的共享,一直到 2006 年 2 月在希腊雅典举办的第十六届全球网格论坛( Global Grid Forum , GGF-16 )上,国外学者才意识到网格在远程教育中的作用,举办了一个 “Grid for Learning Ad-hoc BOF” ,并邀请我们在会上介绍中国教育科研网格在这方面的经验 。现在回想起来,我们这些网格计算的具体应用就是实际意义上的云计算应用。
那么,云计算真像大家所期望的那样,无懈可击、无所不能吗 ? 事实上,云计算在极大方便终端用户和企业使用计算资源和存储资源的同时,面临的最大挑战就来自安全方面。云计算意味着用户任务和数据被转移到用户掌控范围外的云端,也就是在云计算服务提供商的手中。那么,如何保证这些用户数据的安全性?在一个信息称 “ 王 ” 的时代里,哪怕是数据碎片的泄露也是危险的。只要存在数据泄露的可能性,云计算服务就会被高安全要求级别的客户拒之门外,因此,用户数据的安全性将是决定云计算走向企业应用的关键因素。本质上讲,云计算提供商在用户数据安全性保护方面要解决两个核心问题:( 1 )云计算提供商是否采用必要的安全技术来确保用户数据的安全?即使提供商自己也不能在没有用户授权的情况下访问用户数据;( 2 )如果云计算提供商采用了必要的安全技术,如何向用户证明这些技术手段是安全的?
用过亚马逊网络服务( Amazon Web Services )的用户可能都知道 Amazon Web Services Customer Agreement ( http://aws.amazon.com/agreement/ ),其中第 7 条 Downtime and Service Suspensions ; Security 对于用户使用亚马逊网络服务所造成的损失有明确的说明,归根结底就是用户要自己承担由于系统宕机、停止服务或者由于安全因素所造成的服务停止和数据丢失等损失。近两年来云服务提供商频频出现各种不安全的状况, 2008 年 2 月 15 日 ,亚马逊公司出现了网络服务宕机事件,使得几千个依赖亚马逊的 EC2 云计算和 S3 云存储的网站受到影响,其中包括 Twitter 、 SmugMug 、 37Signals 和 AdaptiveBlue 等。 2009 年 2 月 24 日 ,谷歌 Gmail 邮箱爆发全球性故障,服务中断时间长达 4 小时。此次故障是由于位于欧洲的数据中心例行性维护,导致欧洲另一个数据中心过载,连锁效应扩及其它数据中心,最终致使全球性断线。 2009 年 3 月 15 日 ,微软的云计算平台 Azure 停止运行约 22 个小时,微软至今没有给出详细的故障原因。不过,业内人士分析认为, Azure 平台的这次宕机与其中心处理和存储设备故障有关。
要 想让普通用户像使用银行存钱那样把自己的数据放在云端并不是一件容易的事情,这里面存在很多问题,是无法类比的。首先是云服务提供商的可信问题,人们之所 以敢把钱存在银行里,是因为银行是经过国家认可的,有保障的服务,但至少目前还没有一家云服务提供商是从国家层面得到认可和提供服务保障的,因此如何确保 云存储服务提供商的可信是第一个难题;其次,货币的价值是明确的、可衡量的,而数据的价值却无法度量,也正是因为这样,数据在云端存储的时候可以按照存储 空间的大小和流量来收费,但是数据丢失所带来的损失就无法衡量了,因此目前几乎没有一家云服务提供商可以为用户提供有保证的数据存储服务,而按照一般的商 业运作模式,有收入就应该提供赔偿的手段和度量方法;再次,货币具有通用型,你存进银行 100 元人民币,但是在取钱的时候你并不需要取出来你原来存进去的那张 100 元,任何 100 元纸币或者任何等值的纸币之和都是可以接受的,但是数据就不一样了,你上传一张照片到云端,必须确保你再下载的时候还是这张照片,其它任何照片都是不可替代的,所以如何确保存储在云端的数据的完整性就成为另一个值得研究的问题。
“ 雄关漫道真如铁,而今迈步从头越 ” ,目前云计算还远没有发展成熟,云计算要真正实用化还有漫长的路要走,什么时候能真正做到存储在云端的数据不再是桌面数据的一个备份,云计算就离实用化不远了。