写点什么

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:593156
用户头像

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

关注

评论

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

Serverless 时代 DevOps 的最佳打开方式

阿里巴巴云原生

Serverless DevOps 微服务 运维 云原生

StarRocks在中移物联网PGW实时会话业务领域的应用

StarRocks

大数据 数据分析 物联网 IoT OLAP

朱嘉明:比特币开创人类新型财富实验

CECBC

数字货币

声网Agora发布创业支持计划:聚合50+合作伙伴、11项资源扶持创业者

ToB行业头条

声网 Agora

编译android源码!2021年Android面试心得,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

JDBC—对数据库的通用增删改查

打工人!

Java 数据库事务 MySQ JDBC crud

2021年技术预测:从云计算到边缘以及两者之间的一切

云计算 边缘计算

【实战问题】-- 高并发架构设计以及超领现象解决?

秦怀杂货店

Java 架构 高并发

发布两小时,霸榜GitHub!Spring Boot实战文档

Java 编程 程序员 架构师

告别交通拥堵和数据孤岛,区块链成智慧交通发展新基石

CECBC

交通

一周信创舆情观察(3.8~3.14)

统小信uos

炸裂,IBM系统架构师居然把自己15年Java经验整合成一本小说?

Java架构师迁哥

2021年新兴的十大区块链技术趋势

CECBC

数字技术

全凭阿里大牛总结的Java面试笔记,首战成功拿蚂蚁offer

Java架构之路

Java 程序员 架构 面试 编程语言

全球案例 | Infobip :这家估值十亿美元的公司像初创企业一样规模化发展,像大型企业一样标准化

Atlassian

DevOps Agile Atlassian Jira ITSM

霸榜Git!2021年阿里巴巴Java面试权威指南(泰山版)

Java架构之路

Java 程序员 架构 面试 编程语言

直击面试!阿里技术官手码12W字面试小册在Github上爆火

Java架构之路

Java 程序员 架构 面试 编程语言

以数字人民币为契机 推动人民币国际化进程

CECBC

金融

图解垃圾算法,No,捡垃圾算法

叫练

GC算法 引用计数法 标记清除法

网络编程及通信三要素

五分钟学大数据

大数据 网络编程 28天写作 3月日更

霸榜Git!2021年阿里巴巴Java面试权威指南(泰山版)

Java架构追梦

Java 架构 面试 泰山版

315曝光的侵犯个人信息行为可以用区块链来规范吗?

CECBC

区块链

万象:百度的海量多媒体信息处理系统

百度Geek说

大数据 搜索引擎 百度 后端 #富媒体#

寻找被遗忘的勇气(十八)

Changing Lin

3月日更

趋势预测:2021年五大流行的编程语言

薇薇

Java c php JavaScript Python PEP

php 再上热搜!swoole 创始人投出反对票,质疑 php 协程最新提案

薇薇

php 编程 新特性 php扩展

java String长度有限制吗?

ddww

前端工程化之H5性能优化篇

百度Geek说

百度 大前端 H5

霸榜Git!2021年阿里巴巴Java面试权威指南(全彩版)

Java 程序员 面试 架构师

科技进化的终点,与荣耀全场景的起点

脑极体

epoll源码分析以及在Redis中的实现

Linux服务器开发

redis 后端 epoll web服务器 Linux服务器开发

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