Windows Azure与Amazon EC2与Google App Engine


159

从开发人员的角度来看,您会考虑针对大型社交网络应用程序使用哪个平台?如果您可以提供一些您认为是哪种替代方法的优势的详细信息,那将是很好的。


2
我最近一直在比较同一件事-在博客上发布了我的优点/缺点。Azure已淘汰(基于小型项目的成本),但是EC2和Google App Engine都是有力的竞争者!blog.dantup.com/2010/10/...
丹尼Tuppeny

2
这个问题应该是社区维基。

机架空间ftw!
格雷格

Answers:


227

我已经在GAE(Python和Java)和Azure上编写了相同的应用程序。我可能会继续将两者用于不同的事物。以下是我会不断更新的一些想法:

使用GAE的原因:

  • 您基本上每天可以获得一台免费的虚拟机。使用Azure,即使您没有一个网站访问者,您每月也要支付近100美元。如果您的数据库超过1GB,则需要额外支付$ 90($ 9-> $ 99)用于存储。更新:Azure现在具有不同价格的各种VM和DB大小。详细信息在这里
  • GAE的付款是合理的-大多数资源是按请求/ GB / MB收费的,而且每天都会免费分配大多数资源。但是,在2011年11月,它与Azure和AWS一起按实例小时为Web服务器收费。详细信息在这里
  • GAE的管理负担最轻。设置完成后,部署和重新部署很快,并且它们将自动进行所有操作。例如,您不必担心您的应用程序正在使用多少服务器,如何分片数据,如何进行负载平衡。
  • 邮件工作正常。在撰写本文时,Azure不提供SMTP,因此您需要第3方服务器。
  • 与许多Google产品(日历,邮件等)的完美集成。如果您不想控制用户群,可以将用户管理委派给Google。
  • 使用GAE,您将知道它们添加到商店的所有功能。使用Azure,您会感觉到Sql Azure数据库将获得大多数人的喜爱,但价格会更高。Azure存储可能具有最多的陷阱。没有关系完整性,没有顺序,您将更多地研究内存上下文。与Azure Tables相比,GAE的商店具有更少的限制和更多的功能。
  • 如果您已经在使用基于Python或JVM的语言,则是一个不错的选择。如今,许多语言都可以编译为Java字节码。
  • 更新应用程序非常快。对于Python,我有一个快捷键设置,完全不需要时间。现在,我使用Java的Eclipse插件,并且效果很好。Azure更有趣。
  • 本地测试的应用程序可能会在(没有(很多)变化的情况下)在云上运行。使用Azure时,配置有所不同,我花了一些时间在正确之前停止,删除,构建,上传,启动。
  • GAE具有出色的UI,其中包括日志查看器和数据编辑器。使用Azure,您当前必须为此寻找外部查看器/编辑器。
  • GAE使您可以在同一数据存储上运行多个版本的应用程序。您可以部署,测试版本,然后在准备就绪时设置当前的“实时”版本。如果出现问题,您可以改回来。


    使用Azure的原因:

  • App Engine数据存储的性能特征和成本影响将使您感到惊讶。如果执行除简单CRUD之外的任何其他操作,则您将需要比使用普通DB更加努力。没有临时查询。
  • Azure有两种存储方法,提供了更多选择。它们是作为关系数据库的SQL Azure数据库(SAD)和由非关系表,blob和队列组成的Azure存储。如果您在SQL Server中的投资则SAD将很容易移动,但也相当昂贵,可能不那么可扩展性。更新:App Engine在限定的Beta版中具有MySQL API。
  • 如果您采用SOA类型的方法,则Azure似乎设计得更好。他们的体系结构似乎受益于企业领域的经验。GAE似乎更专注于简单地提供网页。
  • 您可以在调试状态下运行应用程序,并设置断点等。
  • Azure拥有一个“分段”环境,您可以在其中部署到云,但是要使它运行起来才能使它生效。
  • 我将.Net用于其他方面,并且将它们与.Net集成在后端比使用GAE容易得多。(更新-在GAE上使用Java可以正常工作,而10秒的超时现在为30秒)。
  • 与许多MS“ Live”产品集成。

    因此,没有明显的答案。由于费用和易用性,我目前默认使用App Engine。我可能会将Azure用于非常面向MS的应用程序。我使用Amazon S3进行下载,但可能不会使用EC2,因为我更喜欢将应用程序级别下的所有内容留给专家。


  • 10
    理查德,也许Azure的另一个优点是拥有关系数据库。Bigtable的碎片在某种程度上是外国范式。
    hyperslug

    22
    App Engine还允许您暂存多个版本的应用程序。每个版本都有自己的URL,您可以对其进行测试,并且在准备部署时,只需将该版本标记为默认版本即可。易于测试,部署,如有必要,可回滚到以前的版本。

    Azure完全按照使用量收取费用,没有承诺,而只是按使用情况收费,每月承诺的最低费用不是99美元。
    Akash Kava

    1
    microsoft.com/windowsazure/pricing上显示有关SQL Azure的信息:“ * Web Edition:高达1 GB的关系数据库= 9.99美元/月* Business Edition:高达10 GB的关系数据库= 99.99美元/月*数据传输= 0.10美元/ $ 0.15 out / GB-($ 0.30 in / $ 0.45 out / GB在亚洲)“
    Richard Watson

    1
    App Engine现在具有与块存储一起提供的SQL支持。 code.google.com/apis/sql
    devnul3

    176

    我显然有偏见-我在App Engine团队中从事开发人员关系的工作-但这是我的看法:

    它们不是直接可比的。您可以为其中的任何一个编写一组应用程序,但是每种情况下您都将编写不同的应用程序。App Engine提供了受限制的运行时环境-无需写入文件,不提供套接字等-以及非关系型DBMS。但是作为回报,您将获得一个无限扩展的运行时环境,并有合理程度的保证,您的应用程序将按需要扩展。

    另一方面,Azure提供了一个受约束较少的环境,该环境使您可以编写更多的应用程序,但是由于您自己实现了更多堆栈,因此需要编写更多的应用程序,并且提供了更为宽松的可扩展性保证。

    最后,AWS提供了最终的自己动手解决方案。它们提供硬件和存储,仅此而已。您可以从头开始构建堆栈,对其进行维护,对其进行升级等。当且仅当您按比例编写应用程序时,您的应用程序才能扩展,这不是一个小挑战。但是,您可以完全控制硬件。

    我的建议是:如果您的应用适合App Engine模型-社交网络应用很可能是一个很好的例子-在App Engine上编写您的应用(您可以选择Java或Python)。它更便宜,并且编写可扩展的应用程序要容易得多。

    如果您的应用程序不适合GAE模型,请选择Azure或AWS,这取决于您是否为MS堆栈编写程序以及要对执行环境进行多少控制。如果您的大多数应用程序都适合GAE,而小部分应用程序则不适合,则可以考虑采用混合模式-例如,在GAE上实时投放广告,但在S3上进行存储,或在EC2上进行批量处理。



    @Cristian我不确定您想听什么-任何服务都偶尔会停机。其中包括App Engine和EC2。
    尼克·约翰逊

    @尼克·约翰逊(Nick Johnson):没错,任何服务都偶尔会停机,而且我不希望正常运行时间达到100%。另一方面,该问题看起来并不像停机时间问题。在我看来,这似乎是Google App Engine的局限性,即您的代码必须在相当短的时间内运行。我对GAE不熟悉,因此如果我误解了某些内容,请纠正我。
    Cristian Ciupitu

    1
    @克里斯蒂安·阿 是的,由于执行时间太长而引发了异常本身,是的,但是速度降低的原因是一些临时的性能问题。
    尼克·约翰逊

    我同意“它们不具有可比性”。比较这些服务就像比较苹果和橘子。两者都是水果,仅此而已。
    直到

    27

    对我而言,锁定是决定性因素。

    如果您选择使用Google,则您的应用程序将只能在Google上运行。如果一段时间后您发现自己不满意,那您就陷入困境。

    如果选择MS,则您的应用程序将仅在Azure上运行。一样。

    在Amazon,您将获得一个(或多个)虚拟服务器,它们的运行方式与您习惯使用的计算机完全相同。不满意?拿起您的应用程序,在真实的硬件上安装,完成。


    3
    GAE可以运行相当标准的Java Servlet应用程序,并且可以使用基于标准的持久性。
    斯蒂芬·丹尼

    4
    GAE完全开放(尽管您需要坚持使用JDO存储API。)

    1
    Google仍然限制您一次可以获取的数据量吗?他们的锁定基于数据而不是代码。
    Mark Ransom

    4
    您可以使用AppScale在EC2或您想要的任何其他位置上运行应用程序:appscale.cs.ucsb.edu
    Amir

    3
    今天遇到了这个问题,一个人能够在一周内从Google过渡过来。他们还承认,如果从一开始就没有采用好的做法,那可能要花费数月的时间。carlosble.com/?p=719
    Mark Ransom

    20
    • 如果您是.NET Developer-请转到Azure。
    • 如果您使用的是Python或Java,请访问Google。
    • 如果您使用的是Ruby,请转到Amazon

    我现在的个人选择是使用Java的Google(即使大多数时候我是.NET)。考虑成本-它们的架构很难比较。

    查看本文-http: //www.infoq.com/news/2008/11/Comparing-EC2-App-Engine-Azure


    8
    并非所有.NET开发人员都应使用Azure。Amazon EC2是他们的完美选择。但是+1是指引用优秀文章。
    Andrew Arnott

    是的,亚马逊在某种程度上是虚拟机的自由,但社区最初主要是面向Ruby的……

    1
    AWS确实在其Windows 2003 Server AMI上支持.Net开发人员,但我怀疑有很多.Net开发人员宁愿部署到尚未在AWS上实现的Windows Server 2008。如果您是AWS论坛的常客,那么您可能会发现Amazon在这个问题上显得有些沉默。
    理查德·多曼

    2
    我从行业上是.NET开发人员,但是在网站上获得0次点击的情况下,使用Azure使用网站的价格成为了Google的选择。我写我的博客上一些比较:blog.dantup.com/2009/12/... blog.dantup.com/2009/12/...
    丹尼Tuppeny

    4
    如果您使用的是Ruby,请考虑使用Heroku或EngineYard而不是Amazon。
    andy318

    20

    像Arachnid一样,作为一名Googler,我可能会有偏见。不过,我也是亚马逊的股东,所以偏差可能会抵消一部分第一;-)。没有Azure经验(尽管我也持有MSFT股票,所以我希望他们也做得好-另一个偏见;-)。

    我非常简单地认为,App Engine 只需通过编码即可轻松地(在其限制范围内)为您提供工作能力-无需系统管理任务。AWS是更加灵活,但你需要大量的系统管理工作(并没有真正琐碎的话)采取的灵活性优势。因此,最后我要接受Arachnid的建议:如果App Engine可以满足您的需求,那就绝对要这样做;如果您需要更大的灵活性,AWS似乎是可行的方法(除非Azure的“我不知道”功能应该更好地匹配-但我认为,无论Azure可以做什么,例如AWS,AWS都将变得更加灵活)甚至可以选择要使用的操作系统)。


    14

    我刚刚开始使用Azure,并且给您留下深刻的印象,您可以在F#中完成它:http : //code.msdn.microsoft.com/fsharpazure!到目前为止,它是唯一允许人们以托管方式使用函数式编程的云平台(当然,您可以在EC2中执行Haskell ...或在Algol 68中进行操作)。Visual Studio集成的质量给我留下了深刻的印象-您将使用一个真实的SQL Server存储来测试本地的“云” DevFabric,因此可以在上载之前进行播放。GAE可以做到吗?看着Azure,学习F#的VS(来自Linux和OCaml),我希望很早以前就切换到MS堆栈。创建SQL存储并在VS中检查它非常容易-非常方便。开源没有匹配的工具集,是时候人们对MS给予公平考虑了-他们在这里做得很棒。我肯定会坚持使用Mac OSX基础(双重引导进入Vista),而我的直觉是,借助Azure可以在本地开发的能力,我将获得一个单独的Vista盒子用于Azure开发。当您来自Unix管道世界-PowerShell,SQL和LINQ,C#和F#(这是我的关键原因)时,.NET确实是不堪重负的-但事实证明,这一切加在一起并且值得一读,而不是Linux 在任何情况下,Azure都会扩大您的视野。


    2
    Azure甚至没有与Amazon Elastic Map Reduce(基于开源Hadoop)功能远程匹配的功能。它甚至不允许以编程方式设置工作者角色的数量。

    3
    微软显然正在尝试通过他们的.NET开发人员基础货币化,而利用Microsoft堆栈确实有​​好处。我不敢相信仅此一项就能弥补昂贵,庞大的成本核算模型。云计算的重点是零维护即用即付的弹性,而Azure尚未提供。

    您可以在GAE中使用Clojure。the-deadline.appspot.com/login

    8

    尽管我非常喜欢GAE,但在我当前的项目中使用EC2 over GAE的主要原因之一是,我需要能够从世界各地的数据中心为应用程序的前端提供服务。GAE一次在一个数据中心运行。例如,我需要亚洲的用户访问亚洲的服务器,以获得对我的应用程序最快的响应时间。加上管理dns,负载平衡器,所选数据库,将水槽推入S3进行Hadoop处理数据等功能,EC2成为真正引人注目的解决方案。


    5

    要考虑的一些事情:

    加快步伐:您能在多快的速度下在选定的环境下提高生产力?现有哪种类型的文档?它们是否清晰易懂?

    成本:成本是一个因素,但是如果您制作的商业应用程序实际上会吸引客户,那么这些都是可行的选择。如果您假设Azure(在一个“小型”实例上使用一个proc)每月需要花费约90美元才能使用24x7,那么在这段时间内您可以为多少用户提供服务?添加第二个实例以实现冗余...如果您的流量需要,它仍然不会花费那么多。如果没有,为什么您要在云中而不是在廉价的托管服务提供商那里?实现这一点需要花费更多的成本因素。AWS是您自己的解决方案。要获得一个稳定且管理良好的解决方案,需要付出很多努力。Azure和GAE开箱即用。在我看来,由于必须进行的工作,AWS是最昂贵的。您是否真的需要以如此精细的级别对其进行控制?如果是这样的话,

    能够做自己想要的事情:一直使用AWS。Azure排名第二,GAE排名第三。如果您想要的是Java和Python,这没什么大不了的。如果您想用C ++进行关系数据库或广泛的多线程数据处理,那就大了(不知道现在有没有这样做吗?)。

    便携性如何?您以后可以将其带回自己的服务器场还是将其移至另一个云服务器场?它们在一定程度上都是可移植的。

    有很多需要思考的...自己仍在学习。


    TyphoonAE和AppScale是在其他地方运行GAE应用程序的绝佳工具。

    4

    如果您需要手动启动实例以满足需求,则它不是云。

    Azure和EC2只是具有某些服务的虚拟服务器。

    更新:

    EC2和Azure确实为您提供了在负载下自动管理启动新实例的选项,但是您仍然必须进行管理。您可以为处于空闲状态的实例付费。

    GAE可以自动解决此问题,并且仅在请求期间运行代码时才向您收费。


    1
    我认为Amazon CloudWatch解决了基于流量启动其他实例的问题。

    1
    我在Azure上看到的最常见的演示之一是可伸缩性演示,在该演示中,他们编写了一些代码来设置阈值以根据负载来启动或关闭Web Worker。其覆盖在窗口azuer trainining试剂盒:microsoft.com/downloads/en/...

    4

    这是其他一些注意事项。

    GAE-在平台上作为服务栈的地位高于AWS和Azure,所有流量均通过其ghs.google.com DNS路由,通过其一台机器动态加载为您的网页提供的服务,从而使价格保持较低水平。使用这种方法可以很好地缩放比例,而Cons不是静态ip,容易被过滤或阻塞。由于没有静态IP限制,您将无法设置任何特定于站点的https证书。

    AWS和Azure为您提供了几乎是静态IP和专用VM,可以满足诸如https证书之类的基本要求。您还将获得关系存储支持。反映此专用VM事实的成本也更高,您将按40美元/月的块数扩展每个VM。优点是,由于您可以自己获得虚拟机,因此不受GAE 30秒cpu处理限制的约束,并且可以运行更大的任务。

    因此,如果您考虑在过滤后的国家/地区建立客户群,或者希望使用静态IP来进行自己的DNS设置,或者需要使用关系数据库或30秒以上任务的需求。使用AWS,Azure会更加友好。


    3

    查看每种云产品提供的解决方案,然后进行混合模型。有些问题需要使用锤子,有些需要螺丝刀。了解您的工具并将其应用于正确的问题。


    3

    我的信誉不足,无法对上面的答案之一发表评论。任何这些云解决方案的适用性取决于许多因素,包括您的需求和技能。

    我有一个需要nosql数据库的社交网络项目。如果AppEngine对各种框架有更好的支持,它将是一个很好的解决方案。带有nonrel适配器的Django可在Python GAE上运行,但出于多种原因,我更喜欢Rails。Rails3已经发布了几个月,但社区或GAE团队中尚未有人编写任何食谱来支持它。除非您具备掌握红宝石和Rails内部构件,jruby和GAE内部构件的技能来编写自己的食谱,否则,您只能依靠其他人来进入平台。

    AWS要做的工作很多,但至少您可以使用任何工具进入平台,并通过管理方式解决许多问题,而不必担任内部开发人员或更高权力的要求者。

    对于Ruby开发人员,我对Heroku和EngineYard的抱怨是关于数据库如何扩展的谜。它们如何缩放?

    就我而言,我选择了NoSQL解决方案,而Mongo似乎是一个不错的选择。MongoMachine似乎是Heroku或EY之类的推荐解决方案,但价格昂贵。$ 2.50 / GB的存储空间?GAE或EBS的存储空间仅为$ 0.10 GB /月。


    1

    我最近才开始尝试Google App Engine,对于一个网络社交网络,我相信它将满足您的所有需求。很容易掌握它,可以与Python或Java一起使用。的确,它不能使您访问文件,但是对于您的应用程序,GQL(它们提供的数据库的类似SQL的接口)可能绰绰有余(并且非常健壮)。

    您可能要考虑的一件事是,GAE上的应用程序可以使用一个界面,该界面将允许具有Google帐户或域中使用Google Apps的帐户的用户登录(快捷方式)。您可以选择其中之一。因此,如果您已经在使用Google Apps网站,那么Google App Engine将是您的理想选择,因为您的用户无需注册新帐户。

    编辑:正如Arachnid指出的,这不是您不能编写自己的登录系统。对不起,如果我让你担心的话。

    至于其他两个选择,我只阅读了它们,而没有对其进行测试。但是我相信GAE从我的研究以及您提到的高价中提供了一个更简单的框架。

    无论如何,您都可以使用空间和带宽的免费配额试用GAE,并查看它是否满足您的需求。

    祝你好运。


    Nitpick:GQL不是数据库。GQL是用于Python运行时的类似SQL的查询语言,写在数据存储区的顶部。您甚至不必使用它-还有Query API。
    尼克·约翰逊,

    另外,您可以在GAE应用程序中登录所需的任何用户-仅仅是GAE提供了使用Google帐户的快捷方式。
    尼克·约翰逊,

    正确,两种情况下的单词选择错误,感谢您指出。将对其进行编辑:)

    BigTable是Google的数据存储引擎,花了一些时间之后,我开始怀疑我是否整个职业生涯都被洗脑了,以为SQL RDBMS对编写Web应用程序至关重要。BigTable存储模型简单,灵活,高效且可扩展,并且运行良好。

    1

    Azure将Windows / SQL作为服务器“平台即服务”,并且您肯定不会卡住,只是回到自己的数据中心中的Windows / SQL(没有linux,但是是的,它们支持Java,Python,PHP,Ruby,Tomcat ,Apache等)。像亚马逊一样,他们还将提供完全可访问的虚拟机选项,因此您可以安装/运行所需的任何东西。

    亚马逊仅提供虚拟机服务,因此您仍然需要安装,修补,许可,安全等。您刚刚将某些东西从数据中心移到了另一个。

    Google没有关系数据库,您会感到困惑。它们实际上仅迎合Python开发人员以及对Java的一些有限支持。从我的观点来看,他们确实不是云计算领域的参与者。


    4
    Jeff-对Microsoft合作伙伴进行了SQL Server 2008培训,我很喜欢并熟悉Windows / SQL堆栈的好处,但是我很难接受一个对Google BigTable的看法。大约有六个好的库封装了BigTable API,将其公开为从伪RDBMS到索引文档孤岛的一切。BigTable经过精心设计,可以跨多个服务器进行扩展(Google发现每个集群的耗水量为1,500),这是SQL不能很好完成的壮举。

    1

    这里没有提到的一件事是,除了可怕的名字外,还有人认为“ Windows Azure AppFabric Service Bus&ACS”吗?

    它似乎是一个非常强大的集成功能堆栈,这将使Azure从在内部基础结构上进行投资的任何企业的角度来看都具有吸引力。


    是的,但另一方面是,微软正式对企业内部部署的Azure托管表示“否”,这不利于总线的吸引力。

    1
    尽管名副其实,但实际上却并非如此,微软提供了一个非常引人注目的私有云堆栈,其中包含Hyper-V(免费)以及诸如Systems Center和InTune之类的东西,但这并不是“ Azure”。如果您希望不久就可以为第三方提供“ Azure设备”选项,但是您必须要花很多钱才能证明这些费用的合理性。听说您至少需要支持大约1000个节点,所以对于Datacentre所有者来说更多。

    0

    经过一段时间的Amazon EC2实验并遇到一些延迟后,由于成本原因,我开始在研究Google Apps的同时进行研究。我更喜欢使用Erlang作为开发语言,但可以使用Python,因此这不是决定因素。当我没有看到静态IP时,就是这样。同样,关于它在堆栈中处于较高位置的整个部分也使我对性能有些紧张。

    我希望AWS便宜一些,但是在Google提供静态IP并最好提供其他语言(例如Scala,JRuby和Erlang)之前,对我来说,选择是显而易见的:AWS。前两种语言也应该很简单,它们都是基于JVM的。甚至可能已经通过变通办法完成了,因为我似乎还记得阅读过一些有关的知识。


    要学究一点,您可以在App Engine上运行Scala,JRuby甚至Clojure,因为所有JVM都在后台运行。现在,是否易于使用这些语言又是另一回事了……
    克里斯·史密斯

    0

    伙计们,我认为除了考虑支持哪个平台进行比较外,还应该考虑可伸缩性,易于访问性,多功能性(在实现方面),可以容纳不同的托管平台,对于商业案例在经济上同样可行,并为企业提供了多种解决方案应用程序(即存储,交付,带宽,许可策略等),跟踪记录的服务质量可信度,经过审核的安全性,计费和成本计算的透明度等。如果您查看以上所有指标,我认为AWS的得分要高得多。自2年以来,我在AWS上管理着10个生产账户,同时公司/业务部门能够满足客户的巨大可扩展性需求。...毫无疑问,AWS上需要维护基础架构,更新(如果有/需要),安全性等 但是,您可以自由拥有市场/网络中的所有工具。现有的IT资源也可以维护AWS上的所有基础架构。

    Azure肯定具有与VS 2010集成的IDE,但是任何云的实际成本都将在成功部署应用程序(用于部署的平台)之后开始。解决实时部署/可扩展的生产方案还有很长的路要走……。众所周知,MS在成本方面扮演着许多隐藏的议程。很难确定所产生或将要产生的成本(发送时)估计)。

    GAE非常适用于Python / Java应用程序。在重写(现有),测试,部署应用程序方面付出了巨大的努力(包括资源和成本)。

    By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
    Licensed under cc by-sa 3.0 with attribution required.