探索Google App Engine背后的奥秘- 总结

Posted 架构师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了探索Google App Engine背后的奥秘- 总结相关的知识,希望对你有一定的参考价值。

架构师(JiaGouX)
我们都是架构师!


按:此为客座博文系列。投稿人吴朱华曾在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操作。

未来的期望

  • 更稳定的表现,更少的超时异常和更快的反应速度,特别是在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的文章


原文链接:http://dbanotes.net/arch/google_app_engine-summary.html


·END·

架构师

我们都是架构师!


架构师订阅号,关注获取更多技术分享

工作邮箱:admin@137x.com






以上是关于探索Google App Engine背后的奥秘- 总结的主要内容,如果未能解决你的问题,请参考以下文章

String背后的汇编奥秘——探索数据结构

String背后的汇编奥秘——探索数据结构

String背后的汇编奥秘——探索数据结构

探索安卓热修复框架AndFix的奥秘

在 Google-App-Engine 中使用 HSQLDB

连接 Google App Engine 和 Google Compute Engine