# Bazaarvoice 的架构每月发展到 500M 唯一用户
> 原文: [http://highscalability.com/blog/2013/12/2/evolution-of-bazaarvoices-architecture-to-500m-unique-users.html](http://highscalability.com/blog/2013/12/2/evolution-of-bazaarvoices-architecture-to-500m-unique-users.html)
![](https://img.kancloud.cn/9a/0f/9a0f87b9f39f58a809b716a32344244f_144x160.png)
*这是由 [Victor Trac](http://victortrac.com) ,的云架构师 [Bazaarvoice](http://www.bazaarvoice.com) 撰写的客座 。*
Bazaarvoice 是一家与人们定期进行互动但从未听说过的公司。 如果您在 bestbuy.com,nike.com 或 walmart.com 等网站上阅读了客户评论,则说明您正在使用 Bazaarvoice 服务。 这些站点以及其他数千个站点都依赖 Bazaarvoice 提供软件和技术,以收集和显示有关产品和服务的用户对话。 所有这些意味着 Bazaarvoice 会处理我们每天使用的大多数产品的很多情绪数据。
Bazaarvoice helps our clients make better products by using a combination of machine learning and natural language processing to extract useful information and user sentiments from the millions of free-text reviews that go through our platform. This data gets boiled down into reports that clients can use to improve their products and services. We are also starting to look at how to show personalized sortings of reviews that speak to what we think customers care about the most. A mother browsing for cars, for example, may prefer to read reviews about safety features as compared to a 20-something male, who might want to know about the car’s performance. As more companies use Bazaarvoice technology, consumers become more informed and make better buying decisions.
![](https://img.kancloud.cn/10/8a/108a5f3fc64ac0761c90617b1a43a6a8_311x500.png)
*红色的框由 Bazaarvoice 提供*
Bazaarvoice 已集成到全球数千个网站中。 在任何给定的月份,我们将为超过 4.75 亿的唯一身份访问者提供流量。 这些访问者将浏览,阅读和贡献我们的内容,包括从产品评论到问题&答案,甚至是我们客户产品和服务的视频等内容。 这五亿人口将在我们的平台上花费大量时间,每个月的浏览量达到数百亿。 而且由于我们在众多人流量众多的商业站点上,因此我们的可靠性和正常运行时间至关重要。 如果 Bazaarvoice 平台发生故障,我们将影响成千上万依赖我们的网站。 为了快速,可靠地完成所有这些工作,我们设计了一个高度冗余的堆栈,该堆栈主要建立在 Amazon Web Services 之上。
假期购物旺季是我们基础设施最繁忙的时间。 在“黑色星期五”和“网络星期一”,我们会看到流量非常高,从今年年底到 1 月,我们的负荷一直很高。 这就提出了一个独特的扩展挑战,因为我们必须在一年中的 3-4 个月内处理几乎两倍于正常(并且一直在增长)的流量。 今年,我们预计在假日购物旺季每秒将收到 6 万至 6.5 万次请求。
![](https://img.kancloud.cn/a9/0d/a90d5dbb4a84abe10e310402267b7981_500x289.png)
*假期前到我们平台的带宽和 HTTP 请求的一周视图*
## 卑微的开端
与大多数大型软件堆栈一样,我们从一个非常简单的体系结构开始。 我们最初的应用程序是使用 MySQL 作为数据存储的单个整体 Java 应用程序,所有这些程序都在托管主机环境中运行。 随着我们这些年来的成长,我们在相同的代码库上构建了其他应用程序,并增加了新功能。 我们是 Solr 的早期用户,它使我们能够将 MySQL 主要转变为键值存储。 除了 Solr,我们通过仅给 JVM 更多的 RAM 或将 MySQL 服务器放在更快的盒子上来垂直扩展。
然而,正如一位经验丰富的工程师所知道的那样,垂直缩放所带来的容易的早期收益很快变得难以实现。 因此,我们通过简单地复制整个堆栈开始水平扩展。 我们称这些为“集群”,它们使我们无需进行较大的应用程序更改即可实现水平扩展。
![](https://img.kancloud.cn/9a/33/9a332670fb0e149de0138d1761e7f48f_398x500.png)
*每个群集都是具有不同数据的整个堆栈的副本。*
在 2008 年,Bazaarvoice 大约 3 岁时,我们在托管数据中心经历了一些停机时间,这使我们面临着更多冗余的挑战。 一种选择是简单地在另一个地理区域中找到另一个托管服务提供商,然后复制我们所有的服务器。 但是,由于我们使用的是 MySQL,因此我们无法轻松地跨地区使用多主机。 因此,我们最初的计划只是从主托管数据中心运行 MySQL 复制,并保持足够的容量以热备份方式在备份区域中为生产流量提供服务。 如果我们的主数据中心发生故障,我们将更新 DNS 以指向备份数据中心。 但是,这将意味着很难进行单向故障转移,因为 MySQL 从属服务器将被提升为主服务器。
为使从属数据中心在灾难中真正发挥作用,我们需要保留足够的备用容量来服务我们 100%的生产流量,从而在不增加生产能力的情况下有效地使托管成本增加一倍。
### 输入 AWS
作为当时的年轻创业公司,我们无法简单地将托管成本提高一倍。 Amazon Web Services 在一个月前(即 2008 年 10 月)刚刚从 EC2 删除了“测试版”标签,因此我们认为这可能是一个绝佳的机会,可以利用这种新型云技术在我们的备用站点上节省资金。
在 EC2 上构建冗余备份站点时,我们的策略与使用备份数据中心基本相同,除了不必为机架中准备就绪的服务器付费,我们只需要运行 MySQL 从属即可。 。 当我们需要故障转移到 EC2 时,我们可以按需启动实例。 这样做的成本只是在另一个数据中心复制整个生产堆栈的成本的一小部分。
![](https://img.kancloud.cn/83/b0/83b06088c3d50a338102146a3133e142_499x226.png)
*我们最初尝试使用 MySQL 从站进入 Amazon Web Services。*
幸运的是,我们无需执行故障转移计划。 但是,当我们决定要在托管数据中心和 Amazon us-east-1 地区之外提供实时流量时,我们使用 EC2 的经验使我们有足够的信心继续使用它。 我们的数据已经被复制到 us-east-1 中,因此我们只需要启动应用程序实例并在应用程序堆栈上进行一些小的工程设计即可使其适合实时请求。
AWS us-east-1 设计为只读,可与 MySQL 复制完美配合。 当最终用户向 AWS 提交新的内容时,这变得更加复杂,因为 AWS 中的 MySQL 是只读的。 我们通过编写一个基于 MQ 的提交队列解决了这个问题,该队列将写操作复制回我们的主数据中心,在此我们在 MySQL Master 上执行写操作。 在几秒钟内,更改将被复制回 AWS。 此设置运行良好,使我们能够将生产能力提高一倍,同时仍然使我们能够在必要时完全故障转移到 AWS。 不久之后,我们决定将 us-east-1 集群复制到 us-west-2,从而为我们提供了三个实时生产区域。
[ ![](https://img.kancloud.cn/14/6f/146f4f23463761e40d4e9cd833329c47_499x315.png)
*MySQL 从我们的托管数据中心复制到两个 AWS 区域。*
为了在两个 AWS 区域与我们的托管 DC 之间路由请求,我们采用了基于 DNS 的健康检查系统。 在 EC2,我们使用在具有 EIP 的实例上运行的 HAProxy 作为负载均衡器。 这使我们在 EC2 的每个区域的每个群集获得一个公共 IP,在我们的托管数据中心的每个群集获得一个公共 IP。 我们将这些原始 IP 添加到了我们的 DNS 服务的基于 DNS 的运行状况检查池中,该池定期向每个原始 IP 发出 HTTP 请求。 DNS 服务器会拉出所有在运行状况检查中失败的原始 IP,同时平衡到其他区域的流量。 这样做的一个附带好处是,我们可以轻松地拆除一个区域并一次滚动部署(一个区域一次),让 DNS 处理流量的转移。
多年来,随着我们获得成千上万的客户并将流量扩展到每月数十亿的页面浏览量,我们最终获得了运行在 3 个 AWS 区域和受管理数据中心的 7 个集群中的数百个应用程序服务器。 每个集群都有一个主数据库,在三个区域中都有大量的从属链。 如果沿链上的中继从机死亡,我们将必须重建所有下游从机以重置主机位置。 从操作的角度来看,这变得非常难以管理。 我们还有两个重要的写流量瓶颈:在托管数据中心运行的 MySQL 主服务器和在所有从服务器上的 MySQL 单线程复制。 当我们不得不摄取大量新数据时,奴隶通常会落后一些,有时甚至要花 10 个小时或更长时间。 我们需要重新考虑整个堆栈。
## 从干净的板岩开始
在 2011 年底,我们的堆栈正在工作,但我们希望将其提升到更高的灵活性,性能和可靠性水平。 我们想解决我们的多区域复制问题。 我们希望摆脱单个集群,以便我们可以做更多有趣的跨集群数据关系。 我们想更快地发布。 我们希望成为更多的云原生用户,以便能够利用自动扩展等 AWS 功能。 这是很大的变化,但是我们从 Amazon Web Services 获得了一个新的 CTO,他非常支持这些计划。
### 组织和技术变更
我们的整体 Java 应用程序分为一组小型服务,每个小型服务均由分散的工程团队提供支持。 这些团队负责从开发到质量检查再到运营的整个服务生命周期。 此外,工程学采用敏捷作为开发方法,以前我们是在瀑布驱动下进行的。 这些更改使我们能够从高度协调的 8-12 周发布周期转变为允许任何团队随时发布。 一些团队继续进行完整的持续集成。
在技术方面,我们决定在新堆栈中全力支持 AWS。 对于我们的记录系统,我们选择 Cassandra 是因为它具有多区域复制功能(DynamoDB 在这里失败)和云原生操作质量。 出于类似原因,ElasticSearch 取代了 Solr。
### 云工程师
我们成立了一个名为 Platform Infrastructure 的团队,负责构建 AWS 基础设施和云工具。 平台基础架构团队选择使用 CloudFormation 在 Amazon 的虚拟私有云环境中的三个区域(us-west-2,us-east-1 和 eu-west-1)中构建 AWS。 然后,平台基础架构团队构建了有用的微服务,例如内部 VPC DNS,内部监控,集中式日志记录,成本分析,甚至是受 Netflix 启发的“猴子”,以执行标签一致性实施。 由于所有内容都使用 CloudFormation,因此我们能够在几个小时内迅速为三个区域的 Dev,QA 和 Prod 环境启动相同的 VPC。 这个内部称为 Nexus 的新平台负责“繁重”的基础架构,并为应用程序团队构建服务奠定了坚实的基础。
![](https://img.kancloud.cn/cf/e9/cfe93a51d5e9aec99d3fdb1210f042d2_500x348.png)
*Nexus:三个 AWS 区域中跨九个 VPC 的三个环境。 来自类似环境的 VPN。*
### VPC 基础架构
除了环境标签,IP 范围(当然还有数据集)之外,每个 VPC 看起来都相同。 每个 VPC 使用一个/ 20 子网,分为三个/ 24 公共子网和三个/ 22 私有子网,每个 VPC 使用三个可用区。 我们的 CloudFormation 模板还使用自动缩放组 1 来为每个可用区配置 1 台 NAT 服务器,并设置路由,以便每个专用子网使用其自己的 NAT 服务器进行出站连接。 这允许 AZ 级别的隔离,并使 NAT 带宽增加三倍,而不是每个 VPC 使用单个 NAT 服务器。
![](https://img.kancloud.cn/94/3d/943dc34ff367f8df45ee38dd1e585fb5_500x385.png)
*每个 VPC 使用三个可用区,每个可用区都有自己的 NAT 实例。*
我们为每个工程师提供了一个完整的 AWS IAM 帐户,使他们可以不受限制地访问 Amazon 的各种更高级别的服务,例如简单工作流程服务,Elastic MapReduce 和 Redshift。 我们选择优化工程师敏捷性而不是效率。 但是为了确保我们的成本不会完全失控,平台基础架构团队会强制执行标签一致性。 为了保持一致,每个团队必须在其所有资源中使用两个标签:team 和 VPC。 没有适当标签的任何 AWS 资源都会自动终止。 拥有一致且强制的标记的一个巨大好处是,我们能够确定每个团队的确切成本。
### 数据层
我们的数据团队提供了三项服务来处理我们的海量数据集,所有这些服务均针对开发人员的生产力和易于管理进行了优化。 为了存储通用的内容类型而不需要进行模式迁移,并且能够表达性地查询我们的数据,EmoDB 和 Polloi 诞生了。 在 Cassandra 的支持下,EmoDB 设计为使用最终一致性(AP)和多主机冲突解决方案来跨越多个数据中心。 它公开了一个非常简单的 RESTful API,允许用户创建“表”(不需要模式-仅表名和表放置),并将文档存储在这些表中。
EmoDB 仍然缺少 SQL 语义,例如 where,join,group by-基本上是除主键查找和表扫描之外的任何其他语义。 这就是 Polloi 的来历。
Polloi 将实体流索引到 ElasticSearch 集群中。 每个表的索引是根据用非常简单的域特定语言(DSL)指定给 Polloi 的规则完成的。 一旦 Polloi 根据这些用户指定的规则为数据建立了索引,我们最终将获得一个功能强大的 ElasticSearch 集群,该集群不仅可以处理主键查找。 而且由于每个 Polloi 集群都有一个自定义的规则集,所以我们有多个 Elasticsearch 集群,每个集群都针对使用它们的应用程序的需求进行了调整。 应用程序可以利用 ElasticSearch 的强大功能来对 PB 级数据进行超快速的查询响应。
ElasticSearch 仍需要与 EmoDB 保持同步,因此我们创建了数据总线以将 EmoDB 和 Polloi 结合在一起。 Databus 允许应用程序监视 EmoDB 表和文档上的更新事件,而 Polloi 侦听 Databus 上的实时更新并适当地索引数据。
![](https://img.kancloud.cn/23/e3/23e33f6ead43b78add4efe48f2b03182_500x313.png)
*EmoDB,Polloi 和数据总线*
简而言之,EmoDB 提供了一种简单的方法来存储 JSON 对象,对特定应用程序很重要的 Polloi 索引字段,并且 Databus 会将数据的更改通知 Polloi 以及其他任何人。
### 应用层
随着转向面向服务的体系结构,我们的工程师不再受限于特定的技术堆栈。 服务团队可以选择最适合他们的语言和组件。 尽管大多数团队仍然选择使用 Java 来实现其服务,但 Python 和 node.js 是另外两个受欢迎的选择。
此外,团队可以自由选择 Amazon 的更高级别的服务,例如简单队列服务(SQS),简单通知服务(SNS)甚至简单工作流服务(SWF)。 现在,我们最成功的服务之一就是很大程度上基于 SWF,使 Bazaarvoice 成为亚马逊最大的 SWF 用户之一。 使用这些 AWS 服务使团队能够比以前更快地构建其服务。
### CDN & DNS
我们遗留在堆栈中的两个组件是 CDN 和基于 DNS 的全局流量管理层。 他们俩都运作良好,因此我们不认为需要为改变而做出改变。
![](https://img.kancloud.cn/9b/2f/9b2f78e196939a1df241b5f9c8711b8e_398x500.png)
*Bazaarvoice 的新堆栈的高级概述。*
## 未来
随着我们在新堆栈上增加生产工作量,我们一直在寻找改进的地方。 我们计划在应用程序部署,基于代理的异常检测方面实现更多自动化,并提高我们的运营效率。 我们还构建了一些有用的 AWS 工具,希望在不久的将来开源。
如果您对我们架构的任何方面都感兴趣,请发表评论或 [直接与我联系](http://twitter.com/victortrac) 。
很好的文章。 我很喜欢阅读您如何将可搜索性与可伸缩键值存储合并。
解释得很好,路径清楚地显示了简单应用程序如何转换为大型企业应用程序。
喜欢该架构的详细视图,并且通过视觉插图更容易理解。 写得很好
做得好! 我希望这会不断发展! 这非常有帮助。 很棒的博客!
- 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 内容平台的经验教训