# AOL.com 体系结构如何发展到 99.999%的可用性,每天 800 万的访问者和每秒 200,000 个请求
> 原文: [http://highscalability.com/blog/2014/2/17/how-the-aolcom-architecture-evolved-to-99999-availability-8.html](http://highscalability.com/blog/2014/2/17/how-the-aolcom-architecture-evolved-to-99999-availability-8.html)
![](https://img.kancloud.cn/54/b3/54b3981b739e94a430edb0dbf2823996_183x74.png)
*这是 AOL 的 [Dave Hagler](http://www.linkedin.com/in/hagler) 系统架构师的特邀帖子。*
AOL 主页每天收到超过 **800 万名访客**。 与《美国早安》或电视上的《今日秀》相比,每天的观看者更多。 每月提供的网页浏览量超过十亿。 自 1996 年以来,AOL.com 一直是主要的互联网目的地,并且仍然拥有大量忠实用户。
**AOL.com 的架构是第 5 代**。 在过去的 20 年中,它已经从头开始进行了 5 次重建。 当前的体系结构是 6 年前设计的。 零件已升级,并在此过程中添加了新组件,但总体设计仍保持完整。 经过 6 年的持续改进,对代码,工具,开发和部署过程进行了高度调整,使 AOL.com 体系结构经过了测试,并且非常稳定。
工程团队由开发人员,测试人员和运营人员组成,**总共约有 25 人**。 大多数人在弗吉尼亚州的杜勒斯,在爱尔兰的都柏林有一个较小的团队。
通常,使用的技术是 **Java,JavaServer Pages,Tomcat,Apache,CentOS,Git,Jenkins,Selenium 和 jQuery** 。 在该堆栈之外还使用了其他一些技术,但是这些是主要组件。
## 设计原则
有一些重要的总体原则可以驱动体系结构。 首先,所有都有**冗余。 即使出现故障或需要维修时,仍然存在冗余。 要求有 5 个 9 的可用性,每年大约需要 5 分钟的停机时间。**
第二个原则是 AOL.com **不应依赖任何共享基础结构**来传递其页面。 如果其他 AOL 属性或系统出现故障,则 AOL.com 需要保持正常运行。 一段历史:在开发此体系结构时,大多数 AOL Web 属性只有一个共享的基础架构,称为 Big Bowl,这是一个反复出现的问题,其中一个属性会影响其他属性。 结果,当前的 AOL.com 专门设计为通过隔离自身来解决此问题。 对 AOL.com 的任何依赖都以保护服务为前提,该保护服务将对下游系统的调用集中在较小的服务器上。 下游系统没有从数千个服务器接收请求,而是从大约 20 个不同的服务器获得呼叫。 并且响应被缓存以进一步防止不堪重负。 此外,外部数据库被复制以提供给 AOL.com 自己的副本,并由其自己的运营团队进行管理。 关于唯一共享的组件是网络和身份验证服务。
另一个原理是**缓存用于优化性能,但不是系统以**规模运行的要求。 该基础结构的大小可在不进行缓存的情况下承受全部流量,同时仍可确保足够的冗余度以容忍中断。 缓存是一种奖励,但不是必需的。
## 物理基础架构
在 3 个数据中心中为 AOL.com 服务。 其中两个位于北弗吉尼亚州,一个位于加利福尼亚州,均由 AOL 拥有和运营。 所有 3 个数据中心都在积极地为流量提供服务,但是每个数据中心的大小都使其能够自行处理全部流量。 这样可以使一个数据中心脱机以进行维护,并且在发生故障的情况下仍具有冗余数据中心。
收到请求后, **Akamai GSLB 处理整个数据中心**的负载平衡,并将用户定向到最近的一个。 Akamai CDN 用于静态内容。 一旦进入数据中心,对服务或数据库的任何进一步请求将保留在该数据中心内。 用户会话信息保存在 cookie 中,并在请求中传递,因此任何服务器都可以为任何请求提供服务而不会保留任何状态。
![](https://img.kancloud.cn/c9/c0/c9c0af88ad69438408832a1e98989409_1165x852.png)
在每个数据中心内,Netscaler 设备接收**请求并将其负载均衡到许多前端应用程序服务器**之一。 所有数据中心大约有 **700 个前端服务器。 前端是虚拟服务器,操作员可以根据需要通过扩展其他服务器来快速增加容量。 前端的虚拟主机分别配置有 2 个虚拟 CPU,4GB RAM 和 80GB 磁盘空间。 每个前端服务器都运行 Apache 和 Tomcat 的单个实例。 Apache 将请求传递给在本地主机上运行的 Tomcat。 **Tomcat 处理大量请求**,调用数据库和服务,并执行所有应用程序逻辑。**
## 流量
AOL.com 的访问量出人意料地可预测,遵循与互联网使用情况类似的模式。 重大世界事件将导致峰值,但否则模式将非常一致。
每天的流量从凌晨 3 点到 6 点是最低的,直到上午 10 点才急剧增加,**大约以 200,000 次点击/秒的速度徘徊 7 小时**,然后在下午 5 点之后开始下降。 每天重复相同的周期。
![](https://img.kancloud.cn/d4/79/d479a82e66c3948db7ee87c4cad547ec_1279x460.png)
在工作日中,到 AOL.com 的流量比周末高。 每周中没有一个特定的工作日始终高于其他工作日。 换句话说,星期一与星期二或星期五没有什么不同。 但是周末总是比工作日低。
![](https://img.kancloud.cn/02/42/0242dd1925adfe948462a119b810cd87_1279x421.png)
流量分布在 3 个数据中心的 2,000 台前端服务器中。 东海岸的两个数据中心分别接收约 40%的流量**,而 20%的流量到达西海岸**。 分布不均是因为 Akamai 将用户路由到最近的数据中心,并且在美国东部地区有更多的最终用户。 此外,流向国际站点 aol.ca,aol.co.uk,aol.fr,aol.de 的流量都流向美国的东海岸数据中心。
## 监控
AOL 数据中心(包括 AOL.com)中运行的所有应用程序均由自主开发的工具监视**,该工具已开发了多年,其功能类似于 Amazon 的 CloudWatch。 硬件和软件指标可以实时收集和汇总。 客户端应用程序提供报告,图形和仪表板。 提供了主机,CPU,接口,网络设备,文件系统,Web 流量,响应代码,响应时间,应用程序度量标准和其他信息。 每分钟检查一次服务器端点,并在未达到可用性和响应时间的某些阈值时发出警报。**
![](https://img.kancloud.cn/c9/0e/c90e92b0dcf1a9639e58b73703cb6f8c_1208x717.png)
## 内容管理系统
AOL.com 的大部分内容以及很多业务逻辑都来自**内容管理系统**。 CMS 是基于相同的 **Java / JSP 技术堆栈**构建的本地应用程序。 它具有除典型 CMS 之外的许多功能。 编辑者使用它来创建您在 AOL.com 上看到的内容。 开发人员使用它来配置应用程序。 它还是一个指标仪表板,供编辑人员提供有关页面上每个内容的性能如何的实时数据。
AOL 主页不仅仅是一个页面,而且位于单个域 www.aol.com。 它实际上由相同内容的数十个不同版本组成,它们在不同的域上,可能有许多可见或细微的差异。 CMS 允许在一个地方对主页的这些不同版本进行编程,并从层次结构中的多个父级继承特定版本的内容。 版本之间的差异可以很简单,例如页面上的不同品牌徽标,不同的跟踪 ID,或者某些或全部内容可以完全不同。 例如,用作美国主页(www.aol.com)的 AOL.com 版本可能与加拿大版本(aol.ca)不同,而加拿大版本可能与移动版本(m.aol。)不同。 com)。 还有供合作伙伴使用的品牌版本,例如 Verizon 的移动门户。
![](https://img.kancloud.cn/2f/f4/2ff4ce5254f9f4a0b3052cee3c0cc31e_973x633.png)
这样,**内容会滴入**,从而消除了对大量手动复制内容的需要。 以仅与美国站点相关的突发新闻事件为例。 编辑人员将在“美国”部分对突发新闻进行编程,并将其编入所有从美国继承的网站。 如果由于某种原因突发新闻仅针对 Verizon 门户,则编辑者可以在该级别进行编程,并将其下放到各个 Verizon 站点。
在将 **推广给更广泛的受众**之前,我们**测试每个功能以查看其性能。 为了方便测试,CMS 中内置了一个多变量测试工具,该工具允许任意数量的测试单元并行运行。 我们会不断测试不同的内容和设计元素,以优化体验。 定义为访问量百分比的测试受众将获得该网站的其他版本。 将用户随机放入测试单元中,并使用浏览器 cookie 进行跟踪。 测试可能是按钮颜色的微小外观变化,可能是内容的不同布局,也可能是完全不同的体验。 在应用结果之前,测试通常会运行数周。**
## 数据库
AOL.com 上的内容是高度动态的,并且需要访问数据库并为每个页面视图应用规则。 除了您在页面上看到的标记外,CMS 还包含许多规则和条件内容。 例如,如果您使用的是较旧的浏览器,则可能在页面顶部看到“浏览器升级”标语。 因此,CMS 数据库需要快速,能够处理极端流量突发并且始终可用。 我们正在运行 **MySQL 5** ,并且与虚拟化的前端服务器不同,**数据库服务器更大,具有 16 个 CPU 和额外磁盘空间的物理主机**。
CMS 数据库有 **30 个从属副本,每个数据中心**中有 10 个。 单个主服务器位于其中一个数据中心,而备用主服务器位于同一数据中心中,以防发生故障。 除了主服务器和从属服务器之外,每个数据中心中都有一个与主服务器进行复制的中继器,并且该中继器在其数据中心中充当从属服务器的主服务器。 中继器的目的是减少跨数据中心的复制流量。 发生故障时,每个数据中心中都有一个备用转发器。 如果主主机及其备份发生故障,则将其中一个转发器指定为新主机。
应用程序**通过 HTTP 接口**访问数据库。 AOL 开发了一个 apache 模块,用作 MySQL 的接口。 每个数据库主机上都有一个安装有模块的 Web 服务器。 管理员管理与其数据库的连接池,将 sql 查询作为 GET 请求,然后以 XML 格式返回结果。 对于 AOL.com 之类的 Java 应用程序,有一个 Java 客户端库可将 HTTP 调用和 XML 解析抽象为类型化的对象。
HTTP 数据库接口有多个原因。 首先,它使客户端的数据库访问更加简单。 任何使用任何编程语言的应用程序都可以进行 HTTP 调用,而无需担心 MySQL 客户端驱动程序或连接池。 其次,扩展应用程序也很容易。 应用程序通过单个 URL(指向负载均衡器虚拟 IP 地址的 URL)访问数据库。 添加新的从属服务器后,客户端应用程序无需将其添加到其配置中。 HTTP 接口的另一个好处是用于监视。 标准的 Web 服务器访问日志和监视工具可以提供数据库事务量,查询响应时间和错误。 整个 SQL 查询都作为参数包含在 URL 中,因此可以轻松地在日志中使用。 apache 模块中还内置了一个管理界面,可以从任何 Web 浏览器获取数据库诊断信息。
## 缓存
在体系结构中,有几个区域使用了缓存。 CMS 中有**个二级缓存。 首先,访问数据的 CMS Java 代码利用内存缓存。 由于**的内容在 CMS 中的每个内容都是**版本,并且从未更新过,而是一个新版本,因此可以轻松地缓存数据以减少对数据库的查找。 这种类型的缓存位于 Tomcat 实例级别,每个 700 个实例均保留其自己的缓存。**
但是仍然需要为每个页面加载检查数据库,以查看是否有新的内容修订版。 这会转化为许多数据库查询,通常结果相同。 由于我们的数据库查询全部由 HTTP 接口通过前面描述的 apache mod 代理,因此我们可以使用 Varnish Cache 轻松地**缓存请求。 数据库查询是简单的 HTTP GET 请求,URL 中带有完整的 SQL 查询,因此 Varnish 可以很好地工作,从而大大减少了到数据库服务器的流量。**
**Akamai CDN 用于缓存所有静态资产**。 除了静态资产缓存之外,Akamai 还每隔几分钟就会缓存一个精简的 AOL.com 静态版本。 当所有数据中心均无法访问时,这是灾难情况下很少使用的后备。 用户将直接从 Akamai 获取缓存的页面,直到实际页面重新联机。
缓存的最终区域在 AOL.com **前端 JSP 代码**中。 前端的工作是从 CMS 收集大量的小片段内容,并将它们组装成 HTML 页面。 我们开发了一个 JSP 标记库,使开发人员可以在页面上缓存任何组合的 HTML 块。 例如,要指定要缓存的页面部分,请用< cache:cache > < / cache:cache >包围它。
![](https://img.kancloud.cn/7e/ba/7eba9557a023c325de5f9d98dafdbe53_721x195.png)
## 开发流程
对于需要更改编码的主要功能,开发团队会松懈地遵循 **Scrum 流程**。 冲刺通常需要 3 到 4 周,具体取决于业务承诺。 有时,可能同时处理多个 Sprint,例如某个功能需要花费 4 个多星期的开发时间。
仅通过 CMS 发布即可完成许多**网站更改,而无需构建或代码部署过程。 这些是经常发生的事件,它们作为非周期过程处理,请求通过电子邮件列表发送给团队。 这些更改全天部署,每天变化范围从几到十几个或更多。 这些更改的周转时间为几分钟到几天。**
开发**小组每周轮换一个 iPhone,以作为应用程序随时待命**。 触发应用程序级别监视时,应用程序呼叫会收到警报。 例如,来自下游系统的数据可能已停止流动。 对于最终用户而言,这不会造成明显的问题,因为在这种情况下会有冗余和适度的后备,但是它会在问题变得严重之前主动发出警告。 除了应用程序待命之外,运营团队还可以待命以解决网络,主机和数据库问题。 有明确定义的上报途径和团队来处理任何情况。
开发人员**在其本地环境**中工作。 大多数使用 Macbook Pro 笔记本电脑和 Netbeans 或 Eclipse。 在开发过程中使用了 6 种非生产环境。 所有环境都与生产环境匹配相同的配置,但规模较小。 有 2 个 Dev Integration,4 个 QA 和 1 个 Staging 环境。 多个 QA 环境对于同时支持 2 个 sprint 以及必要时的生产修复都必不可少。 通常,在任何给定时间仅使用 1 或 2 个 QA 环境。 国际版本也有单独的 Dev,QA 和 Staging,它们分别运行同一代码库的单独实例来服务 aol.co.uk,aol.fr 和 aol.de。
在安装新代码之前, **QA 流程相当严格**。 这些年来,已经建立了许多回归测试,不仅有大量的自动化测试,而且还有许多手动测试。 硒用于自动化测试。 有一个自定义的屏幕截图工具,可以快速捕获各种浏览器/操作系统组合中的页面外观。 与典型的网站相比,AOL 使用较旧系统的用户更多,而我们的回归测试套件则包括 IE7,AOL 桌面浏览器以及模拟缓慢的 Internet 连接。 我们还测试了浏览器/操作系统/设备组合的广泛矩阵。 在装有 Windows 7 的 IE9 上看起来有些不错,但在装有 Windows XP 的 IE9 上却坏了。 它增加了很多额外的时间来对浏览器和操作系统的所有排列进行站点回归测试,但是事实证明,多年来,它是必要的。 Windows XP 和旧版 IE 构成了最大的问题。 AOL.com 倾向于在这些较旧的系统上吸引更多用户,因此我们会更加注意它。
完整的安装过程从开始到结束大约需要 2 个小时,整个开发团队都在听电话会议。 当流量最低时,安装通常在美国东部时间上午 6 点完成。 在安装过程中,站点或 CMS 不会停机。 即使大多数安装步骤都是脚本化的,但每个步骤都由操作员单独运行并在执行过程中进行验证。 在生产安装的前一天,在登台环境中练习了整个安装过程和脚本。 备份数据库后,将部署并验证各种组件。
更新网站的一个挑战是 CDN 交付的 CSS,图像和 Javascript 会缓存在浏览器中。 这样,用户可能会遇到糟糕的体验,直到缓存的元素过期为止。 我们遵循消除此问题的过程。 首先,将新的**静态内容推送到新版本路径**下的 CDN,从而使旧资产和新资产均可用。 接下来,将生产环境中运行的旧代码配置为指向新资产。 为了使它起作用,我们确保所有静态内容都向后兼容。 一旦有新资产可用,就将新代码部署到前端 Tomcat 服务器。 对于每台服务器安装,Apache 都会停止运行,这会告诉负载平衡器停止旋转并停止发送流量。 然后停止 Tomcat,安装新代码,重新启动 Tomcat,最后重新启动 Apache,这触发负载均衡器开始发送流量。 **使用 AOL 基于 RPM 软件包**定制开发的部署系统,通常需要 20 到 30 分钟才能在所有数据中心(总共超过 2000 台服务器)中部署新代码。
## 来回回顾
AOL.com 的技术堆栈已经成熟并且运行良好。 就像任何使用 6 年以上的系统一样,如果我们今天才开始,我们可能不会做出相同的选择。 Java / Tomcat / JSP 已被 Web 应用程序的 Python 和 PHP 取代。 Nginx 的性能可能优于 Apache,并且出现了 NoSQL 数据库。 许多这些技术已在 AOL 的其他领域中使用。 这是成功软件系统的经典难题。 相同的健壮功能使当今的体系结构如此灵活和可靠,这使得利用新技术变得困难。
但是我们在此过程中做出了一些有影响力的更改。 仅举几个例子,包括从物理主机到虚拟主机的转换。 添加清漆缓存; 并将 Jenkins 引入构建过程。 我们正在对前端 HTML 和 CSS 进行完全重写,以清理大量旧代码并促进响应性设计,而这几年前还没有考虑过。 我们的道路仍然是发展体系结构,在合理的时候重建零件并适应行业不断变化的需求。
感谢您提供非常有趣的信息:-)
我感觉合理。 简单,无聊且有效。 同样,虽然有人将 Java 称为新的 COBOL,但这并不总是一件坏事-许多语言设计使其能够很好地处理 5 年未修改的代码的维护工作,这对于像这样的大型项目来说是一个重大问题。
即使它是免费的,在系统重写后,任何问题所涉及的风险似乎也超过了任何财务收益。
像将其作为寻呼机一样旋转物理 iPhone 似乎有些愚蠢。 也许你们可能想研究一下 PagerDuty 这样的更好的解决方案。
做得好!
确实很有趣,有很多好处。 我真的很喜欢这篇文章。 谢谢戴夫。
鉴于该站点全天仅执行 8 毫米操作,因此每秒 200k 次的命中率似乎太高了。 在这段时间内,按照 200k /秒的文章进行 8 个小时的数学运算,将获得 84MM 的点击。 所以有些事了。
@EJ-200,000 次命中/秒是对前端服务器的所有请求。 对该页面的访问会产生许多服务器调用,因为在后台还会发生其他 ajax 调用。 另外,其他 AOL 属性正在使用 api,这些 api 会导致访问前端服务器的流量,但不会注册用户访问。
@ EJ 每天有 800 万访客,相对于每秒 20 万页面请求。 它没有详细介绍每个用户获得多少页面请求。
戴夫,感谢您花费时间和精力来教育我们所有人。 您参与设计的过程令人印象深刻,您的雇主也允许您提高人们的数字敏感性,这也说明了他们的数量。
嗨,戴夫,
我希望您能透露更多有关您如何授权用户的信息。 您正在使用 cookie,并且有一些身份验证服务。 是否在每个请求(如果适用)上调用这些服务? 解决方案是自家生产的吗?
我知道这个主题有点...嗯...很敏感,所以我会尽我所能。
谢谢
数据库设计更引人入胜。 有人知道我们是否也可以采用类似的设计进行交易处理吗?
很棒的文章,非常感谢。
一件特别的事引起了我的注意,因为我们一直都在努力解决它:
“对于每台服务器安装,Apache 都停止了,这告诉负载均衡器使其停止旋转并停止发送流量。”
为了将其从负载均衡器池中删除,Apache 实际上是否已停止运行? 还是为了在停止 Apache 之前将其删除而做些什么?
显然,仅停止 Apache,将导致所有活动用户断开连接。
除非使用“平稳停止”?
Thanks
- LiveJournal 体系结构
- mixi.jp 体系结构
- 友谊建筑
- FeedBurner 体系结构
- GoogleTalk 架构
- ThemBid 架构
- 使用 Amazon 服务以 100 美元的价格构建无限可扩展的基础架构
- TypePad 建筑
- 维基媒体架构
- Joost 网络架构
- 亚马逊建筑
- Fotolog 扩展成功的秘诀
- 普恩斯的教训-早期
- 论文:Wikipedia 的站点内部,配置,代码示例和管理问题
- 扩大早期创业规模
- Feedblendr 架构-使用 EC2 进行扩展
- Slashdot Architecture-互联网的老人如何学会扩展
- Flickr 架构
- Tailrank 架构-了解如何在整个徽标范围内跟踪模因
- Ruby on Rails 如何在 550k 网页浏览中幸存
- Mailinator 架构
- Rackspace 现在如何使用 MapReduce 和 Hadoop 查询 TB 的数据
- Yandex 架构
- YouTube 架构
- Skype 计划 PostgreSQL 扩展到 10 亿用户
- 易趣建筑
- FaceStat 的祸根与智慧赢得了胜利
- Flickr 的联合会:每天进行数十亿次查询
- EVE 在线架构
- Notify.me 体系结构-同步性
- Google 架构
- 第二人生架构-网格
- MySpace 体系结构
- 扩展 Digg 和其他 Web 应用程序
- Digg 建筑
- 在 Amazon EC2 中部署大规模基础架构的六个经验教训
- Wolfram | Alpha 建筑
- 为什么 Facebook,Digg 和 Twitter 很难扩展?
- 全球范围扩展的 10 个 eBay 秘密
- BuddyPoke 如何使用 Google App Engine 在 Facebook 上扩展
- 《 FarmVille》如何扩展以每月收获 7500 万玩家
- Twitter 计划分析 1000 亿条推文
- MySpace 如何与 100 万个并发用户一起测试其实时站点
- FarmVille 如何扩展-后续
- Justin.tv 的实时视频广播架构
- 策略:缓存 404 在服务器时间上节省了洋葱 66%
- Poppen.de 建筑
- MocoSpace Architecture-一个月有 30 亿个移动页面浏览量
- Sify.com 体系结构-每秒 3900 个请求的门户
- 每月将 Reddit 打造为 2.7 亿页面浏览量时汲取的 7 个教训
- Playfish 的社交游戏架构-每月有 5000 万用户并且不断增长
- 扩展 BBC iPlayer 的 6 种策略
- Facebook 的新实时消息系统:HBase 每月可存储 135 亿条消息
- Pinboard.in Architecture-付费玩以保持系统小巧
- BankSimple 迷你架构-使用下一代工具链
- Riak 的 Bitcask-用于快速键/值数据的日志结构哈希表
- Mollom 体系结构-每秒以 100 个请求杀死超过 3.73 亿个垃圾邮件
- Wordnik-MongoDB 和 Scala 上每天有 1000 万个 API 请求
- Node.js 成为堆栈的一部分了吗? SimpleGeo 说是的。
- 堆栈溢出体系结构更新-现在每月有 9500 万页面浏览量
- Medialets 体系结构-击败艰巨的移动设备数据
- Facebook 的新实时分析系统:HBase 每天处理 200 亿个事件
- Microsoft Stack 是否杀死了 MySpace?
- Viddler Architecture-每天嵌入 700 万个和 1500 Req / Sec 高峰
- Facebook:用于扩展数十亿条消息的示例规范架构
- Evernote Architecture-每天有 900 万用户和 1.5 亿个请求
- TripAdvisor 的短
- TripAdvisor 架构-4,000 万访客,200M 动态页面浏览,30TB 数据
- ATMCash 利用虚拟化实现安全性-不变性和还原
- Google+是使用您也可以使用的工具构建的:闭包,Java Servlet,JavaScript,BigTable,Colossus,快速周转
- 新的文物建筑-每天收集 20 亿多个指标
- Peecho Architecture-鞋带上的可扩展性
- 标记式架构-扩展到 1 亿用户,1000 台服务器和 50 亿个页面视图
- 论文:Akamai 网络-70 个国家/地区的 61,000 台服务器,1,000 个网络
- 策略:在 S3 或 GitHub 上运行可扩展,可用且廉价的静态站点
- Pud 是反堆栈-Windows,CFML,Dropbox,Xeround,JungleDisk,ELB
- 用于扩展 Turntable.fm 和 Labmeeting 的数百万用户的 17 种技术
- StackExchange 体系结构更新-平稳运行,Amazon 4x 更昂贵
- DataSift 体系结构:每秒进行 120,000 条推文的实时数据挖掘
- Instagram 架构:1400 万用户,1 TB 的照片,数百个实例,数十种技术
- PlentyOfFish 更新-每月 60 亿次浏览量和 320 亿张图片
- Etsy Saga:从筒仓到开心到一个月的浏览量达到数十亿
- 数据范围项目-6PB 存储,500GBytes / sec 顺序 IO,20M IOPS,130TFlops
- 99designs 的设计-数以千万计的综合浏览量
- Tumblr Architecture-150 亿页面浏览量一个月,比 Twitter 更难扩展
- Berkeley DB 体系结构-NoSQL 很酷之前的 NoSQL
- Pixable Architecture-每天对 2000 万张照片进行爬网,分析和排名
- LinkedIn:使用 Databus 创建低延迟更改数据捕获系统
- 在 30 分钟内进行 7 年的 YouTube 可扩展性课程
- YouPorn-每天定位 2 亿次观看
- Instagram 架构更新:Instagram 有何新功能?
- 搜索技术剖析:blekko 的 NoSQL 数据库
- Pinterest 体系结构更新-1800 万访问者,增长 10 倍,拥有 12 名员工,410 TB 数据
- 搜索技术剖析:使用组合器爬行
- iDoneThis-从头开始扩展基于电子邮件的应用程序
- StubHub 体系结构:全球最大的票务市场背后的惊人复杂性
- FictionPress:在网络上发布 600 万本小说
- Cinchcast 体系结构-每天产生 1,500 小时的音频
- 棱柱架构-使用社交网络上的机器学习来弄清您应该在网络上阅读的内容
- 棱镜更新:基于文档和用户的机器学习
- Zoosk-实时通信背后的工程
- WordPress.com 使用 NGINX 服务 70,000 req / sec 和超过 15 Gbit / sec 的流量
- 史诗般的 TripAdvisor 更新:为什么不在云上运行? 盛大的实验
- UltraDNS 如何处理数十万个区域和数千万条记录
- 更简单,更便宜,更快:Playtomic 从.NET 迁移到 Node 和 Heroku
- Spanner-关于程序员使用 NoSQL 规模的 SQL 语义构建应用程序
- BigData 使用 Erlang,C 和 Lisp 对抗移动数据海啸
- 分析数十亿笔信用卡交易并在云中提供低延迟的见解
- MongoDB 和 GridFS 用于内部和内部数据中心数据复制
- 每天处理 1 亿个像素-少量竞争会导致大规模问题
- DuckDuckGo 体系结构-每天进行 100 万次深度搜索并不断增长
- SongPop 在 GAE 上可扩展至 100 万活跃用户,表明 PaaS 未通过
- Iron.io 从 Ruby 迁移到 Go:减少了 28 台服务器并避免了巨大的 Clusterf ** ks
- 可汗学院支票簿每月在 GAE 上扩展至 600 万用户
- 在破坏之前先检查自己-鳄梨的建筑演进的 5 个早期阶段
- 缩放 Pinterest-两年内每月从 0 到十亿的页面浏览量
- Facebook 的网络秘密
- 神话:埃里克·布鲁尔(Eric Brewer)谈银行为什么不是碱-可用性就是收入
- 一千万个并发连接的秘密-内核是问题,而不是解决方案
- GOV.UK-不是你父亲的书库
- 缩放邮箱-在 6 周内从 0 到 100 万用户,每天 1 亿条消息
- 在 Yelp 上利用云计算-每月访问量为 1.02 亿,评论量为 3900 万
- 每台服务器将 PHP 扩展到 30,000 个并发用户的 5 条 Rockin'Tips
- Twitter 的架构用于在 5 秒内处理 1.5 亿活跃用户,300K QPS,22 MB / S Firehose 以及发送推文
- Salesforce Architecture-他们每天如何处理 13 亿笔交易
- 扩大流量的设计决策
- ESPN 的架构规模-每秒以 100,000 Duh Nuh Nuhs 运行
- 如何制作无限可扩展的关系数据库管理系统(RDBMS)
- Bazaarvoice 的架构每月发展到 500M 唯一用户
- HipChat 如何使用 ElasticSearch 和 Redis 存储和索引数十亿条消息
- NYTimes 架构:无头,无主控,无单点故障
- 接下来的大型声音如何使用 Hadoop 数据版本控制系统跟踪万亿首歌曲的播放,喜欢和更多内容
- Google 如何备份 Internet 和数十亿字节的其他数据
- 从 HackerEarth 用 Apache 扩展 Python 和 Django 的 13 个简单技巧
- AOL.com 体系结构如何发展到 99.999%的可用性,每天 800 万的访问者和每秒 200,000 个请求
- Facebook 以 190 亿美元的价格收购了 WhatsApp 体系结构
- 使用 AWS,Scala,Akka,Play,MongoDB 和 Elasticsearch 构建社交音乐服务
- 大,小,热还是冷-条带,Tapad,Etsy 和 Square 的健壮数据管道示例
- WhatsApp 如何每秒吸引近 5 亿用户,11,000 内核和 7,000 万条消息
- Disqus 如何以每秒 165K 的消息和小于 0.2 秒的延迟进行实时处理
- 关于 Disqus 的更新:它仍然是实时的,但是 Go 摧毁了 Python
- 关于 Wayback 机器如何在银河系中存储比明星更多的页面的简短说明
- 在 PagerDuty 迁移到 EC2 中的 XtraDB 群集
- 扩展世界杯-Gambify 如何与 2 人组成的团队一起运行大型移动投注应用程序
- 一点点:建立一个可处理每月 60 亿次点击的分布式系统的经验教训
- StackOverflow 更新:一个月有 5.6 亿次网页浏览,25 台服务器,而这一切都与性能有关
- Tumblr:哈希处理每秒 23,000 个博客请求的方式
- 使用 HAProxy,PHP,Redis 和 MySQL 处理 10 亿个请求的简便方法来构建成长型启动架构
- MixRadio 体系结构-兼顾各种服务
- Twitter 如何使用 Redis 进行扩展-105TB RAM,39MM QPS,10,000 多个实例
- 正确处理事情:通过即时重放查看集中式系统与分散式系统
- Instagram 提高了其应用程序的性能。 这是如何做。
- Clay.io 如何使用 AWS,Docker,HAProxy 和 Lots 建立其 10 倍架构
- 英雄联盟如何将聊天扩大到 7000 万玩家-需要很多小兵。
- Wix 的 Nifty Architecture 技巧-大规模构建发布平台
- Aeron:我们真的需要另一个消息传递系统吗?
- 机器:惠普基于忆阻器的新型数据中心规模计算机-一切仍在变化
- AWS 的惊人规模及其对云的未来意味着什么
- Vinted 体系结构:每天部署数百次,以保持繁忙的门户稳定
- 将 Kim Kardashian 扩展到 1 亿个页面
- HappyPancake:建立简单可扩展基金会的回顾
- 阿尔及利亚分布式搜索网络的体系结构
- AppLovin:通过每天处理 300 亿个请求向全球移动消费者进行营销
- Swiftype 如何以及为何从 EC2 迁移到真实硬件
- 我们如何扩展 VividCortex 的后端系统
- Appknox 架构-从 AWS 切换到 Google Cloud
- 阿尔及利亚通往全球 API 的愤怒之路
- 阿尔及利亚通往全球 API 步骤的愤怒之路第 2 部分
- 为社交产品设计后端
- 阿尔及利亚通往全球 API 第 3 部分的愤怒之路
- Google 如何创造只有他们才能创造的惊人的数据中心网络
- Autodesk 如何在 Mesos 上实施可扩展事件
- 构建全球分布式,关键任务应用程序:Trenches 部分的经验教训 1
- 构建全球分布式,关键任务应用程序:Trenches 第 2 部分的经验教训
- 需要物联网吗? 这是美国一家主要公用事业公司从 550 万米以上收集电力数据的方式
- Uber 如何扩展其实时市场平台
- 优步变得非常规:使用司机电话作为备份数据中心
- 在不到五分钟的时间里,Facebook 如何告诉您的朋友您在灾难中很安全
- Zappos 的网站与 Amazon 集成后冻结了两年
- 为在现代时代构建可扩展的有状态服务提供依据
- 细分:使用 Docker,ECS 和 Terraform 重建基础架构
- 十年 IT 失败的五个教训
- Shopify 如何扩展以处理来自 Kanye West 和 Superbowl 的 Flash 销售
- 整个 Netflix 堆栈的 360 度视图
- Wistia 如何每小时处理数百万个请求并处理丰富的视频分析
- Google 和 eBay 关于构建微服务生态系统的深刻教训
- 无服务器启动-服务器崩溃!
- 在 Amazon AWS 上扩展至 1100 万以上用户的入门指南
- 为 David Guetta 建立无限可扩展的在线录制活动
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿个通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训
- 缩放原理
- TripleLift 如何建立 Adtech 数据管道每天处理数十亿个事件
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿条通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训