InfoQ

InfoQ

文章

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

云计算七问七答

作者 吕维德 发布于 2009年3月28日

领域
架构 & 设计,
运维 & 基础架构
主题
架构 ,
云计算
标签
弹性计算集群 ,
MapReduce ,
Hadoop ,
GoogleAppEngine

缘起

最近因为工作需要,又再度开始接触 Amazon EC2/S3(早在2006初这个服务刚推出不久时曾用过一次,那时是RoR加一堆merb,不过后来随着项目结束也就渐渐忘了这事),结果这次随便查了些资料却发现“云计算”这个单词似乎已无所不在泛滥成灾,也让我一时兴起想了解一下到底现在大家口中所谓的“云计算”是在指什么。

之所以这样好奇主要的原因是在许多地方都看到有人自称在提供云计算服务,但这些服务间彼此的性质、形态与做法差异性却很大,例如EC2与GAE两者就不太一样,GAE与Salesforce又很不同,搞到最后,似乎处处是云端,人人在漫步

根据维基百科的定义,云计算最宽松的定义是这样的:

它是一种计算方式,通过互联网将资源“以服务”的形式提供给用户,而用户不需要了解、知晓或者控制支持这些服务的技术基础架构(“云”)。(It is a style of computing in which resources are provided “as a service” over the Internet to users who need not have knowledge of, expertise in, or control over the technology infrastructure (”in the cloud”) that supports them.)

如果你对这样的定义没问题,那非常好,不用再浪费时间看下去,去喝杯咖啡吧。

很可惜这样的定义在我听来似乎宽松的有点夸张了,因为这样说来,我在家里摆几支iPhone跑些服务并开放API给人用,其实也算是云计算喽?(还是高雅的Apple云哩)就因为这该死的好奇心,我花了几天时间调查并整理了些相关资料,现在总算比较有个头绪了。

请注意这只是我个人的心得整理,文中对于名词的定义与诠释,尤其是“云”,只是我个人的想法,如果有错欢迎各方大德赐教。

从主机服务到VPS,它是真正的云吗?

基本上,如果要细究到底云是什么,可能可以先吵上个三天三夜还没定论,因为根据众多前辈的说法,云这个字本来就是个流行词汇(Buzz Word),想用的人就随需取用好了,其实根本没啥定义好谈的啊。因此,我打算先跳过试图去定义这个字的破题法,从实际的部署方式来看这件事。

以往一般人要提供网络服务,大多是去租虚拟主机,有钱一点就丢机器到机房去,这是最常见也最传统的手法,这个手法最大的缺点在于:如果临时有大流量需求,例如办个活动,很难迅速扩充服务能量,不论是要搞到大量的机器,或无穷尽的带宽,都是个问题。

因此,这几年来比较流行的玩法是所谓的VPS/VDS(Virtual Private Server),透过类似XEN这样的软体,将一台实体服务器虚拟化(Virtualization)成多台虚拟机器然后出租,这样一来当临时有大流量需求时,可以很容易地加买几台虚拟机器就撑过去了。

前面开头谈到的EC2就是这样一个服务,另外这一两年颇受好评的Slicehost也是,在EC2的例子里,每一个虚拟出来的机器叫做一个实例(Instance),因此要应付大流量事件时,可以狂开Instance撑过去,这比狂买实体机器便宜多了。

由于VPS真的超方便而且很好用,因此迅速受到大家欢迎,久而久之,VPS这样的服务似乎也就跟云画上了等号,但这个等号里,有个地方却值得进一步讨论。

简单来说,今天一个人在EC2买了100个Instance,它们并不会自动联合起来工作,而是要靠人工去规划,例如最常见的是在前面放个逆向代理(Reverse Proxy),然后把请求平均导向到这100台机器上(轮询负载均衡,Round-robin Load Balancing),并且,更重要的是应用本身在撰写时就要考虑到将来能支持跑在多个分散的机器上,例如Session要怎么维持?全局内存(Global Memory)如何分享?数据库是否也要散聚在不同机器上?如果分散的话,要怎么维持资料同步?等等这一大堆相关的细节要处理,一个没弄好,呃,就成了Twitter第二了。

