按:此为客座博文系列。投稿人吴朱华曾在IBM中国研究院从事与云计算相关的研究,现在正致力于研究云计算技术。
本篇是本系列的最终章,将总结一下App Engine在使用方面的注意点,最佳实践和适用场景,最后会谈一下我对App Engine的一些期望。
注意点
- 执行速度偏慢:由于其分布式的设计,所以在速度方面不是最优的,比如普通的Memcache能在几毫秒完成操作,而App Engine的Memcache则大概需要50(毫)秒才能完成操作。
- 私有API:其API有很多都是私有,特别是在其服务方面,虽然Google提供了很不错的文档,但是在学习和移植等方面,成本都很高。
- 执行会出现失败的情况:根据很多人的实际经验,App Engine会不定时出现执行失败的情况,特别是Datastore和URLFetch这两部分,虽然Google已经将Datastore方面出现错误的几率从原先的0.4降至现在的0.1,但是失败的情况是很难避免的。
- 有时会停机:虽然总体而言,停机并不频繁,但是在今年初出现长达136分钟故障导致部分用户的应用无法正常运行,其发生原因来自于其备份数据中心出现了问题。
- 无法选择合适的数据中心:比如,你应用所面对的用户主要在欧洲,但是你应用所属App Engine服务器却很有可能是被部署在一个美国的数据中心内,虽然你的应用很有可能在将来移动至欧洲某个数据中心,但是你却无法控制整个过程。
- 有时会处理请求超时:虽然能平均在100至200ms之间完成海量的请求,但是有时会出现处理请求超时的情况。
- 不支持裸域名:只支持类似CNAME的子域名。
最佳实践
- 适应App Engine的数据模型:因为其数据模型,并不是传统的关系模式,而且在性能方面表现也和关系型数据库差别很大,所以如果想要用好非常关键的Datastore,那么理解和适应其数据模型是不可或缺的。
- 对应用进行切分:由于App Engine对每个应用都有一定资源限制,而且为了让应用更SOA化和更模块化,可以对一个应用切分多个子应用,比如,可以分成一个用于前端的Web应用和多个用于REST服务的后台应用。
- 极可能多地利用Memcache,这样不仅能减少昂贵的Datastore操作,而且能减轻Datastore的压力。
- 在上面提到过,由于App Engine在执行某些操作时会出现失败的情况,比如Datastore方面,所以要在设计和实现这两方面做好相应的异常处理工作。
- 由于Datastore不是关系型数据库,导致在执行常见的求总数操作时显的有点"捉襟见肘",所以最好使用Google推荐的Sharded Counters技术来计算总数。
- 由于Blobstore还只是刚走出试验期而已,而且其他模块对静态文件(比如图片等)支持不佳,比如Datastore只支持1MB以内的对象,同时每个应用只能最多上传一千个文件,而且速度不是最优,所以推荐使用其他专业的云存储,比如Amazon的S3或者Google马上就要推出的Google Storage等。
- 尽量使用批处理方式,不论是在使用Datastore还是发送邮件等。
- 不要手动创建Index:因为App Engine会自动根据你在代码中查询来创建相关的Index。
适用场景
现在而言,App Engne主要适用于下面这三个场景:
- Web Hosting:这是最常见的场景,在App Engine上已经部署了数以十万计的小型网站(其中有很多主要为了学习目的),而且还部署了一些突发流量很大的网站,其中最著名的例子就是美国白宫的"Open For Questions"这个站点,主要用于让美国人民给奥巴马总统提问的,这个站点在短短的几个小时内处理接近百万级别的流量。
- REST服务:这也是在App Engine平台上很常见的场景,最出名的例子就是BuddyPoke,BuddyPoke的客户端就是一个Flash应用,在用户的浏览器上运行,而它的服务器端则是以REST服务的形式放置在App Engine上,每当Flash客户端需要读取和存储数据的时候,它都会发请求给后端的REST服务,来让其执行相关的Datastore操作。
- 依赖Google服务的应用:比如应用能够通过App Engine的Email服务来发送大规模的电子邮件。
未来的期望
- 更稳定的表现,更少的超时异常和更快的反应速度,特别是在Datastore和Memcached这两方面。
- 支持对数据中心的选择,虽然现在App Engine会根据应用的用户群的所在地来调整应用所在的数据中心,但由于整个过程对开发者而言是不可控的,所以希望能在创建应用的时候,能让用户自己选择合适的数据中心。
- SLA,如果App Engine能像S3那样设定一些SLA条款,这样将使用户更放心地在App Engine上部署应用。
- 新的语言:比如PHP,但是如果在现有的App Engine架构上添加一门新的语言,整个工作量会非常大的,因为App Engine有接近一半的模块是语言特定的,比如应用服务器和开发环境等,所以短期内我认为不太可能支持新的语言。
总体而言,Google App Engine是Google大战略中一个不可分割的一部分,因为Google希望能通过App Engine来降低Web应用开发的难度,只要难度降低了,那么Web应用替代客户端应用的整体速度将会加快,如果出现这样的情况的话,那么将会对Google今后的发展非常有利。
本系列文章结束。
参考资料:
- Google's Dr. Kai-Fu Lee on Cloud Computing
- The Cost of Latency
- Google App Engine Blog
- Bigtable: A Distributed Storage System for Structured Data
- From Spark Plug to Drive Train: Life of an App Engine Request
- Google Megastore
- Google App Engine官方文档
- Google Architecture
- Google App Engine - a first look
- Google Chose Jetty for App Engine
- Google App Engine is Down - Backup Data Center Having Problems
- 面向虚拟基础设施的云服务,第 2 部分: Platform as a Service (PaaS) 和 AppScale
- 传Google正在开发新的服务器文件系统
- Google File System
- Designs, Lessons and Advice from Building Large Distributed Systems
- The Chubby lock service for loosely-coupled distributed systems
- Google's Will Power and Data Center Efficiency
- MapReduce
- MapReduce的论文
- Protocol Buffer 简介
- Google data centers snub Africa, Oz, and anything near Wyoming Or do they?
- Google揭秘服务器创新技术 内置电池替换UPS
- 开源数据库 Sharding 技术(Share Nothing)
- Google File System II: Dawn of the Multiplying Master Nodes
- Transactions Across Datacenters
- 探秘Google全球数据中心与中国机房
- 揭开Google数据中心五大神话
- 俄勒冈州的Google数据中心耗电惊人
- Google App Engine For Java - Microblogging Case Study
- Under the covers of the App Engine Datastore
- Google Megastore
- Megastore/Bigtable Replication的文章
--EOF--
相关推荐
标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本SDK,这是一个用于在Google云平台上开发和部署Java应用程序的工具包。这个SDK包含了运行和测试Google App Engine应用所需的所有组件,包括开发...
appengine-tools-api.jar中文乱码, 修改appengine-tools-api.jar 以实现以UTF-8文件,编译. 使用方法: ...用你下载的包中Application.class替换om.google.appengine.tools.admin包里的Application.class文件
Google App Engine(GAE)是Google提供的一种云计算平台,允许开发者构建、部署和运行Web应用程序。这个平台提供了服务器、数据库和其他服务,让开发者能够专注于编写代码,而无需关心基础设施的运维。Java版本的App...
总结来说,"appengine-java-sdk"是开发和运行Java应用程序在谷歌AppEngine上的基石,它集成了GWT的支持,为开发者提供了完整的开发、测试和部署解决方案。利用这个SDK,开发者可以构建高效、可扩展的云应用,并享受...
google-appengine-java-sdk-1.9.3 固实压缩, 带恢复记录 总共三个分卷, 此为, part1
google-appengine-java-sdk-1.9.3 固实压缩, 带恢复记录 总共三个分卷, 此为part3
标题中的"appengine-java-sdk-1.5.0.1.zip"表明这是一个关于Google App Engine Java SDK的压缩包,版本号为1.5.0.1。App Engine是由Google提供的一个平台,允许开发者使用Java或Python等语言创建并运行web应用程序。...
总结一下,"appengine-tools-sdk-1.9.17.zip"是Google App Engine的SDK,提供了在Google云平台上开发和部署应用所需的工具。"moco-maven-plugin.zip"是一个Maven插件,用于集成Moco存根服务器进行HTTP测试。"moco-...
利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站
标题“google-appengine-docs-20110211”指的是Google App Engine的文档集合,这是一个特定日期(2011年2月11日)的版本。Google App Engine是Google提供的一个云服务平台,它允许开发者在Google的基础设施上构建、...
【标题】"gradle-appengine-plugin-1.9.4.zip" 涉及的是Gradle App Engine插件的版本1.9.4,这是一个用于部署Google App Engine应用程序的工具。Gradle是一款强大的构建自动化系统,它允许开发者通过声明式的方式...
appengine for java sdk,需要jdk1.7或jdk1.8,javac compiler 设置为jdk1.7,一共包含3个部分。
《Google App Engine应用开发详解——基于2010年12月02日更新的官方文档》 Google App Engine(GAE)是Google提供的一项云计算服务,它允许开发者在Google的基础设施上运行自己的Web应用程序。2010年12月02日更新的...
标题 "GWT 项目开发 1.6.4 本地开发 appengine-tools-api 突破限制" 提及的是Google Web Toolkit (GWT) 的一个特定版本(1.6.4)在本地开发环境中利用appengine-tools-api进行开发时遇到的限制及如何突破这些限制。...
### Google App Engine for Java中文API知识点详解 #### 一、Google App Engine for Java概览 - **背景介绍**: - Google App Engine最初是专为Python开发者设计的平台,但随着时间的发展,为了满足更广泛开发者...
6. 预付费模型:Google App Engine采用预付费模型,开发者需要根据使用的服务类型(如计算、存储、带宽等)支付费用。 在《云端代码Google App Engine编程指南》中,可以预见到将会有详细的介绍关于如何使用Google ...
总结来说,Google App Engine SDK for Python 1.9.24为开发者提供了一个强大的工具集,便于在Google的云计算平台上构建、测试和部署Python应用,同时享受到Google的全球分布式基础设施带来的高性能和可靠性。...
在“google-appengine-docs-20081003”这个压缩包中,可能包含了早期版本(2008年10月3日)的Google App Engine开发指南、API参考、最佳实践和示例代码等内容。这些文档帮助开发者了解如何利用Google App Engine构建...