Udacity分享他们在Google App Engine上的架构

标签: udacity google app | 发表时间:2012-11-01 00:59 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

Udacity是一个以提供个性化计算机教育免费在线课程为主的网站,虽然该网站上目前只有18种课程,但是它的流量却相当可观,目前在Alexa的排名是11926。

Chris Chew是该网站的资深软件工程师。日前,他在Google App Engine的官方博客上分享了如何使用App Engine来构建Udacity。

Chris指出:使用App Engine的决策,是由Udacity的CTO和联合创始人Mike Sokolsky做出的。连续多周,Mike必须不断加入新的服务器、管理MySQL复制数据库,以满足他们复杂的扩展模式。经过这段时间后,Mike认为App Engine的运维简单方便,很有说服力。

到现在,Udacity使用App Engine已经将近一年了,他们目前的架构如下:

其中:

  • 使用 NDB完成海量数据集的复制。NDB提供在无Schema的对象数据库中的持久化存储,支持自动化缓存、复杂查询和原子事务。
  • Memcache
  • Python Task Queues API完成延迟执行、MapReduce、批处理工作。
  • App Engine Search API,索引课程内容和学生的简历。
  • Blobstore API,存储课程视频、简历,导出数据。
  • Image API,生成缩略图。
  • MapReduce API,数据每日使用分析、数据迁移、数据维护。
  • Trails和Trove,是由Piotr Kaminski主要开发的两个程序库。Trails提供清晰的语法,可在webapp2.RequestHandler上创建RESTful ,同时提供自动化分发。Trove包装了NDB,加入常用的属性类型,包括另一层的缓存,存储实体和之间的关系(包括处理中的和memcache),还有事件“监控”框架,当数据变化时,可完成可靠的带外处理触发。

Chris指出:图中没有标示出他们为NDB打的补丁,这些补丁能创建更好的hook,类似于现有的pre/post/put/delete等hook。这些自定义的hook为“监控”提供了抽象,让代码能对数据层中的变更反应。每个监控的执行都被延迟,并在请求之外完成,以避免增加响应时间。

Chirs提到:在使用App Engine完成扩展的头一年中,他们发现,性能是一件很复杂的事情。响应时间是多种因素的函数,既在他们控制之内,又在他们控制之外。App Engine确实有“水平扩展”的能力,但是他们发现对于某个给定请求的响应时间常常出现变化,即使是在系统负载很低的时候。因此,他们做了如下事情,以降低延迟变化的影响:

  • 使用 新的NDB API,而不是老的。
  • 尽可能使用 NDB.tasklet协同程序(coroutines),在RPC操作阻塞时允许并行处理。
  • 不索引默认字段,仅在需要查询的时候才加入索引
  • 小心地避免索引热点,只在需要的时候才索引可以预测值的字段(比如当前日期和时间的DateTime类型字段,或是枚举类型的字符串字段)。
  • 大量使用 实体化视图(Materialized view),这样可以限制每个请求尽可能少地查询数据集。

他们在最后一点上做的非常极端,把他们的数据集以去正规化的方式,专门生成为读操作优化的记录。比如,为读操作优化的用户档案记录包括:标准的档案信息、隐私配置、课程注册信息、课程进度和权限。这些数据都放在实体化视图中,只需要一个查询就可以完成。

对于App Engine,Chris给出的结论是:

App Engine是非常完善、可靠的平台,符合为数众多的用户案例和场景。很明显,对于知道如何扩展web应用的人来说,它的服务和API是专门为他们设计的。……想要完成任何概念验证,都是轻而易举的事情,而且后续的应用扩展工作要比你自己搞一套基础设施要轻松得多。

跟其他平台一样,你也要做出一些让步。使用App Engine要做出的让步是:你要不留余地地降低延迟,这才能享用令人赞叹的、支持扩展的服务。这对于我们来说很容易,因为在多次令人兴奋的海量访问时,App Engine已经有很好的表现。为了完成自己的使命,相对于自己搭建基础设施,我们现在的进度要快得多了。

郑柯 郑柯,实用的理想主义者,相信:每天改变一点点,这个世界会更好。

您可能也会喜欢

相关 [udacity google app] 推荐:

Udacity分享他们在Google App Engine上的架构