从这个角度看来,VPS(不论是EC2还是Slicehost)提供的其实是虚拟化与负载均衡服务,至于在这个基础服务之上,用户要怎么玩就是各显神通。但负载均衡与云似乎并不尽然相同呀!

世界上还有其它种类的云吗?

有,例如 Google App Engine(简称GAE)提供的服务。

简单来说GAE是由三个东西组成的,分别是MapReduceBigTableGFS(Google File System),其中最重要的特色就是MapReduce。MapReduce可说是一个演算法,也可说是一个框架(看你读的文献来源),但它基本上是由Map与Reduce两者组合,运作方式也很简单:

  • Map:主节点将工作切割成许多小块丢给子节点去执行,子节点可能会再切割工作成各多的小块给其下的子节点去执行,因此这是一个树状的结构。当子节点完成计算后会将结果传回给主节点。
  • Reduce:主节点拿到子节点传回的结果后,将它组合起来,就完成工作了。

对MapReduce有兴趣又闲的发慌的朋友可以去看看Google发表的一篇论文与简报(保证会睡的很香甜:P)。

类似GAE这样的服务,它们最大的特色就是会将工作切割成很多小块,然后经由多台电脑联合起来一起运算,也因为要切割,因此通常会伴随者一个分布式文件系统(在GAE的例子里,叫做GFS),通常也会有一个分布式的文件库,例如GAE里叫Bigtable。

当然前面讲的都是针对底层架构的设计,但对最前端的开发者来说它代表什么意义呢?很简单,开发者可以完全不用管它有100台或10000台电脑在运作,只要照着GAE提供的SDK开发程序,将来布署到GAE上后就会自动去调用一堆电脑(而且很有可能是分布在世界各地数据中心里的)来发功,从这个角度来说,开发者要担心或处理的细节是比较少的,因此理论上上市时间也是比较短的。

如果不想用GAE还有其它选择吗?

有,Hadoop是Aapche基金会里一个基于Java的主要计划,基本上可视为开源版的GAE(很多关键技术是依据Google开放的学术论文来实现的,例如Map Reduce、分布式文件系统等),目前最力挺的开发者是Yahoo,用于该公司的搜索引擎上,而Hadoop的创始者目前也在Yahoo上班(今年红利会不会很伤?:P),这里有一篇iThome的中文报道值得一看。

Hadoop主要由下列三者组成(其它详细说明请看官网):

  • Hadoop Core:主要就是实现MapReduce;
  • HDFS(Hadoop Distributed File System):参考GFS而来的分布式文件系统;
  • HBase:基于HDFS的分布式资料库(功能等同于Google Bigtable)。

Hadoop/GAE与EC2是互斥的吗?

不见得,要看比较的面向为何?但实际上它们是可能合作的,其中最著名的例子是纽约时报在EC2上用Hadoop转了4TB的PDF(这篇文章超级精彩不看可惜)。

故事大略是这样:

NYT有一大票1851-1922年间扫描的一千一百万份文章要从TIFF图档格式转换为PDF,由于数量实在太庞大,转换起来不但耗时甚久,也需要极大数量的机器,就算有钱如NYT也不想当凯子爷投资这么多啊~~~(而且因为转换时间太久,也不太可能跑去BestBuy刷它个几千台PC回来,然后速速转完就退回去;P)

最后NYT的工程师将所有档案传到S3放着,然后到EC2开了100个Instance,再装个Hadoop利用这100台电脑跑分布运算,结果是只花了24小时和大约3000美金就搞定(由于处理速度实在太快,他们实际上还跑了两次吶……)

这个例子也正好带出下一个主题。

EC2到底是不是云?

这要看你怎么定义云这个字,以我而言,我倾向认为MapReduce与分布式文件系统是云计算的主要特色,因此在这个定义之上,EC2并不符合首要条件。

但如果我们把问题转成:EC2可以成为云吗?

那答案就是肯定的,从上面NYT的例子可以看出,EC2提供100个Instance只是基础架构,之后再上面跑Hadoop才是真正发功之所在。由此我们也可以得到另一个结论:硬件本身有无虚拟化并不重要(你可以买100台真的电脑连起来,也可以用EC2开100个Instance),重要的是在其上协同运算的方式(MapReduce是这里的关键)。

