谁更胜一筹 技术解析Google App Engine和Amazon EC2
最近一个潜在客户要求我们比较一下Amazon EC2和Google App Engine,正好我们刚刚在EC2和Google App Engine上完成了两个相对来说规模较大的项目,因此有必要做一下总结,我打算从三个角度来对比这两大云计算平台:技术,业务和未来发展趋势,本文是技术方面的对比,ok,准备好咖啡,我们开始吧!
如果按平台类型来分,大家可能已经知道Google App Engine属于PaaS(平台即服务),而Amazon EC2属于IaaS(基础设施即服务),Amazon EC2给你一个安装了操作系统的“盒子”,你可以自己安装应用程序,也可以使用AMI(Amazon Machine Image),如果你想构建一个高度复杂的定制应用,Amazon EC2是不二之选,它允许你控制环境参数,底层操作系统,存储和网络需求,从技术上讲,它属于很底层的服务,你可以调整你需要的大部分东西。
Google App Engine给你一个完整的平台,包括完整的SDK(以及Eclipse插件)和服务,你可以构建和部署你自己的应用程序,但你不能很好地控制操作系统,硬件和存储,诸如写文件系统,使用线程等操作都有限制,这样设计的目的是为了确保平台不会被某个应用程序绑架。
简单起来就是:
IaaS:原始硬件(处理器,网络和存储)
PaaS:操作系统,系统软件,开发框架和虚拟机。
下面从技术角度来比较一下这两个平台。
1、提供的服务
Google App Engine凭借丰富的服务击败Amazon EC2,Google App Engine提供的服务可以让开发人员快速进入开发状态。如Blobstore,Images,Mail,Memcache,Multitenancy,Oauth,Task Queues,URL Fetch,Users,XMPP这些服务在Amazon EC2上是需要自己安装的,为了便于比较,假设你已经为Memcache,Mail和多租户搭建好了基础设施,看看在EC2上你用了多长时间安装,我敢打赌你会超过一个小时,使用Google App Engine时,这些服务都是现成的,就象果盘中插好牙签的水果一样,你可以随时享用。
2、管理
Google App Engine再次胜出,因为一旦你的应用程序部署成功后,它几乎不需要管理,当你的应用程序负载变大时,你不需要向服务注入新的实例,Google App Engine可以自由扩大负载能力,新实例是实时剥离的。使用Amazon EC2时,你必须时刻跟踪通信流量(现在可以通过脚本自动跟踪了),新实例是在你的配置基础上剥离的,因此,如果我的峰值负载是2x+y,那么需要剥离2个以上的应用程序服务器。
此外,使用Google App Engine升级应用程序服务器实例,安装新的负载均衡器时,没有管理开销,这一切都是自动执行的。
3、抽象水平
和上一条联系紧密的是抽象水平,Google App Engine抽象得比较好,你只需要关心你的应用程序和业务逻辑,不用担心底层基础设施的管理,正如Nick Johnson所说的那样,抽象水平应作为挑选云计算平台的一个基本原则,你需要做的是驾驶,不需要研究引擎盖以下的东西。在我看来,如果你的核心业务是货物运输,那么你应该买一辆卡车,它能高效地把你的货物从A地运输到B地,相反,你不应该考虑如何购买零部件自己组装一辆卡车。
在软件开发领域,我们看到有Grails,RoR等框架,它们大受欢迎,是因为它们提供了高水平的抽象,如果你是一名泥瓦匠,它们就象是脚手架,你可以踩在它们上面干你的工作。
4、可靠性
从我个人的认识来讲,两者都很可靠,这一点从它们的用户数量就可以知道一二,用户可以时刻查看Google App Engine的状态,它是透明的,但从历史数据来看,Amazon EC2的正常运行时间比Google App Engine要好。
5、可移植性
从使用的底层操作系统和开发框架来看,Amazon EC2具有更好的可移植性,但也不要担心你会被Google App Engine给锁住,Google已经给出了迁移指南,指导你如何从转移出Google App Engine平台,当然包含你所有的数据在内。还有AppScale这样的程序可以帮助你将Google App Engine上的程序转移到Amazom EC2或其它云平台上,AppScale已经可以支持EC2,Eucalyptus,Xen和KVM。
6、存储
Google App Engine目前严重依赖于BigTable,开发人员需要从一个完全不同的角度来认识和学习它,特别是对于那些特熟悉关系数据库,被关系数据库理论束缚的人更需要洗洗脑,它提供了一个JPA&JDO访问接口,但它不支持所有的JPA&JDO功能,特别是关系部分,Google最近也高调宣布要让Google App Engine支持传统的SQL数据库。Amazon EC2已经支持SQL数据库,你可以使用Oracle,MySQL等你所熟悉的关系数据库。
7、应用程序维护和升级
对Google App Engine来说,应用程序维护和升级是件轻而易举的事,它为各种应用程序提供了一个详细的管理面板,包括日志查看器和数据查看器,一个程序可以有多个版本,当新版本经过测试,可以用于生产环境时,你可以将其设为默认的版本,而Amazon EC2就麻烦多了,因为它属于IaaS类型,所有维护和升级相关的事情你必须亲力亲为。
8、开发限制
使用Google App Engine时,你必须受到平台的限制,如果你的查询处于僵死状态,很难将其杀掉,此外,Google App Engine没有线程,提供的SDK也是受限的,有些类和功能被列入黑名单,因此不能被使用,也不能写文件系统等等。
从表面上看这些限制是不可理喻的,但如果有朝一日你也要提供PaaS类型的平台时,你就能理解为什么Google要做这些限制了,这样才能确保运行在平台上的应用程序不会违反平台的规则,否则平台就可能被应用程序绑架,从而变得不可使用,平台上的其它应用程序就会收到牵连。
即便有这些限制,90%的商业应用程序仍然可以在Google App Engine上正常运行,但对于那些要使用线程,或写文件系统的应用,最好还是选择Amazon EC2,因为它提供了所有底层访问和控制权。
9、语言支持
截至目前,Google App Engine支持Java和Python,但任何可以转换成字节码,可在JVM上执行的任何编程语言都可以在Google App Engine上运行,如果你喜欢其它编程语言,最好选择Amazon EC2,因为你可以在它的操作系统上面安装语言运行时环境,你拥有几乎完整的硬件和操作系统控制权,还有什么不能做的呢?在Amazon EC2上也托管了许多有趣的C#,.NET,ASP.NET MVC/Visual Studio项目,具有讽刺意味着的是,尽管还有Microsoft Azure,但许多以MS技术开发的项目却托管在Amazon EC2上。
概括地说,Amazon EC2是进入云计算的早期尝试者,它利用互联网标准和开放平台创建了一个非常灵活的云计算平台,Google则利用了它在大型数据库方面的研究成果和它内部实现的一些技术创建了一个强大,但有更多限制的云计算环境。从核心技术来讲,Amazon EC2允许你扩展任何计算机实例到多个实例,因此你拥有每个虚拟盒子的完全控制权,Google App Engine从操作系统抽象而来,没有计算机实例的概念,如果你的Web应用程序不需要操作系统相关的功能,那么Google App Engine无疑是最好的选择,如果需要更好地控制你的系统环境,特别是操作系统相关的控制,那么最好选择Amazon EC2。
相关推荐
从2019-10-23起,我的AWS实例不断的重启,或者连接不上,但控制台显示running。通过查看dump文件,发现是各种 PV Drivers的错误。如果网络驱动升级不成功,这个实例将不可访问。