- - InfoQ cn
Udacity是一个以提供个性化计算机教育免费在线课程为主的网站,虽然该网站上目前只有18种课程,但是它的流量却相当可观,目前在Alexa的排名是11926. Chris Chew是该网站的资深软件工程师. 日前,他在Google App Engine的官方博客上分享了如何使用App Engine来构建Udacity.

Google将关闭Android App Inventor

- tinda - Solidot
新上任的Google CEO Larry Page已发誓要调整公司的重心,将精力集中中优先项目上,一些对用户有用但却对公司没有帮助的项目纷纷关闭,如Google字典服务,如Google Labs中的众多项目. 其中一个被关闭的项目是Android App Inventor. Android App Inventor由MIT计算机科学Hal Abelson领导开发,借鉴了入门级编程项目Scratch,让没有编程经验和知识的人开发Android应用程序,因此颇受教育界人士的欢迎.

Google App Engine应用大全

- 桃仁 - iGFW
之前写过一篇《利用Micolog在GAE上搭建个人免费博客》,简单介绍了google app engine的一些简单情况. 现在把gae上的一些应用整合了一下. 分了几大类,包括了开源的GAE应用程序等等. 一是方便自己后续的使用和查找,另一方面也方便那些需要的人. 示例:http://gae-django-cms.appspot.com/.

Sina App Engine与Google App Engine区别对比

- Chris - 互联网的那点事...
新浪推出了自己的云计算服务平台,和Google一样,都叫App Engine. 根据NIST的定义,Google App Engine属于PaaS平台型服务,那么它具体提供什么样的服务,新浪推出的Sina App Engine和Google的又有哪些区别呢. 云计算服务在Google、Amazon等公司成功产品的引领下,正在商业化的道路上大步向前.

Google 联合 MIT 开源 Android App Inventor

- - 博客园_新闻
Google 联合 MIT 发布了 App Inventor for Android 的开源版本.. AppInventor 是谷歌推出一种软件工具. 这种工具可以使用户更容易的为 Android 智能手机编写应用程序. 谷歌该 Android 应用工具使人们可以拖放代码块(表现为图形图像代表不同的智能手机功能),将这些代码放在一起,类似于将 Lego blocks 放置在一起.

AppScale:Google App Engine的开源实现

- - ITeye资讯频道
AppScale 是GAE(Google App Engine)的开源实现,它同时也是一个云计算平台,允许用户在任何地方(服务器或集群)发布和托管自己的 GAE 应用程序. AppScale支持 Google App Engine平台的Python、Java和Go运行时,目前的最新版本为1.9.0.

探索Google App Engine背后的奥秘(1)--Google的核心技术

- Hui Hui - DBA Notes
作者:ikewu 发布在 dbanotes.net. 投稿人吴朱华曾在IBM中国研究院从事与云计算相关的研究,现在则致力于云计算技术. 本系列文章基于公开资料对Google App Engine的实现机制这个话题进行深度探讨. 在切入Google App Engine之前,首先会对Google的核心技术和其整体架构进行分析,以帮助大家之后更好地理解Google App Engine的实现.

用 Google Plus Email App 扩展在邮件里插入你的 Google+ 信息流

- Zoe - 谷奥——探寻谷歌的奥秘
WiseStamp是一家专门鼓捣邮件签名的创业公司,他们最新发布了G+邮件应用扩展,同时支持Chrome和Firefox,安装之后即可在你发出的邮件里嵌入Google+的最新信息流(如上图). 如果你以前有安装过他们的 WiseStamp扩展,那么不用单独下载,自动升级即可,因为里面已经内置了这个功能.

Google推出企业版Google App Engine、云存储服务和Prediction API

- Johnny - 36氪
Google云服务可以把用户的应用程序托管到云端,使用和Google一样的网络基础设施. 目前有20多万开发者在使用Google的云服务. Google今天又宣布了几款企业级云服务相关的产品,其中包括Prediction API、Cloud SQL、云存储等. 之前的Google Storage for Developers现在更名为Google Cloud Storage,价格比原来更低.

Google App Engine SDK 1.5.1 发布,增加 WebP 支持

- Jeff - 谷奥——探寻谷歌的奥秘
Google I/O 2011 结束一月后,Google 发布了新版 Google App Engine SDK. 本月 Google 将 ProtoRPC 作为正式 Python API 发布,在 SDK 中提供 High Replication Datastore (HRD) 特性帮助开发者进一步理解一致性模型,Channel API 增加在场状态等.