# 可汗学院支票簿每月在 GAE 上扩展至 600 万用户

> 原文： [http://highscalability.com/blog/2013/4/1/khan-academy-checkbook-scaling-to-6-million-users-a-month-on.html](http://highscalability.com/blog/2013/4/1/khan-academy-checkbook-scaling-to-6-million-users-a-month-on.html)

<iframe align="right" allowfullscreen="" frameborder="0" height="141" src="http://www.youtube.com/embed/r7hC0oVPTVs" width="250"></iframe>

[可汗学院](https://www.khanacademy.org/) 是由 [Salman Khan](https://www.khanacademy.org/talks-and-interviews/key-media-pieces/v/salman-khan-talk-at-ted-2011--from-ted-com) 创立的一家非营利性公司，其目标是向所有人，任何地方，任何时间提供免费的世界一流的教育。 那是很多知识。 长期以来，我受汗学院的启发和迷住，我真的很想知道他们打算如何去做。 [可汗学院的首席开发人员 Ben Kamens](https://twitter.com/kamens) 在一次采访中给出了令人惊讶的答案：[如何将您的初创企业扩展到数百万的用户](http://www.youtube.com/watch?v=r7hC0oVPTVs)。

**简短答案**：组建一支强大的团队，专注于功能，让 [Google App Engine](https://appengine.google.com/) 负责。

在采访中，有些人似乎被 GAE 的全部爱拒之门外。 部分原因在于，面试官是 Google App Engine 的开发倡导者 Fred Sauer，因此两者之间有一定程度的熟悉度。 但是最大的原因是，由于您应该喜欢 GAE 的所有原因，他们真的很喜欢 GAE。 没关系。 在这个时代，您可以自由选择任何平台。

**最大的惊喜**：

*   “ 60 分钟”上的个人资料所带来的访问量比 TechChrunch，HackerNews 和其他所有内容的总和还多。 旧媒体还没有死。

第一部分**最喜欢**：

*   GAE 是所有典型可扩展性问题的抽象，让您专注于业务问题。 所有 [抽象泄漏](http://www.joelonsoftware.com/articles/LeakyAbstractions.html) ，无论您选择什么，都将不得不处理问题，但是您正在选择要处理的问题类型 根据您选择的平台。 这全都在于了解您要进行的权衡。

以下是我对访谈的主要要点：

*   汗学院（Khan Academy）每月大约有 600 万用户，也许是 1500 万注册用户。 为了进行比较，Coursera [共有 600 万用户](http://news.illinois.edu/ii/12/1115/coursera_daphne_koller.html) ，但我不确定这些用户的活跃程度。

*   演变：

    *   最初，创建了视频以支持学习如何解决数学问题。 这些视频托管在 YouTube 上。 YouTube 没有扩展问题。

    *   但是 YouTube 不是交互式的，他们要做的很大一部分是向用户展示学习树，进行测验，管理结果等。因此，他们首先尝试了一个基于 Java 的自托管网站，但该网站被压碎了。 加载。

    *   然后切换到 GAE。 可汗学院与许多初创公司不同，因为它已经在 YouTube 上建立了一个现成的受众群体。 数十万用户从 YouTube 切换到 GAE。 他们缓慢地建立了可以处理新用户的非 YouTube 网站的基础。 在 YouTube 上引导客户可能是一个不错的一般策略。

    *   有很多新闻报道，整个事情如雪球般滚滚，而且还在不断增长。

*   为什么选择 GAE？

    *   对于任何一家初创公司来说，不要使用 GAE 或 EC2 之类的提供商都是没有道理的。 它们有助于解决许多您不需要解决的可伸缩性问题。 轻而易举。 如果您吸引了很多注意力，则可以立即投入更多资金并扩大规模。

    *   Spectrum：您想要开箱即用的控制权与可伸缩性的要求是多少？ 控制得越多，您越有可能朝自己的脚开枪，做错事。

    *   GAE 为您提供了开箱即用的可扩展性。 只要插入信用卡，就不会有很多可扩展性问题。 这为我提出了一个要点：他们如何负担 GAE？ 有趣的是，非营利性经济学可以使人们摆脱对每个新客户获取成本的关注，而不必担心货币化策略。

    *   使用 AWS，您必须更多地玩游戏，知道如何处理实例，这需要花费更多时间。

    *   他们不携带传呼机，不用担心复制，不需要重启实例，也不需要应用操作系统补丁。 他们与 GAE 并不需要做很多事情。

    *   Khan Academy 的暑期实习生 Dylan Vassallo 参与了多个 App Engine 项目，并在 Hacker News 主题 中发表了出色的评论 [像 GAE：我是可汗学院的暑期实习生，从事各种 App Engine 项目。 我没有根据的猜测是我们是该平台的大客户之一。 GAE 最大的缺点之一就是缺乏控制：与 EC2 不同，在 EC2 中，您需要根据自己的需要来模制原始的 Linux 安装，而您的应用程序必须始终符合 GAE 的服务模型。 但是，通过放弃其中一些自由，您会得到很多很棒的回报。 可汗学院（Khan Academy）已成功利用 App Engine 扩展到数百万用户，而无需雇用一个系统管理员或花费太多时间担心与操作相关的任何事情。 我们能够毫不费力地应对流量高峰，例如 60 分钟的外观和新计算机科学课程的发布（http://khanacademy.org/cs）。 要部署站点，任何开发人员（或我们友好的 CI 机器人）都可以简单地运行我们的“ deploy.py”并等待几分钟，然后回到花时间在产品上。 我们不必再考虑数据库是否可以处理我们向其抛出的写负载。 就此而言，App Engine 数据存储区是独一无二的无后顾之忧。 （嗯，我敢肯定 Google SRE 对此非常担心，但我们不必这样做。）](about:blank)

*   为什么旧媒体仍然有意义。 与 60 分钟驱动的流量相比，来自 TechCrunch，HackerNews 等的所有流量都不算什么。 差远了。

    *   他们知道他们将获得大量流量，因此他们准备好转弯右拨盘，以快速启动新实例。 这就是他们所做的一切。 这是一个错误。

    *   他们最终为这些新用户做了很多不必要的工作。 他们需要简化体验。 例如，他们认为对于所有这些新流量来说，这将是运行该平台的好时机，这是第一次使用其新的测试基础架构来跟踪所有这些美味数据的 A / B 测试。 失败了

    *   只要确保主要体验干净整洁。 如果您必须跟踪数据，请确保它非常重要，并使用经过良好测试的数据跟踪解决方案。

    *   不要一次增加流量运行新代码。 您只会得到一次。 如果有一半的国家因为您试图跟踪太多数据而无法访问该网站，那么这是不值得的。

    *   他们现在要做的是使主页尽可能静态，简单，快速地加载，如果您分支出主页，则可以获得完整的体验。 简化传入流量。

*   没有进行足够的负载测试。 60 分钟带来了很多流量，并且没有经过测试。 但是它们具有一致的高流量负载，当不同时区的用户上线时，流量每天都会激增。 交通也是季节性的。 他们通过自然流量模式获得了很多有用的压力测试。 他们必须处理高峰，低谷，人流量少的月份，然后人流量大的时候。 因此，他们知道必须在 GAE 中配置其代码才能处理该峰值。

*   将您的工作尽可能多地转移给其他人。 他们适合哪个 GAE。 巨大的胜利。 在有 9 名或 10 名员工的情况下，他们认为不再需要解决性能问题，并希望下一次能够解决问题。 他们将人们奉献给表演。 他们建立仪表板以提前预测问题。 试图更加积极地关注性能和可伸缩性问题。

*   2 至 5 人的小组不关注可扩展性问题。 专注于功能。 使您的产品很棒。 让人们回到它。 成功开展业务后，您就可以对所有想要的东西进行过度设计。 当您有机会构建成功的产品时，请担心问题。

*   绩效是每个人的工作，每个人都被分配给它。 尝试在整个团队中建立对绩效的总体意识。

    *   您将遇到大获胜的性能问题，然后这是一个反复的较小的改进游戏，每次改进.25％，. 5％导致性能提高，因此这必须是每个人的工作。 人们不仅可以投入额外的 JavaScript 或进行新的数据库查询，还只会使您的网站运行缓慢。

    *   他们有一个或两个人的团队专注于表现的宿舍。 可能是性能改进，也可能是工具，可以使他们更加了解性能。

*   收集大量数据。 他们想向老师和其他人报告数据。 他们的旧数据存储系统无法汇总所有数据。 因此，他们致力于：

    *   汇总数据

    *   在写入上做更多的工作，因此读取速度很快。 重新配置数据。 复制到任何地方。 使其真正快速地进行以后的分析。

    *   对于分析而言，它们似乎可能不在 GAE 范围内，但这并未具体说明。

*   在需求旺盛之前，请不要着迷于棘手的问题，例如即时重新配置功能。

*   它们足够小，每个人都应对 DevOps 负责，以保持系统正常运行。 将来，GAE 之外可能会有足够的系统，他们将拥有独立的团队，但目前还没有。

*   在技术和产品上都使事情变得简单，直到您完全知道需要构建什么为止。 从长远来看，他们为解决问题和解决问题而构建的许多功能会导致真正的问题。 构建后很难将其关闭。

*   懒惰。 使用其他人的工具。 在您的企业表现出色之前，请不要害怕使用他人的工作。

## 相关文章

*   [Ben Kamens 博客](http://bjk5.com/) 中，关于可汗学院的话题很多。 非常可爱的狗。 他在 [亚马逊的 Mega Dropdown](http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown) 上写了一篇很棒的文章。
*   [GitHub 上的可汗学院](https://github.com/Khan) -他们的所有代码均为 [开源](https://khanacademy.kilnhg.com/)
*   如果 GAE 对您中的某些人来说太过分了，这是关于 [的好消息，有关 Google App Engine](https://news.ycombinator.com/item?id=4403739) 的隐藏成本
*   [我在可汗学院（Khan Academy）做过的事情](http://jamie-wong.com/2012/08/22/what-i-did-at-khan-academy/) -虽然视频内容很笼统，但这是关于团队所做工作的具体内容
*   Google Group for [Khan Academy Developers](https://groups.google.com/forum/?fromgroups#!forum/khanacademy-developers)
*   [可汗学院使用 GAE / Bingo 进行的 A / B 测试课程](http://bjk5.com/post/28269263789/lessons-learned-a-b-testing-with-gae-bingo)
*   [Khan Academy Docs](https://sites.google.com/a/khanacademy.org/forge/home) -很多果汁详细信息
*   [可汗学院使用 Google App Engine](https://cloud.google.com/files/KhanAcademy.pdf) 来扩展和简化
*   [有关可汗学院开发工作原理的大图片](http://www.brianbondy.com/blog/id/109/) [图](http://interviews.slashdot.org/story/13/02/25/1417249/interviews-khan-academy-lead-developer-ben-kamens-answers-your-questions)
*   [GAE 调整应用性能](http://interviews.slashdot.org/story/13/02/25/1417249/interviews-khan-academy-lead-developer-ben-kamens-answers-your-questions) [调节](https://developers.google.com/appengine/docs/adminconsole/performancesettings) -您的旋钮，如果您知道 [如何调整它们](http://bjk5.com/post/40833194761/pending-queues-and-loading-requests-on-app-engine) 。
*   [第 1 部分：可汗学院首席开发人员 Ben Kamens 访谈](http://www.youtube.com/watch?v=BXxYEhwDh28)
*   [访谈：可汗学院首席开发人员 Ben Kamens 回答了您的问题](http://interviews.slashdot.org/story/13/02/25/1417249/interviews-khan-academy-lead-developer-ben-kamens-answers-your-questions)