东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

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

  • 2012-10-31
  • 本文字数:1484 字

    阅读完需:约 5 分钟

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 已经有很好的表现。为了完成自己的使命,相对于自己搭建基础设施,我们现在的进度要快得多了。

2012-10-31 19:592954
用户头像

发布了 479 篇内容, 共 152.2 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

LeetCode题解:61. 旋转链表,双指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

绿地回收系统开发|现成小程序

ALVIS

万能小哥系统开发是什么?

ALVIS

小白必看,通俗易懂的LockSupport

程序猿阿星

Java并发 线程协作 LockSupport 线程间通信

兰宝环保 | 新体系“行动计划”中化工制药行业VOCs废气治理要点

叶落便知秋

Using side features: feature preprocessing

毛显新

自然语言处理 深度学习 tensorflow 推荐系统 keras

绿色篮子系统开发是什么模式?

ALVIS

CloudQuery v1.4.1 发布 | 开放「组织架构」模块 API

BinTools图尔兹

数据库 数据安全 OpenAPI 数据库管控

RocketMQ事物消息调研

crazylle

RocketMQ 事物消息

手把手体验远程开发,确实爽

程序员鱼皮

Java Python 软件 大前端 后端

3D地图与3D柱状图联合使用

ThingJS数字孪生引擎

大前端 地图 可视化 数字孪生

大厂面试真题——Netty/IO篇,你能答上来几道?

Java架构师迁哥

Erda 1.1 版本发布|3 大亮点特性最新解读

尔达Erda

开源 云原生 k8s PaaS SaaS

WorkPlus高端制造业数字化解决方案—首发集团

WorkPlus

开源 企业 即时通讯 移动开发

绿森林回收系统小程序开发

ALVIS

家政公司管理系统开发介绍

ALVIS

SpringBoot自动配置原理解析

程序员阿杜

spring Boot Starter

阿里云视频云发布实时高清VVC编码器Ali266,真正开启VVC商用之路

阿里云视频云

阿里云 视频编码 视频处理 编码器 视频云

医院预约管理系统开发

ALVIS

Java程序员必备框架—Spring全家桶的前世今生详细梳理

北游学Java

Java spring

女巫面具系统模式开发

ALVIS

互联网大厂一手资料,25大专题,500多页,背废你就能吊打面试官

Java架构师迁哥

跑跑回收系统小程序开发

ALVIS

IDEA http client无法解析enviroment file

crazylle

IDEA http client Alibaba Cloud Toolkit

本夕生活小程序定制开发

ALVIS

ElasticJob 3.0.0:打造面向互联网生态和海量任务的分布式调度解决方案

SphereEx

数据库 开源

咔嗒回收系统小程序开发

ALVIS

大数据实战训练营Hbase作业

Clarke

WorkPlus高端制造业数字化解决方案—科达洁能

WorkPlus

开源 企业 解决方案 即时通讯

瞥一瞥AI,撩一撩算法

博文视点Broadview

来吧!一文写清前端面试难点及考点

前端依依

面试 大前端 经验总结

Udacity分享他们在Google App Engine上的架构_Python_郑柯_InfoQ精选文章