更简单的二分法则是这样:

  • Amazon只是把硬件虚拟化,然后卖入门级计算能力。
  • GAE/Hadoop则是提供分布式协同运算,打包的计算方案。

因此,或许我们可以把EC2视为云的前奏曲,拥有它之后,要不要做成云(例如装上Hadoop)则是个人选择。

何时选择使用EC2或云呢?

这是更重要也更实际的问题,而答案也很单纯,主要就是考虑下列因素:

1、你要解决的问题是否能符合MapReduce的矩阵分割方式?

或是更白话一点的讲,你要做的事能不能被切割成小小的一块块来各个击破?例如日志文件的分析就很适合,但Friend of Friend数据库就不见得适合。如果你的问题可切割成许多小块,那就可以考虑下一点。

2、Vendor Lock-in是否是个问题?

这个主要是针对GAE而来的,现在如果用了GAE,基本上它的Lock-in(Vendor Lock-in意思是你采用了一个技术,即将自己锁定在这家提供商身上,不能轻易转换提供商)特质非常强烈,例如一定要用Python与Bigtable,整个资料库栏位的规划方式跟传统RDB完全不同,操作语法也不一样,将来几乎无法迅速移转到其它主机服务(虽然有人写了GAE to EC2 转换指南,但有没有胆量用是另外一回事)。喔,更别提市场上Python的人才有多贫乏这件事,会RoR的人搞不好还多一点。

当然这里可能的另一个选择就是效法NYT,用EC2+Hadoop搞定制化分布式运算,而且用的是Java,人才四处可得,相对门槛就低一点(但搞不定最后会死在MapReduce搞不定上:))

SaaS是云吗?

这也是个好问题。

现在很多Software as a Service的服务商,例如Salesforce也都宣称自已提供了云计算服务,这又是怎么回事?我认为比较合理的看法是将云分成三个层次来看:

  • 第一层是硬件层(100台真的电脑,或100个EC2 Instance)
  • 第二层是框架(Hadoop、GAE或者微软的AZure等)
  • 第三层才是服务(记账、PDF生成等)

在这样的架构下,SaaS是属于第三层服务这个范畴。

也就是服务商先搞定第一、二层后,在其上建构自已的专业服务,例如Salesforce的主力服务是CRM,因此它通过云提供一系列的CRM API给开发者使用。举个夸张的例子(注意,这例子是假想的),搞不好Salesforce也是租EC2然后搞了个Hadoop,接着在上面用Java写了一堆API给人调用。这时它就是三层皆备,可称云而无愧了。

另外类似的例子则是像Gmail、Google Reader等,这些都是基于GAE的软件服务(先搞定一、二层,然后建构第三层的专业服务)。

附录

原本我曾认为EC2的虚拟化可以做到将许多台实体电脑虚拟化成一台大的服务器,这样工程师就只需要针对一台“超级电脑”来写程式即可,如果是这样,那EC2其实也符合分布式运算的标准,但我查来查去只不断看到类似下面的解释:

EC2是为可以跨多台主机进行扩展的应用而设计的,而不是那些需要大量资源的更大的应用。(EC2 is more designed for applications that scale well across many hosts, rather than larger applications that require huge resources. ) 可扩展性:Amazon能让你方便地增加或者减少服务器,而不是为一台现有的服务器(Instance)增加更多的电力/内存/硬盘等。这在你的应用设计时就考虑可以跨多台服务器进行扩展,以支持增加的负载的时候效果最好。(Scalability: Amazon supports easily adding or removing servers, not adding more power/memory/disk to an existing server (instance). This works well when your application is architected to scale across multiple servers to support increased load.)

因此目前先初步认定EC2并没有提供这方面的能力,当然如果有错,欢迎指正。

后记

在研究期间叨扰了无数前辈,感谢他们牺牲周未时间情义相挺回答各种无趣的问题,在此致上最高谢意。

另外关于EC2 vs. Slicehost的成本或用哪家比较划算这档事,我也小小想了一下,从实际数据看来,如果只是小型的网站或是创业公司,从省钱的角度来看,应该要选Slicehost,因为它的初始成本最低,例如花个$20美元就可以有颇大的空间与流量可上线运行了。

