揭秘云计算

日期: 2009-06-01 作者:Brett McLaughlin 来源:TechTarget中国 英文

  如果您恰好对云计算有基本的理解,您的技能完全用得着。但是,说到真正构建一个应用程序,您使用什么平台?Google和Amazon都名声在外,所以流行度不是问题。如果您是Microsoft拥护者呢?是否有适合您的选择?本文将带领您学习如何明智地看待云,并根据特定的应用程序需求选择适当的平台。

  有关云计算的困惑

  最近,人人都在谈论“云”。不论是参加某个技术会议,或者与任何编程人员聊天,您的耳中很快就会充斥着诸如“云计算”、“Google App Engine”和“Amazon 托管应用程序”之类的术语。

  假设您已经清楚什么是云计算(本文的 参考资料小节就有很多文章可以帮助您弄清楚什么是云计算)。如果云计算最终只是一种编程语言的话,那么只需对它有基本的理解就可以真正编写代码。例如,一旦理解了Java?对象的基础知识,就可以开始编写代码,并根据需要学习更多其他的知识。

  但是云计算不是一种语言。实际上,它是一种范例。即使您理解了云计算是指在Internet上的远程服务器上运行并由它们托管的所有服务,但是在编写任何代码之前,仍然还需要做出很多的决定。首先,为云计算需求选择哪种平台?

  有Amazon的解决方案,有Google的解决方案,也有Microsoft?的解决方案,还有像AppNexus和GoGrid这样的一次性解决方案。而它们并不是完全相同的!换句话说,不能像比较两个苹果一样简单地比较它们。实际上,试图按照不同的特性集合对它们进行分类就像在一个非常大、非常混乱的迷宫中行走一样困难。但是,通过非常细心的考量,还是可以根据您自己 的特定的应用程序需求做出决定。

  该领域中的主要参与者有哪些?

  在各种不同的框架之间作出选择之前,至少需要理解可供选择的对象。本文的介绍比较简要,但是,您仍然应该使用参考资料补充关于这些内容的信息。

  Amazon EC2

  Amazon EC2是Amazon Elastic Compute Cloud的简称。“Elastic Compute Cloud”不是一个很直观的名称,但Amazon的解决方案确实很有用。EC2实际上是一个Web服务,通过它可以请求和使用云中大量的资源(换句话说,是由Amazon托管的资源)。EC2提供从服务器到编程环境的所有东西。

  Amazon的解决方案的特色在于灵活性和可配置性。您可以请求想要的服务,根据需要配置它们,设置静态IP,并显式地设置自己的安全性和网络 — 换句话说,您拥有很多的控制权。此外,Amazon拥有很好的声望和良好的按使用量收费(pay-only-for-what-you-use)的模型,EC2是云计算拼图中一个重要的、受欢迎的部分。

  Google App Engine

  从技术上讲,Google的App Engine是Amazon EC2的一个竞争对手,但是它们之间又有很大的不同之处。Amazon提供灵活性和控制(在本文中您将了解很多这方面的内容),而Google则提供易用性和高度自动化的配置。如果使用App Engine,您只需编写代码,上传应用程序,剩下的大部分事情可以让Google来完成。

  和Amazon一样,Google有很大的知名度,也有很大的缓存。与Amazon不同的是,Google开始是免费的,只有当传输量较大,并使用较多计算资源时才收费。另一个不同点是,Google是以Python为中心的架构和设计。若要使用Google App Engine,则需要使用Python。这个限制可以被视作一个局限性,也可以被视作一个有帮助的、简化问题的约束。

  Windows Azure

  Microsoft则以一种完全不同的方式实现云计算。就像“I’m a PC, I’m a Mac”这句广告词一样,Microsoft致力于提供一个非常丰富的、专业的、高端的计算环境。因此,Amazon EC2和Google针对的是那些仍然在vi中使用Python并喜欢与网络协议打交道的人,而Microsoft的Azure产品则直接瞄准Microsoft开发人员。Visual Studio、可视化工具和可视化环境使得Azure对于每天使用C#和SQL Server的人来说非常亲切和舒服。

  就像Amazon EC2不同于Google App Engine一样,Windows Azure与两者都不相同。最显而易见的是,Azure就是Windows?。它是基于Windows的;它针对使用Windows的人;它涉及C#和SQL Server、.NET以及Visual Studio。Azure就像是SharePoint加上一点CRM。很快您就会看到,选择使用Azure很少是因为特性,而是因为您习惯使用的平台。

  其他解决方案

  EC2、App Engine和Azure是目前云计算领域的“三巨头”。但是也许您不知道,并不是只有它们三个。还有很多其他的选择,例如GoGrid和AppNexus。如果您不知道其他这些工具,也无需过分担心。事实上,如果您是“典型的”想使用云计算的开发人员,您一般会选择Google、Amazon和Microsoft提供的这三个解决方案中的其中一个。如果您还知道这三巨头以外的其他东西,那么您甚至可能不需要阅读本文。

  其他产品不同于Google、Amazon和Microsoft,同样它们彼此之间也各不相同。所以,就像本文后面的内容强调的那样,您对平台的选择更大程度上取决于您的应用程序 需要什么,而不是您的平台提供 什么。

  在本文后面的大部分内容中,您将遇到很多关于您的技能、偏好和应用程序需求的基本问题。每个问题让您进一步倾向于某个特定的云计算平台解决方案。本文的想法是让您根据自己的应用程序的功能和您的技能集选择最佳的平台。

  您是否已经投资了一个数据库(和模式)?

  应用程序最终是围绕着数据的。应用程序显示数据、搜索数据、组织数据 — 几乎所有应用程序最终都会存储数据。那么,您已经做出的关于数据库的决定,对于选择哪个云计算平台有很大的影响。

  从头开始?您的选择范围会很大

  如果您只是构建应用程序,而没有已有的数据,那么您将有很大的自由度。您可以灵活地决定如何存储数据,甚至可以随意地成批导入已有的数据。所以,这对于您来说不是问题。但是,如果您有很多已有的数据,则另当别论。

  您是一个有经验的数据库程序员吗?

  如果您喜欢某种特定的数据库,甚至到了无法自拔的地步,那么在选择云计算平台时便要加以考虑。特别是,Google的App Engine要求使用Google的数据库。Google的数据库不好吗?它会损坏您的数据吗?它不支持SQL吗?都不是。但是,如果您习惯于对自己的数据库服务器进行细粒度的控制,并且也习惯了您喜欢的MySQL或PostgreSQL版本特有的SQL,那么Google会让您失望。

  然而,这正是Amazon EC2表现突出之处。Amazon实际上只是在某处运行的一个盒子,它让您感觉非常类似于根访问。您可以安装任何需要的软件。更妙的是,可以将数据存放在Amazon的Simple Storage Service(S3)中,它在数据方面有一套更完备的特性。但是,由于已经可以访问命令行,您可以做想做的任何事情。这意味着在进行数据库编程时可以最大限度地模仿自己习惯的环境。可以在命令行测试SQL命令,获得类似终端的响应,并进行基本的管理。如果您只是想让您的数据可以工作,那么没什么大不了的,但是,如果您需要花大量时间研究您的数据库以及它的幕后工作原理,那么任务可能非常艰巨。

  是否需要导入大量的数据?

  由于Google的特点是易于使用,有时候用命令行可以轻易完成的事情对于App Engine来说却很难。将数据导入到Google的数据库比较冒险,也容易出错,而且您自己不容易修复那些错误。另一方面,Amazon的EC2大量使用了命令行访问。先进行批量的导入,然后修复错误,这种做法是可行的,甚至是受鼓励的。

  图1给出了基本的决策树。

                      

  图1. 您对当前的数据库有多大的热情?
 
  您是不是Python的拥护者?

  在选择云计算平台时,Python的问题是您将遇到的另一个决定成败的问题。简言之,Google只支持Python,它的一切都是围绕Python构建的。而Amazon则不是这样。虽然Amazon也允许使用Python—或者很多其他语言—但实际上Google App Engine最能体现Python的优势。所以,如果您想要一个方便的Python解决方案,那么Google App Engine是首选。

  也就是说,除非……

  ……您是UNIX高手

  有句话常被提到,现在也仍然管用:如果您渴望编译和运行程序之外的控制、命令行和所有Python工具,那么Amazon EC2是王者。Amazon乐于从命令行运行Python代码,这是EC2的优点,也是它的缺点。如果您喜欢在一个文件中编写文本,将它交给Python,并使用系统错误和命令行进行调试,那么您会喜欢Amazon,而且很可能会讨厌Google过于热心地“帮助”您。

  ……您要使用由C语言编写的扩展

  如果您不需要“由C语言编写的扩展”,或者觉得它是一种昂贵而不实用的奢侈品,那么可以跳到下一节。但是,如果您习惯于在Python中使用C扩展,那么应该清楚,Google并不支持那些扩展。Google主要还是限于Python标准库。虽然也有用于Google的datastore、fetch和mail服务的API,但是除此之外没有更多其他的东西(一个值得注意的例外是Django)。同样,这还是与控制有关。您是一名Python老手?Amazon也许最适合您。开始使用Web服务,并且喜欢使用Python,但是还不是特别精通这种语言?那么Google最好。

  图2显示如何对上述情况进行分解。

                 

  图2. 您使用Python吗?您想要多少“额外的东西”?
 
  您是Microsoft的拥护者?那么选择Azure

  这里有一个简单的问题:您打算在“起点”和/或“终点”使用Microsoft作为主导平台吗?如果是这样,那么Azure也许是最好的选择。我们来看看以Microsoft为“起点”和“终点”的真正含义是什么。

  Microsoft是您的起点吗?

  您是铁杆Microsoft开发人员吗?特别是,您是否在Visual Studio中使用Visual Basic、Visual C#或与Silverlight等相关的技术完成超过2/3的编程。如果是这样,那么您几乎肯定要选择Windows Azure。您的整个开发框架都是基于Microsoft的,所以您会对Azure感到习惯。更重要的是,您不需要像使用Amazon/Google那样学习或重新熟悉很多非Microsoft的语言和技术。

  Microsoft是您的终点吗?

  这个问题按理说是多余的。大多数主要使用VB、C#等语言的开发人员都以Microsoft平台作为他们的用户基础。如果您想瞄准现有的Microsoft用户,并且不太担心跨平台兼容性,那么完全可以坚持使用Windows Azure。Azure有很多连接Microsoft平台的非常有用的钩子,所以由Azure托管的基于云的应用程序可以无缝地与已有的Microsoft应用程序集成。对于普通的Microsoft用户,具有和已有的Word、Internet Explorer以及其他基于桌面的应用程序一样的感观,甚至可以与它们交互的基于云的应用程序具有很大的价值。

  您是否在抵制和曲解Azure?

  在您开始曲解Azure之前—或者声称我曲解了Azure之前—您应该意识到,无论是起点还是终点平台,Azure绝对不是仅限于Windows平台。您可以从任何平台访问基于Azure的应用程序,并且可以使用C#以外的其他语言进行开发;例如,Python和Perl就可以。云的一个美妙之处就在于,语言和服务器技术都在云中。也就是说,它们对于大多数用户而言是透明的。

  然而,认为以Mac OS X系统为目标平台的Python开发人员将使用Windows Azure,这种想法最多是有一点愚蠢。实际上,只是没有那么聪明而已。如果将Azure的优势与某些不知名的新贵比较,那么Azure的纯专业特质也许会让您倾向于在以Microsoft为中心的、基于云的环境中使用非Microsoft技术。但是,不能这么看。您必须将Azure与来自Google和Amazon的同样成熟的解决方案相比较。在此情况下,显然最好使用在很多方面同样强大,而本质上则更加开放,可用于多种平台和非Microsoft技术的平台。图3更直观地阐释了这一点。

                   

  图3. 喜欢PC?您将喜欢Azure
 
  但是我不想使用Azure!

  反过来也是一样:以Microsoft为目标平台的Microsoft开发人员并不是必须使用Azure。您也可以享受Amazon EC2的灵活性和威力,或者Google App Engine很“酷”的特性。如前所述,Amazon和Google都提供一些引入注目的特性。虽然如此,还是要问一下“为什么?”除非您打算学习新的技术—当然,这很有趣,通常也很值得—否则您很难找到理由构建一个纯Microsoft的解决方案,然后将它放入到一个非Microsoft的云中……更何况原本有一个很好的Microsoft云是现成的。与其在这方面付出这么多的努力,不如优化一下您的应用程序,或者重新构建一个应用程序。

  您需要多少资源?您有多少资金?

  在开始的数个月,Google App Engine与Amazon EC2在两个关键的方面有所区别:

  ·Google App Engine可以免费作为平台使用;而Amazon EC2则不可以。
  ·Google App Engine有报价限制;而Amazon EC2则没有(至少在实际意义上没有)。

  但是,到了2月末,虽然Google仍支持一开始的免费使用,但是当使用的资源超出免费范围时,则需要付费。这是Google的一个巨大的胜利,使他们从资源受限步入资源相关(resource-interesting)的阶段。

  什么是资源相关?

  我使用术语“资源相关”表明,像Google App Engine这样的一种模式— 一定范围内免费,超出范围则收费—对于几乎任何其他模型都有巨大的优势。首先,一开始使用Google App Engine是免费的。这意味着您可以试用App Engine,在上面运行应用程序,甚至公开部署应用程序,所有这些都不用掏钱。所以这种“一开始免费”的方法有很大的优势。

  然而,有趣的是,使用这种模式时,实际上可以不断估计带宽,逐渐扩展应用程序,直至超出免费范围。而Amazon EC2也允许根据需要扩展资源,所以一旦进入付费模式,Amazon的解决方案与Google的解决方案之间并没有太大的差别。

  如果按用量收费,Google有什么优点?

  Google一开始免费的方法对于Amazon是一个优势:您可以先进行调优,并重整资源,延缓进入收费区域的进程。每个认真的程序员都知道,应用程序的第一个版本通常存在两种问题:

  ·功能bug。一些功能无法工作,或者无法正常工作,需要修复。
  ·资源bug。连接没有被关闭,或者池没有在使用,或者有什么东西在妨碍应用程序的运行,需要修复。

  Google的方法的好处在于,在为自己的错误买单之前,您可以跟踪这些资源bug。

  就此下结论?Google只是稍微占优,但也许根本无法影响您的决定。

  Windows Azure如何收费?

  与App Engine和EC2一样,Azure根据用量定价。使用Azure服务越多,价格越高。与App Engine和EC2的另一个类似之处是,Azure根据计算机时间(CPU使用)、带宽(包括进和出)和存储定价。它还根据事务(例如GET和PUT)收费。

  当然,这种定价方法还没有发布(截至2009年3月初),所以每个人还在拭目以待,看到底会怎么样。不过,老实说,预计定价会比Google App Engine和Amazon EC2高一点,但不会差太多。同样,定价很可能不会成为是否选择Windows Azure的决定因素,就像Google或Amazon一样。

  结论:简单化,但不要过于简单化

  这里很容易一概而论。例如,您也许认为如果您喜欢Python,并且是新手,就选择Google;如果是Python高手,就选择Amazon EC2;如果是Microsoft拥护者,那么使用Azure。在很多情况下,这种过分简单的观点倒也适用。但是,如果完全以此为依据做出决定,最终可能会失望。Amazon的确可以提供很强的功能,但是要想快速建立解决方案,还是Google更胜一筹。选择Google时所花的时间很短,而且很少出错。

  Amazon要求您知道自己在做什么。您可能需要打开几本书一边看着,更讽刺的是,您可能会经常使用Google弄清楚每件事(是搜索引擎,而不是App Engine)。但是,额外的工作可以赋予您更大的能力,以及事实上无限的资源。

  简单来说,Azure因Windows平台而显得出色。虽然有一些瑕疵,但是它对于Microsoft程序员来说比较直观,而且应用程序用户从平台的角度来看会觉得它比较舒服。

  那么,您怎么做?一个好的程序员总是这样做:多学习一些工具,在合适 的情况下使用它们。这胜过用占卜的方式来决定。从Google App Engine入手,有一定基础后,用Amazon EC2作为平台开发同样的应用程序。打开Visual Studio,看看用C#可以做些什么,然后将您的应用程序部署到Azure。所有这三个主流平台都体验一下,当您有一个有特定需求的应用程序时,就可以受益匪浅。

  关于作者

  Brett McLaughlin的著作上过畅销榜并获得过非小说类图书奖。他著述丰富,包括计算机编程、家庭暴力、分析和设计,总印数超过100,000本。他编写、编辑和出版技术书籍快十年了,除了惬意地使用文字处理程序写书以外,他还喜欢弹奏吉他、和两个儿子在屋子里追逐嬉闹、和妻子观看重新开播的Arrested Development。他的新著Head First Object Oriented Analysis and Design荣获2007 Jolt Technical Book大奖。经典著作Java and XMLL仍然是关于在Java语言中使用XML技术的权威书籍。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