# LinkedIn:使用 Databus 创建低延迟更改数据捕获系统
> 原文: [http://highscalability.com/blog/2012/3/19/linkedin-creating-a-low-latency-change-data-capture-system-w.html](http://highscalability.com/blog/2012/3/19/linkedin-creating-a-low-latency-change-data-capture-system-w.html)
![](https://img.kancloud.cn/39/4c/394c8a91d1cf66c79caf05eba7f03c40_134x225.png)
*这是 LinkedIn 分布式数据系统团队的高级成员 [Siddharth Anand](http://practicalcloudcomputing.com/) 的特邀帖子。*
在过去的三年中,我很幸运能够与许多新兴的 NoSQL 产品一起使用,以支持高流量,面向客户的网站的需求。
在 2010 年,我帮助 Netflix 成功 [将其 Web 规模用例从 Oracle 转换为 AWS 的托管数据库服务 SimpleDB](http://highscalability.com/blog/2010/10/22/paper-netflixs-transition-to-high-availability-storage-syste.html) 。 迁移完成后,我们开始了第二次迁移,这次是从 SimpleDB 到 Cassandra 的迁移。 第一次过渡是我们从自己的数据中心迁移到 AWS 的云的关键。 第二个是我们从一个 AWS 区域扩展到多个地理分布区域的关键-今天,Netflix 为两个 AWS 区域提供流量,一个在弗吉尼亚州,另一个在爱尔兰( [F1](http://highscalability.com/blog/2012/3/19/linkedin-creating-a-low-latency-change-data-capture-system-w.html#Footnote_1) )。 这两个过渡都是成功的,但都涉及集成难题,例如创建数据库复制技术。
2011 年 12 月,我加入了 LinkedIn 的分布式数据系统( DDS )团队。 DDS 开发了数据基础结构,包括但不限于 NoSQL 数据库和数据复制系统。 LinkedIn 对构建和开放源代码创新项目并不陌生,它正在加倍使用 NoSQL 来加速其业务-DDS 正在开发一个名为 Espresso( [R1](http://highscalability.com/blog/2012/3/19/linkedin-creating-a-low-latency-change-data-capture-system-w.html#Reference_1) )的新 NoSQL 数据库,这是以后的主题。
观察到两家流量大的网络公司解决了类似的问题之后,我不禁注意到了一系列的创新。 这些问题中有些是困难的,对于每个公司来说,单独解决其问题确实是不幸的。 同时,由于缺乏可靠的开源替代方案,每个公司都不得不解决这些问题。 这显然对一个以快速发展的新兴企业为主导的行业产生了影响,这些行业无法建立 50 人的基础设施开发团队,也无法花数月的时间来构建功能。
## **更改数据捕获系统**
今天,我想重点介绍一种这样的创新:Change Data Capture 系统
关系数据库已经存在很长时间了,已经成为公司所有数据的可靠存储介质。 换句话说,它是公司业务关键数据的真实来源。 通常,数据会从此主要数据存储中提取,转换并存储在辅助数据存储中,例如数据仓库。 该二级存储通常支持推动业务洞察力和方向的数据分析。 在此方案中,这两个存储分别称为 OLTP 存储和 OLAP 存储。 ( [F2](http://highscalability.com/blog/2012/3/19/linkedin-creating-a-low-latency-change-data-capture-system-w.html#Footnote_2) )
所有这些已经存在了数十年,那么有什么新东西? 来自主存储的数据越来越多地用于提供业务决策之外的其他信息。 在 LinkedIn 上,它还提供实时搜索索引,实时网络图索引,缓存一致性,数据库只读副本等。这些都是 LinkedIn 的近实时数据需求的示例。
如果您曾经从事过将数据从主存储转移到辅助存储的工作,那么您无疑会熟悉可用的选项。
例如,如果您在 OLTP 到 OLAP 的空间中工作,则使用某种 ETL(提取,转换和加载)技术。 这个领域已经看到了围绕工具(,例如,使用 GUI 拖放工具轻松定义转换)和跨供应商集成(,例如从 Oracle 到 Teradata,Aster Data 等)的创新。 .. )。 该行业通常使用 ETL 进行夜间工作,以使高管可以了解前一天,一周,一个月,一年的业务表现。
如果需要从主数据存储中获取近实时更新流(如下所示)以解决 LinkedIn 的近实时需求,该怎么办?
![Databus_Use_Cases](https://img.kancloud.cn/3d/ad/3dad95431d04ee58253c341d00fb6403.png)
除了昂贵且专有的特定于供应商的产品外,几乎没有其他选择。
## **引入数据总线**
Databus 是该领域的创新解决方案。
它具有以下功能:
* Pub-sub 语义
* 订单内交付保证
* 源处的提交按事务分组
* ACID 语义在整个管道中得以保留
* 支持流分割
* 然后按分区确定订购保证
* 像其他消息传递系统一样,为最近发布的消息提供了非常低的延迟消耗
* 与其他邮件系统不同,它提供任意长的回溯,而不会影响源
* 高可用性和可靠性
## 数据总线如何工作?
数据总线由 3 个重要部分组成:
* 继电器
* 引导程序
* 客户资料库
下图显示了 Databus 架构。 数据总线中继将从源数据库(例如 Oracle,MySQL 等... )( **步骤 1** )中拉出最近提交的事务。 中继会将这些数据反序列化为紧凑形式(Avro 等),并将结果存储在循环的内存缓冲区中。 侦听事件的客户端(订户)将拉动最近在线的更改,因为它们出现在中继中( **步骤 2** )。 Bootstrap 组件还在监听中继中出现的在线更改。( **步骤 3** )
![Databus_Operation](https://img.kancloud.cn/3d/ad/3dad95431d04ee58253c341d00fb6403.png)
如果订户落在后面,以致其请求的数据不再位于中继的内存缓冲区中,则订户可以请求从过去的时间 T 开始出现的合并增量( **步骤 4** )。 这将返回自时间 T 以来发生的所有更改的有效表示。
![Databus_Operation](https://img.kancloud.cn/3d/ad/3dad95431d04ee58253c341d00fb6403.png)
如果没有数据集先验知识的新订户要加入聚会,则需要完全引导。 首先,订户的 Databus 客户端库将在过去的某个时间 T 请求一个一致的快照( **步骤 5** )。 然后,自该时间 T 起,客户端库将请求合并 Delta( **步骤 6** )。 在订阅服务器应用合并增量之后,客户端库将切换为侦听来自中继的联机更改( **步骤 7** )。 客户端库帮助订户获得自时间 T 以来的所有更改,时间 T 可以是任意时间点,从而使订户不受更改来源的详细信息的影响。
![Databus_Operation](https://img.kancloud.cn/3d/ad/3dad95431d04ee58253c341d00fb6403.png)
## **Databus 的自举组件**
Databus 最具创新性的功能之一是其 Bootstrap 组件。 数据变更捕获系统已经存在了很长时间(,例如 Oracle Streams )。 但是,当使用者落后时,所有这些系统都会在主数据存储上增加负载。
引导一个全新的消费者是另一个问题。 它通常涉及一个非常手动的过程-即在一个临时的 Oracle 实例上恢复前一晚的快照,转换数据并将其传输给使用者,然后应用自快照以来的更改等...
Databus 的 Bootstrap 组件以无缝,自动化的方式处理上述两个用例。
## Databus 的自举组件如何工作?
Databus Bootstrap 组件由两种类型的存储组成:日志存储和快照存储。 日志存储服务于合并增量,而快照存储服务于一致的快照。
![Databus_Bootstrap](https://img.kancloud.cn/3d/ad/3dad95431d04ee58253c341d00fb6403.png)
1. 如前所述,Bootstrap 组件侦听中继中发生的在线更改。 LogWriter 将这些更改附加到日志存储。
2. 日志应用程序将日志存储中的最新操作应用于快照存储
3. 如果新订户连接到 Databus,则该订户将从运行在 Bootstrap 组件中的 Bootstrap 服务器进行引导。
4. 客户端将首先从快照存储中获取一致的快照
5. 然后,客户端将从日志存储中获得出色的合并增量
6. 客户端赶上中继的内存缓冲区窗口后,客户端将切换为从中继读取
## 数据总线的未来计划
Databus 和 Espresso(我们下一个 NoSQL 商店的的工程师,足够说)的团队一直在不懈地努力以支持 Espresso 中的 Databus 复制-Databus 将成为 Espresso 的本机内部复制技术。 此外,一旦团队找到了一些空闲时间,他们将对其进行开源。
我们正在寻找在解决棘手问题方面有良好记录的工程师加入我们的 DDS。 如果您有兴趣,可以随时在 [LinkedIn](http://www.linkedin.com/in/siddharthanand) 上 ping 我。
## 这对 NoSQL 意味着什么
与 Databus 一样酷,它不适用于所有 NoSQL 存储。 当前,许多 NoSQL 技术(尤其是许多 Dynamo 风格的键-值存储)提供的功能集之间存在很大差距。 它们没有提供 Databus 可以提取的时间轴一致的更改流。
没有这种支持,将有两个未实现的用例:
* 支持向现有商业智能基础架构(,即每晚,面向 ETL 的负载)中的出站提要
* 支持向二级索引(例如搜索,网络图,缓存等)的出站近实时提要...
最近,对于 Cassandra,Netflix 和 Ooyala 都分别解决了这个问题。 Netflix 发布了一个有关 [Aegisthus](http://techblog.netflix.com/2012/02/aegisthus-bulk-data-pipeline-out-of.html) 的技术博客,该系统将最终一致的数据文件集转换为时间轴一致的流。 该流当前由 Business Intelligence 消耗-它不是实时的,因为它取决于内存刷新间隔。 但是,通过一些调整,它可以接近实时。 我们期待该技术的开源。
更重要的是,我们希望 NoSQL 供应商为其产品解决此问题。
## 更多资源
* [数据基础结构@ LinkedIn](http://www.slideshare.net/r39132/linkedin-data-infrastructure-qcon-london-2012) -QCON London 2012,Sid Anand,LinkedIn 高级会员
* [数据总线:用于时间线一致的更改数据捕获的系统](http://www.slideshare.net/dtunkelang/databus-a-system-for-timelineconsistent-lowlatency-change-capture) -CIKM 2011,Chavdar Botev,LinkedIn 高级会员
* LinkedIn 上的 [数据基础结构](http://www-conf.slac.stanford.edu/xldb2011/talks/xldb2011_tue_1005_LinkedIn.pdf)-XLDB 2011,Shirshanka Das,LinkedIn 高级成员
* [LinkedIn 基础设施](http://qconsf.com/dl/QConSF2007/slides/public/JeanLucVaillant_LinkedIn.pdf) -QCON SF 2007,Jean-Luc Vaillant,LinkedIn 联合创始人兼前首席技术官
## 致谢
我要感谢构建此系统的工程师们的不懈努力:
阿迪亚·奥拉德卡(Aditya Auradkar),查夫达尔·博特夫(Chavdar Botev),席尔香卡·达斯(Shirshanka Das),戴夫·德马格(Dave DeMaagd),亚历克斯·费恩伯格(Alex Feinberg),潘宁德拉·甘蒂(Phanindra Ganti),雷·高(Bhaskar Ghosh),基肖尔·戈帕拉克里希纳(Kishore Gopalakrishna),米希尔·甘地(Mihir Gandhi),布伦丹·哈里斯(Broaddan Harris),斯沃洛普·贾加迪什(Swaroop Jagadish),乔尔·科西(Joel Koshy),凯文·克鲁瓦兹(Jay Lua Naga) ,Neha Narkhede,Sasha Pachev,Igor Perisic,Lin Qiao,Tom Quiggle,Jun Rao,Bob Schulman,Abraham Sebastian,Oliver Seeliger,Adam Silberstein,Boris Shkolnik,Chinmay Soman,Subbu Subramaniam,Roshan Sumbaly,Kapil Surlaker,Sajid Topiwala Tran,Balaji Varadarajan,Jemiah Westerman,Zach White,David Zhang,Jason Zhang,Agila Devi,Neil Pinto,Ramana Ramakrishnan,Sai Sundar,Nishant Vyas,Agila Devi,Neil Pinto,Ramana Ramakrishnan,Sai Sundar 和 Nishant Vyas。
我还要特别感谢 Bob Schulman,Kapil Surlaker 和 Shirshanka Das 对本文的帮助。
## 脚注
1. 就快速延迟而言,Netflix 的英国和爱尔兰客户受益于 Netflix 在本地的区域性业务。 如果您不熟悉 AWS 区域,则区域可为最终用户提供地理位置优势。 区域本身由几个数据中心组成,这些数据中心在 AWS 中称为“可用区”。 顾名思义,可用区在托管区域内提供灾难恢复。 对于像网站这样的对延迟敏感的应用程序,跨区域灾难恢复从来都不是一个好主意。
2. OLTP(在线事务处理)与 OLAP(在线分析处理):这区分了它们的用途-OLTP 用于主数据服务,OLAP 用于主数据的修改后的副本的分析处理。
“ Databus 简介” ...这可用开源吗? 那将会?
我们想开始讨论。 它将很快开源。 人们对此有何看法? 人们将如何使用它? 等等...
我们计划在今年晚些时候开源 Databus。
我期待它被开源。 我认为许多人(包括我自己在内)都将使用它从旧版源数据库中将其用于 ETL,在这些旧版源数据库中,架构不太适合加载增量数据集。 那里的商业 CDC 产品(例如 Attunity)使开发人员难以自定义和做出贡献。 我正在研究一种通过对 SQL Server 事务日志进行反向工程来获取 CDC 数据的解决方案,并且很乐意遵循常见的 CDC 抽象。
我看到这被用于将交易从关系业务软件数据库中引入并进入多个专用系统-图形数据库,统计平台,HDFS 存储,内存 BI 存储和流数据库-都在同一时间 时间。 我很高兴听到这一消息,因为它是我对商业软件的未来愿景的关键部分。
首先,感谢您与我们分享。
我对 ETL 方面的理解不够充分,但是我尝试查看 MongoDB 如何适合此方案。 我很可能在这里简化了一些事情,但是请忍受。 :)
因此,我们都知道有一个常规数据库存储主要数据。 该数据库按顺序发布它的更改,这些更改被捕获并保存在固定大小的缓冲区中,并可供订户使用。 更改的缓冲区定期备份到磁盘上。 打算进行完全同步的新成员可以从备份副本中提取更改。 与订户一起的数据可以被用来导出其他有意义的数据。
在我看来,MongoDB 提供了所有这些功能,或者至少提供了构建此类系统的基本基础结构。
常规数据库是 MongoDB。 它以 oplog 的形式发布更改-通常是内存映射。 客户端可以打开一个尾部游标到 oplog 集合,并在更改发生时将更改流式传输到数据库中。 客户端可以与作为副本集的一部分安排的辅助 DB 相关联,在该副本集上可以运行 Map-Reduce 或 Aggregation 任务。 辅助服务器之一可以充当“ Bootstrap 服务器”。 (通过执行完全同步,可以从另一个辅助节点启动新的辅助节点)。 特殊辅助节点的操作日志可能类似于“中继”,以避免在主节点上加载。
这有道理吗? MongoDB 是否为此项目进行了评估?
任何想法,将不胜感激。
OTOH,现在,如果这必须与特定的数据库一起使用,那么每个数据库都将有“ Databus 驱动程序”吗? 例如,如果必须与 MongoDB 一起使用,则必须有一个 MongoDB 驱动程序,该驱动程序可以理解 MongoDB 发布的 oplog 格式并以通用格式提供给客户端。
还是您要发布标准并要求数据库开发人员根据该标准进行更改?
再次感谢您。
顺便说一句,我也正在等待有关 Espresso 的帖子。 :)
-婆罗门
席德,不错的帖子 在 Yammer,我们正在为近实时搜索做类似的事情。 Databus 看起来更广泛,但是原理相似。 我们正在使用 BDB JE 作为本质上是变更集服务的后备存储。 在更新 ActiveRecord 模型时,Rails 应用程序将更改为变更集服务的信标。 变更集服务为变更建立索引。 另一个服务遍历更改集索引并生成 Lucene 索引。 模型之间存在一些额外的依赖关系,因此,当依赖模型更新时,依赖于该模型的模型将“失效”,因此将其重新索引。
我真的很想了解更多信息,并且对开放源代码有所了解。 我们所提供的大部分服务满足了我们的需求,但是绝对可以改善。
席德
好的帖子,并感谢分享。 我们正在寻求重新发明轮子,以创建与您上面描述的非常相似的东西。 您是否知道何时可以尝试使用这些位? 我们将非常有兴趣了解更多有关该产品的信息,并看一看开放源代码并在适用的情况下做出贡献。
我试图找到有关中继如何将已提交的更改从数据库中拉出的详细信息。
是否有任何视频或文档对此进行了详细说明?
据我了解,今天它已在 Oracle 上使用。 该技术是否取决于特定的 Oracle 功能,或者可以在“通用” RDBMS 上实现?
Databus Relay 可以从 MS SQL Server(源数据库)中提取事务。
- 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 内容平台的经验教训