但EC2/S3的好处则是安全性、稳定性与扩充性,而它最大的缺点则是成本相对较高,一个Instance开着不用一个月就要$72美元,如果生意好流量大那要交的费用就更多。

目前台湾地区用EC2的网站似乎并不多(Pixnet把资料存在 s3的站就多一点),可能主要是连线反应时间不够快所以接受度不高吧,但我们服务的客户本来就多在北美,所以没差。

作者简介

吕维德,台湾Macromedia用户组发起人,RIA博客d.CAT站长。


给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

好文章 发表人 miao eric 发表于
Re: 好文章 发表人 陆 超 发表于
资料补充 发表人 Lin Cong 发表于
为什么我觉得整篇文章都看过…… 发表人 Zhao Jeffrey 发表于
这篇文章有问题 发表人 pu chen 发表于
Re: 这篇文章有问题 发表人 yi li 发表于
把不一样的东西放在一起比较 发表人 Alex gemini 发表于
作者根本没搞清楚GAE和Mapreduce 发表人 lh fatr 发表于
垃圾 发表人 yang cobra 发表于
文章还可以,回复更精彩 发表人 张 凯峰 发表于
作者给我扫盲了 发表人 姜 毅 发表于
不错 发表人 litao cheng 发表于
好文 发表人 vincent xie 发表于
不是大家都可以乱叫云的 发表人 you water 发表于
Re: 不是大家都可以乱叫云的 发表人 Wu Alan 发表于
云云云,头都晕了 发表人 fan fan 发表于
简单明了 发表人 Wu Alan 发表于
云计算好比是一个很多服务器组成大容器(SaaS, PaaS,IaaS),随着访问增多会水(单个应用空间)涨。网格正好相反 发表人 w xc 发表于
hadoop GAE 发表人 tang xi 发表于
好文章 发表人 Chang Xiaodong 发表于
  1. 返回顶部

    好文章

    发表人 miao eric

    让我不再"云里雾里". 其实是不是可以让EC内部也采用GAE

  2. 返回顶部

    Re: 好文章

    发表人 陆 超

    同感.
    谢谢作者的精彩文章.

  3. 返回顶部

    资料补充

    发表人 Lin Cong

    作者讲的云计算现状很透彻 赞~
    一直以来就认为EC2(虚拟硬件服务)跟GAE(真正的云计算方案)是本质上不同的东西,不应拿来比较。(微软的AZure跟GAE提供的方式好像类似,我了解不多..)

    补充些资料:
    关于GAE程序无法迁移的问题 其实有个更厉害的解决方案:appscale
    code.google.com/p/appscale/
    这个项目基于gae sdk修改,利用hadoop,HBase等开源技术,构建了一个GAE backend环境。目标是让GAE程序无需修改就能run在这个环境之上。
    它可以跑在EC2的环境上,提供了虚拟镜像下载。(我还没有试过部署...)。值得关注这个项目。

  4. 返回顶部

    为什么我觉得整篇文章都看过……

    发表人 Zhao Jeffrey

    ATT

  5. 返回顶部

    这篇文章有问题

    发表人 pu chen

    Google的GAE谁说过就是MapReduce做的?实现现在的GAE根本就没有MapReduce的用武之地!原文中“Hadoop是Aapche基金会里一个基于Java的主要计划,基本上可视为开源版的GAE”,看清楚GAE是Google App Engine,作者估计都没用用过GAE,就来这里谈论,这是对读者的不负责。

  6. 返回顶部

    把不一样的东西放在一起比较

    发表人 Alex gemini

    GAE 不算是商业云,ec2 和s3 才能算是商业云,可以面向企业的.
    MapReduce 或者包括hadoop 是用来计算的云,主要面向开发者.
    yahoo ,facebook 或者gmail 这种算是互联网云,用来提供给最终用户的. 都属于不同领域. 不能简单的认为xxx 是不是云或者不是, 最重要是有人用,而不是概念就好了, 说不定将来我们一起搞个月亮计算或是商业太阳的呢,名字很重要.

  7. 返回顶部

    作者根本没搞清楚GAE和Mapreduce

    发表人 lh fatr

    两者毫无关系。当然,作者有一点说对了,那就是他们都是分布式协同应用的框架。

    只不过,GAE是用来搞定web之类在线交互应用的,mapreduce是搞定离线分析的,两者风马牛不相及。事实上,google目前并没有推出针对mapreduce框架的服务

  8. 返回顶部

    垃圾

    发表人 yang cobra

    完全是垃圾,文中所有超链接都用了同一个站点的转向:ria.richtechmedia.com/go.php?,Infoq是SEO的试验场吗?还是...

  9. 返回顶部

    文章还可以,回复更精彩

    发表人 张 凯峰

    文章看到一半,觉得没什么新的东西。只不过是囊括了目前网上几乎能搜罗到的所有的信息,综合了一下而已。而且现在云计算必谈EC2和GAE,要知道,现在云计算根本没有标准,不同的厂商有自己的理解,相反,我认为wikipedia的定义解释才是万变不离其宗。

    看到了楼上各位的回复评论,才觉得这样的一篇文章有了这些评论更显精彩,也更显丰富值得收藏。

    云计算有两个问题是绕不过去的:安全和标准。

    参见拙文:www.zhangkf.com/?p=160

    另外,现在有了所谓开放云端宣言:

    jerrylovesrebol.blogspot.com/2009/03/blog-post_...

  10. 返回顶部

    Re: 这篇文章有问题

    发表人 yi li

    可能理解有问题吧

  11. 返回顶部

    作者给我扫盲了

    发表人 姜 毅

    在一篇文章中能看到详细的描述与综合,真实太好了。各位前辈们的评论也都很有特色,InfoQ确实是个交流心得的好地方。

  12. 返回顶部

    不错

    发表人 litao cheng

    MapReduce部分描述的不好,大家很容易以为mapreduce和树形结构有什么关联。。
    Reduce需要从所有maper获取其负责key对应数据,然后进行某些合并运算,输出最终结果。

  13. 返回顶部

    好文

    发表人 vincent xie

    好文章,澄清了我脑中原来很多云里雾里的概念,谢谢!

  14. 返回顶部

    不是大家都可以乱叫云的

    发表人 you water

    很不喜欢类似这样的新概念,除了GAE,像EC2/Salesforce号称云计算的东西不过是用旧有的技术旧有的运作模式来"炒旧饭"而以,按这样的话,QQ绝对可以把概念炒为云IM,百度就可以叫作云搜索,新浪直接叫云新闻算了,汗....

  15. 返回顶部

    云云云,头都晕了

    发表人 fan fan

    ssss

  16. 返回顶部

    简单明了

    发表人 Wu Alan

    文章简单明了得说明了云的相关内容。

  17. 返回顶部

    Re: 不是大家都可以乱叫云的

    发表人 Wu Alan

    SUN老大说云计算其实就是服务器硬件的性感名称

  18. 云计算好比是一个很多服务器组成大容器(SaaS, PaaS,IaaS),随着访问增多会水(单个应用的资源)涨。网格正好相反,是水滴分解后在容器里乱飞(计算网格,数据网格),很复杂的计算任务一会就完成了。

  19. 返回顶部

    hadoop GAE

    发表人 tang xi

    作者把hadoop和GAE等同起来明显错了
    hadoop只是做分布式的数据分析还称不上一个”application engine“

  20. 返回顶部

    好文章

    发表人 Chang Xiaodong

    好文章。

    EC2到底是不是云?
    这要看你怎么定义云这个字,以我而言,我倾向认为MapReduce与分布式文件系统是云计算的主要特色,因此在这个定义之上,EC2并不符合首要条件。

深度内容

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。

Java Remoting远程服务(下)

随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。

深入浅出Node.js(四):Node.js的事件机制

专栏的第四篇文章《Node.js的事件机制》。之前介绍了Node.js的模块机制,本文将深入Node.js的事件部分。

采访和书评:精通HTML5和CSS3设计模式

《精通HTML5和CSS3设计模式》一书记录了目前HTML5应用程序的许多常见设计模式。InfoQ对该书作者之一Dionysios Synodinos进行了采访,谈到了该书以及HTML5应用的相关内容。