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

标签: udacity 分享 google | 发表时间:2012-11-01 08: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] 推荐:

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

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

Google Reader 的分享和效率

- die4live - 老肥博客 » 非唠不可
Google Reader 是 Google 最优秀的产品之一,获取信息的首选渠道,我平时都将它打开在浏览器的第一个标签. 有大量文章介绍过 Google 阅读器的使用技巧,我以往的文章中也有不少,比如 快捷键的使用,今天这篇文章我要写的是如何更有效率地阅读、分享、发布,减少信息噪音,让自己和别人都能更高效地获取有价值的信息.

Google+ for Android 更新允许重新分享

- mike - 谷安——谷奥Android专题站
Google+ for Android 更新,Google 一直在为 Google+ 更好的体验而努力. 这个新的更新以及在 Android Market 上放出, 除了一些错误修正和增强改进外,现在还加入了重新分享. 初始设置对话框中更清楚的及时上传选项. 错误修正 – HTC 产品上的清除即时上传副本问题.

Google +1按钮已可向Google+朋友圈分享内容

- MZ - cnBeta.COM
据美国科技新闻网站TechCrunch报道,谷歌于今天宣布,用户通过点击谷歌“+1”按钮,可向Google+中的朋友圈分享自己正在浏览的网页. 当用户点击“+1”按钮时,会弹出一个含有网页图片和文字的对话框,用户可选择朋友圈分享这些内容. 谷歌还允许网页制作者定制显示的图片和文本内容.

[Chrome] Reader to Plus 從Google Reader直接分享文章到Google+

- Jackie - 靖 ● 技場
在Google大推Google+之際,我想不通為什麼不要直接在Google Reader中加一個傳送至Google Plus的選項,這樣一來要分享好資訊不是容易多了嗎. 在官方的正式版功能出來前,我想最方便的方法應該還是利用擴充套件來達成,而「Reader to Plus」是我目前找到可用的外掛,今天測試的結果是可以正常運作的,想要在Google Reader中直接分享文章到Google Plus的網友,可以考慮一下這個Chrome外掛.

谷奥: Google Maps 现可直接分享摘要信息到 Google+

- Woooon - 谷奥聚合——谷奥主站+谷安 aggregator
Google最近升级了Google Maps里硬又黑的导航条功能,现在当你在Google Maps里找到自己想要的地图或导航信息的时候,直接点击右上角Google+的分享按钮,即可将当前页的全部信息都分享出来. 以前你只能分享这个页的标题和链接,现在Google+会自动把Google Maps里你查询的信息也作为摘要信息分享出来,比如你的导航(上图)和定位信息(下图):.

Google雇员不小心公开分享了对Google+的批评

- han - Solidot
在亚马逊工作了六年半以及在Google工作了同样长时间的工程师Steve Yegge不小心公开发布了对Google+的批评,他原本是想与Google的同事分享其看法. 目前 Yegge的原帖已经被删除,但已被许多人转载. 他在帖子中称亚马逊CEOJeff Bezo是“恐怖海盗贝索斯”,称他事必躬亲,甚至插手管理网站的单个像素,但却同时听不进其他人的建议.

如何把 Google Reader 訂閱內容分享內容到 Google+

- hkftwe - 硬是要學
Google Reader(Google 閱讀器)雖然提供給了良好的訂閱環境,但是在分享的功能上較顯得薄弱,透過這篇文章介紹的設定方式,可以利用 Google 閱讀器上的「傳送至」功能,把好內容直接傳送到 Google+ 上分享,同時也可以設定分享對象和插入位置資訊. 閱讀全文:如何把 Google Reader 訂閱內容分享內容到 Google+.

如何将Google Reader的文章分享到Google+

- lichzy - 爱谷地
本站开发的Google+转发扩展有一个附带功能就是可以将Google Reader的文章转发到Google+,但有部分朋友不知什么原因(个人分析还是翻X墙的原因),导致在Google Reader中点击转发到Google+按钮经常无法弹出转发窗口,或者无法获取到当前文章的链接. 这里再给大家分享一个在Google Reader中转发文章到Google+的方法:.

谷奥: Google +1 按钮将可一键分享到 Google+ 好友圈子里

- Lionheart - 谷奥聚合——谷奥主站+谷安 aggregator
今天收到Google的邮件,只要加入Google+ Platform Preview,现在都可提前体验到一个新的功能:通过嵌入到自己网页里的Google +1按钮一键分享本页内容到Google+的好友圈子里. 如上图,点击网页里的Google +1按钮,就会弹出一个浮动层,在这里会自动抓取本页的图片、标题和摘要文字,然后你可以再写一些话,直接分享到自己的Google+好友圈子里.