Featured image of post 可汗学院如何在一周内成功处理2.5倍的流量?

可汗学院如何在一周内成功处理2.5倍的流量?

疫情导致的居家学习办公,造成了可汗学院在一周内2.5倍的流量暴增

可汗学员处理流量突然暴增的过程离不开 SRE 的设计和工作。他们的应对策略包括使用云和CDN。

可汗学院是一家非营利性机构,其使命是为任何人、任何地方提供免费的世界级教育。

本文原文出处:https://blog.khanacademy.org/how-khan-academy-successfully-handled-2-5x-traffic-in-a-week/

这篇文章的发布时间在去年(2020 年 5 月),大约是全球疫情最严重的时候。以下是正文。

说到快速扩展…

几个月前,我发布了一些关于扩展的想法,并承诺很快会发布更多的内容。好吧,说到快速扩展–在3月份的短短两周内,可汗学院网站的使用量就增长到了去年同期的2.5倍,并且一直维持到现在。由于冠状病毒大流行,世界各地的学校都关闭了,学生、家长和老师都转向了远程教育,可汗学院能够做出反应,提供高质量的内容和课堂体验–而且是免费的。在4月份,我们在平台上为3000万学习者提供了服务。最近一项针对家长的全国性调查发现,可汗学院是 “使用最多的在线资源”

我很自豪,我们吸纳了这种快速增长,同时并没有干扰到我们的用户。除了在几天内迅速做出反应以缓解压力点之外,我们还提前做好了准备,而这种准备也得到了回报。我们之所以能够轻松地进行扩展,很大程度上是因为我们的架构以及谨慎选择外部服务并正确使用它们的严谨做法。

因此,在这篇文章中,我将讨论对我们网站的可扩展性起关键作用的架构方面。

我们架构的两个基本组件在这里为我们提供了特别好的服务。我们使用谷歌云,包括AppEngine、Datastore和Memcache,以及Fastly CDN,它们是无服务器和缓存策略的支柱,这是我们扩展性的关键。

无服务器基础设施

使用 GCP 的 AppEngine,这种完全管理的环境,意味着我们可以非常容易地扩展,几乎不费吹灰之力。即使在流量大幅增加的情况下,我们的网站也能保持良好的性能,而且干预最少。我们自己不需要担心负载平衡,因为服务器实例会根据需要启动,也不需要任何干预。我们同样使用 Datastore,它可以自动扩展存储和访问容量,与 App Engine 扩展 Web服务器实例的方式非常相似。

缓存

Fastly CDN使我们能够缓存所有静态数据,并最大限度地减少服务器跳转。巨大的可扩展性,它还能帮助我们优化托管资源,在我们的App Engine无服务器模式中,托管资源的成本随着使用量的增加而线性增长。如架构图所示,所有的客户端请求都会经过Fastly,这样我们可以防止不必要的服务器流量,提高性能。我们主要从YouTube加载视频,其次从Fastly加载。这样也可以降低成本,以及保证视频的快速加载。

除了在Fastly中缓存静态数据外,我们还广泛缓存常见的查询、用户偏好和会话数据,并利用这些来加快数据获取性能。我们除了围绕 Datastore 行使其他关键的最佳实践外,还大量使用Memcache,以确保快速响应时间。

我们的网站可靠性(SRE)团队当然需要做好扎实的监控准备–我们也是做到了。我们注意到头几天出现了一些降速,并发现是部署导致了这些衰减。在我们的要求下,Google 增加了我们的 Memcache 的容量,一周内我们就可以轻松恢复到正常的连续部署模式。这个速度是至关重要的,因为我们的团队正在快速的开发资源,以指导新网站用户尽可能轻松地上手使用我们的服务。

总的来说,我们努力工作,谨慎选择服务,遵循最佳实践,并根据需要开发自己的服务。有了正确的技术、精心的准备,以及我们了不起的工程团队的现场调整,我们已经能够不间断地为现在比以往任何时候都更依赖我们的学生、家长和教师提供服务。

署名-非商业性使用-禁止演绎 4.0 (CC BY-NC-ND 4.0)
comments powered by Disqus
本博客始于 2007 年
Built with Hugo
主题 StackJimmy 设计