写点什么

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

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

关注

评论

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

中文版3d lut creator pro调色软件下载 兼容M1

Rose

Mac软件 3d lut creator pro 调色

架构实战营模块 8 作业

陈斌

#架构实战营

容器是怎么一步一步成为云原生的基石技术的

申屠鹏会

云计算 容器 云原生

口袋瑜伽 Pocket Yoga for mac 专业瑜伽课程 打造完美身材

Rose

瑜伽 Mac软件 瑜伽教学 Pocket Yoga

FTP(文件传输协议)客户端 Transmit 5 中文for Mac v5.10.4

Rose

ftp Mac软件 ftp传输 Transmit 5

Minitab Express:对数据进行整理、可视化、建模和预测

Rose

数据分析 数据统计 Minitab Express

【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)

码界西柚

配置 yaml 开发指南 yaml文件 2024年第三十二篇文章

mac电脑好玩的游戏:帕斯卡契约:终极版 游戏模式,体验大升级

Rose

游戏 mac电脑 帕斯卡契约:终极版

GraphicConverter 12 mac图片浏览器:编辑、转换和增强图像

Rose

雷军不再主讲小米手机发布会;苹果明确:Vision Pro 头显电池某些场景会降低其性能丨 RTE 开发者日报 Vol.142

声网

一张“哑火”的AI禁令

脑极体

AI

提前祝大家新年好!来看看社区 2023 都得了哪些奖吧~

声网

Java 运算符详解与字符串处理技巧

小万哥

Java 程序人生 编程语言 软件工程 后端开发

【踩坑指南】线程池使用不当的五个坑

越长大越悲伤

Java 线程池 踩坑指南

macs fan control pro破解版序列号 mac电脑风扇控制 v1.5.17中文版

Rose

苹果电脑 风扇转速控制 Macs Fan Control Pro

利用技术潜能实现企业全面预算管理的智能化转型

智达方通

信息技术 财务分析 全面预算管理 财务规划

全网最全的幻兽帕鲁服务器搭建教程—阿里云【保姆级/高性价比】

申公豹

幻兽帕鲁

Microsoft Outlook将邮件、日历和联系人汇集一处,让你轻松管理一切

Rose

Office 邮件客户端 Microsoft Outlook

文心一言 VS 讯飞星火 VS chatgpt (194)-- 算法导论14.3 2题

福大大架构师每日一题

福大大架构师每日一题

千万级数据深分页查询SQL性能优化实践-京东零售技术团队

京东零售技术

Java MySQL 后端

SublimeText中文破解版 简单易用的代码编辑器

Rose

代码编辑器 SublimeText

八种常见的云存储安全风险及防护建议

伤感汤姆布利柏

文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题

福大大架构师每日一题

福大大架构师每日一题

《UNIX网络编程 卷2:进程间通信(第2版)》PDF

程序员李木子

极狐 GitLab 和 Xcode Cloud 集成,实现 iOS 的自动打包

极狐GitLab

一个线程,从“生”到“死”经历的过程

华为云开发者联盟

Java 线程 开发 华为云 华为云开发者联盟

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