# 扩展 Digg 和其他 Web 应用程序
> 原文: [http://highscalability.com/blog/2009/2/14/scaling-digg-and-other-web-applications.html](http://highscalability.com/blog/2009/2/14/scaling-digg-and-other-web-applications.html)
Digg 的首席架构师 Joe Stump 在 Web 2.0 Expo 上向[进行了此演示](http://www.krisjordan.com/2008/09/18/joe-stump-scaling-digg-and-other-web-applications/)。 我找不到实际的演示文稿,但是[克里斯·乔丹](http://www.krisjordan.com/2008/09/18/joe-stump-scaling-digg-and-other-web-applications/)记下了一些很棒的笔记。 这样一来,历史上的关键时刻便会永远被意外捕获。 乔也很友好,可以通过电话回答我的电子邮件问题。
在本篇文章的第一部分中,乔分享了一些您可能没有读过的永恒的智慧。 我当然会花些力气从原始演示文稿中提取所有智慧,而倾向于简单的规则。 然而,真正令我震惊的是 Joe 认为 MemcacheDB *将成为扩展*领域中最大的新手。 MemcacheDB 已经存在了一段时间,但我从未想到过这种方式。 好吧,在帖子结尾处,为什么乔对 MemcacheDB 感到如此兴奋。
## 令人印象深刻的统计
* 世界第 80 至 100 大网站* 每月 2600 万唯一* 3000 万用户。* 唯一身份流量只有该流量的一半。 流量=唯一的网络访问者+ API + Digg 按钮。* 每月 20 亿个请求* 13,000 请求/秒,高峰时为 27,000 请求/秒。* 3 位系统管理员,2 位 DBA,1 位网络管理员,15 位编码员,质量检查小组* Lots of servers.
## 扩展策略
* 缩放是专业化。 当现成的解决方案不再能在一定规模上运行时,您必须创建满足特定需求的系统。* Web 2.0 的教训:人们喜欢胡扯并与世界分享。* Web 2.0 具有可伸缩性。 Web 1.0 平坦,包含大量静态文件。 通过添加更多硬件来处理额外的负载。 Web 2.0 是高度交互的。 内容可以以极低的速率创建。* 语言无法扩展。 100%的时间瓶颈在
IO 中。 当您同时处理大量请求时,瓶颈就不是语言。 使 PHP 速度提高 300%无关紧要。 当
固定数据库时,不要通过使用单引号而不是双引号来优化 PHP。* 不分享状态。 去中心化。 需要分区才能并行处理大量请求。* 向外扩展而不是向上扩展。 期待失败。 只需添加框即可缩放并避免失败。* 需要对数据库驱动的站点进行分区,以在水平和垂直方向上进行扩展。 水平分区意味着将行的子集存储在不同的机器上。 当一台机器上无法容纳的数据量更多时,将使用此功能。 垂直分区意味着将一些列放在一个表中,而将某些列放在另一个表中。 这使您无需停机即可将数据添加到系统。* 数据分为单独的群集:用户操作,用户,注释,项目等。* 构建数据访问层,以便将分区隐藏在 API 的后面。* 带有分区的 [CAP 定理](http://camelcase.blogspot.com/2007/08/cap-theorem.html):您只能选择以下三个中的两个:强一致性,高可用性,分区容限。* 分区解决方案需要非规范化,这已成为 Digg 的大问题。 非规范化意味着数据被复制到多个对象中,并且必须保持同步。* MySQL 复制用于扩展读取。* 使用异步排队体系结构进行近期处理。
-这种方法将处理块推向另一个服务,让我们将该服务调度在处理器网格上进行处理。
-与 cron 相比,它更快,响应速度更快,但与实时响应相比,响应速度却稍慢。
-例如,发出 5 个同步数据库请求会使您减速。 并行执行。
-Digg 使用 Gearman。 一个示例用法是获取永久链接。 并行完成三个操作:获取当前记录,获取固定链接并获取注释。 然后将这三个全部合并,以将合并的单个答案返回给客户端。 它也用于网站爬网和日志记录。 这是另一种思维方式。
-请参阅 [Flickr-先做必要的工作,然后将其余部分排队](http://highscalability.com/strategy-flickr-do-essential-work-front-and-queue-rest)和 [Canonical Cloud Architecture](http://highscalability.com/canonical-cloud-architecture) 了解更多信息。* 瓶颈在 IO 中,因此您已经调整了数据库。 当数据库大于 RAM 时,磁盘会一直处于命中状态,这会降低性能。 随着数据库的变大,无法再扫描该表。 因此,您必须:
-反规范化
-避免加入
-避免通过对
进行分区来跨数据库进行大型扫描-缓存
-添加读取从属设备
-不要使用 NFS* 在尝试解决问题之前,请先编号,以确保事情确实可以进行。* 图标和照片之类的文件是使用分布式文件系统 [MogileFS](http://www.danga.com/mogilefs/) 处理的。 DFS 支持高请求率,因为文件是在网络中分布和复制的。* 缓存永久并且明确过期。* 在基于文件的缓存中缓存相当静态的内容。* 将可变项目缓存在 memcached 中* 在 [APC](http://us2.php.net/apc) 中缓存很少更改的项目。 APC 是本地缓存。 它不是分布式的,因此没有其他程序可以访问这些值。* 对于缓存,请使用[责任链模式](http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern)。 在 MySQL,memcached APC 和 PHP 全局变量中进行缓存。 首先将 PHP 全局变量检查为最快的缓存。 如果不存在,请检查 APC,memcached 并上链。* Digg 的推荐引擎是一个最终保持一致的自定义图形数据库。 最终一致意味着写入一个分区最终将写入所有其他分区。 一次写读后,不必再返回相同的值,因为它们可以由不同的分区处理。 这比严格的一致性要宽松得多,这意味着更改必须在所有分区上同时可见。 接连进行的读取将始终返回相同的值。* 假设每天有 100 万人使用任何新功能,因此从一开始就使其具有可扩展性。 示例:Digg 上的“关于”页面对主数据库进行了实时查询,以显示所有员工。 只是做了一个快速的黑客出去。 然后,一只蜘蛛发疯了,并把该地点倒了。
## 杂种
* Digg 按钮是产生点击量的主要关键。* 使用 Debian Linux,Apache,PHP,MySQL。* 选择您喜欢开发的语言,选择编码标准,添加可提取的内联文档,使用代码存储库和错误跟踪器。 喜欢 PHP,Track 和 SVN。* 你和你的人民一样好。 必须相信你旁边的人他在做他的工作。 为了建立信任,人们可以做出
决策。 相信人们会处理它,他们会照顾好它的。 减少会议时间,因为您知道人们会做正确的事。* 完全是 Mac 商店。* 几乎所有的开发人员都是本地的。 有些人不愿提供 24 小时支持。* 乔的做法务实。 他没有语言迷恋。 人们从 PHP 到 Python / Ruby,再到 Erlang。 使用 vim。 从命令行开发。 不知道人们如何一直在不断更改工具集。 这不是很有效。* 服务(SOA)分离是一个巨大的胜利。 Digg 使用 REST。 内部服务返回映射到 JSON,XML 等的原始结构。URL 中的版本是因为它不花钱,例如:
/1.0/service/id/xml。 版本内部和外部服务。* 人们不了解网站中有多少活动部件。 某些事情将会发生,并且将会失败。
## MemcacheDB:代码的进化步骤,性能的革命步骤
想象一下 Digg 的创始人 Kevin Rose,他在本次演讲时拥有 40,000 个关注者。 如果 Kevin 每天只进行一次挖掘,则可写 40,000。 由于最活跃的挖掘者是最紧随其后的,因此它成为巨大的性能瓶颈。 出现两个问题。
您无法一次更新 40,000 个关注者帐户。 幸运的是,我们前面讨论的排队系统已解决了这一问题。
第二个问题是发生大量写入。 Digg 有写问题。 如果普通用户有 100 个关注者,则一天的收入为 3 亿迪格斯。 那就是每秒 3,000 次写入,每天 7GB 的存储以及 5TB 的数据分布在 50 到 60 台服务器上。
如此繁重的写入负载使 MySQL 无法用于 Digg。 这就是 MemcacheDB 的用武之地。在笔记本电脑上的初始测试中,MemcacheDB 每秒能够处理 15,000 次写入。 MemcacheDB 自己的[基准测试](http://memcachedb.org/benchmark.html)显示其每秒 23,000 次写入和 64,000 次读取/每秒的能力。 以这些写入速度,不难理解为什么乔对 MemcacheDB 的 digg 泛滥能力感到如此兴奋。
什么是 [MemcacheDB](http://memcachedb.org/) ? 这是专为持久性而设计的*分布式键值存储系统。 它不是缓存解决方案,而是持久存储引擎,用于基于键值的快速,可靠的对象存储和检索。 它符合内存缓存协议(未完成,请参见下文),因此任何内存缓存客户端都可以与其建立连接。 MemcacheDB 使用 Berkeley DB 作为存储后端,因此支持许多功能,包括事务和复制*。
在您太兴奋之前,请记住这是一个键值存储。 您可以通过一个键来读取和写入记录。 没有多个索引,也没有 SQL。 这就是为什么它可以这么快的原因。
Digg 使用 MemcacheDB 扩展了数据非规格化时发生的大量写入。 请记住,这是一个键值存储。 该值通常是一个完整的应用程序级对象,该对象可以从大量标准化表合并在一起。 归一化引入了冗余,因为您将数据副本保留在多个记录中,而不是在一个很好的标准化表中保留一个副本。 因此,非规范化意味着更多的写入操作,因为必须将数据复制到包含副本的所有记录中。 为了跟上他们的发展,他们需要一个能够处理其写负载的数据库。 MemcacheDB 具有这种性能,尤其是当您将 memcached 的常规分区方案放在最顶层时。
我问 Joe 为什么不选择一种内存数据网格解决方案? 一些原因是:* 此数据是从许多不同的数据库生成的,并且需要很长时间才能生成。 因此,他们希望将其存储在持久性存储中。* MemcacheDB 使用内存缓存协议。 Digg 已经使用 memcache,因此开始使用 MemcacheDB 无疑是很容易的。 它易于使用且易于设置。* 由于它不是新的设置,因此操作人员很乐意将其部署到数据中心。* 他们已经具有内存缓存的高可用性和故障转移代码,因此已经可以使用。* 使用新系统将需要更多的准备时间。* 如果代码有任何问题,您可以看一下。 全部都是开源的。* 不确定其他产品是否足够稳定。
因此,这是代码的进化步骤,也是性能的革命步骤。 Digg 正在考虑全面使用 MemcacheDB。
## 相关文章
* [扩展 Digg 和其他 Web 应用程序](http://www.krisjordan.com/2008/09/18/joe-stump-scaling-digg-and-other-web-applications/),作者:Kris Jordan。* [MemcacheDB](http://memcachedb.org/)* [Joe Stump 的博客](http://www.joestump.net/)* [具有与 Memcached 有关的高扩展性标签](http://highscalability.com/tags/memcached)* [高速缓存相关标签](http://highscalability.com/tags/caching)* [BigTable](http://highscalability.com/tags/bigtable)* [SimpleDB](http://highscalability.com/tags/simpledb)* [Anti-RDBMS:分布式键值存储列表](http://highscalability.com/anti-rdbms-list-distributed-key-value-stores)* [数据库设计的非传统方法:碎片](http://highscalability.com/unorthodox-approach-database-design-coming-shard)的来临* [Flickr 架构](http://highscalability.com/flickr-architecture)* [第 4 集:DIGG 首席架构师 Joe Stump 扩展大型网站](http://deepfriedbytes.com/podcast/deep-fried-bytes-episode-4-scaling-large-web-sites-with-joe-stump-lead-architect-at-digg/)
除非他们想在 RAM 上花很多钱,否则他们会感到意外。 当 RAM 与数据库大小之比降低到 0.8 左右时,Memcachedb / Berkeley 数据库(或基于 B-Tree 的 MySQL,PostgreSQL 或其他传统数据库存储)的性能将大打折扣。
当前,写解决方案是 Hypertable,即使 RAM 与 DB 的大小比小于 0.1,它也可以每个客户端维持 10k 次写/秒。
“搜索”背后的架构是什么。 我假设正在使用某种全文数据库。 有人可以指出在 IIS / ASP.Net 环境中扩展全文本搜索的最佳方法。 我知道 SQL Server 2005 不够好。
我正在寻找使用基于非 SQL 的后端的东西,例如 berkley db。
任何指针将不胜感激?
Web 2.0 Expo 笔记的重新组合。 乔的演讲很棒! 首先请注意,指向我的笔记的链接似乎在 href 中包含一个
,该链接中断了该链接。 最好! 克里斯
哇,对我来说好像他们是在爆发大家伙!
RT
www.anon-tools.us.tc
您应该看一下 SOLR(基于 Lucene 的搜索服务器)。 在 Tomcat 和 Jetty 上运行良好...都在 Windows 上运行。 [http://lucene.apache.org/solr/](http://lucene.apache.org/solr/)
搜索/数据的 XML 存储是 ASP.net 应用程序的最佳选择,将 LINQ 与.net 3.5 配合使用,XML 比 SQL 快得多。 而且您不必担心整天都会向 ms-sql-s 端口发送垃圾邮件。
[http://www.keyoti.com/products/search/dotNetWeb/index.html](http://www.keyoti.com/products/search/dotNetWeb/index.html)
这些家伙有一个非常不错的搜索引擎,但是它只能通过爬网来搜索,但是您始终可以调整其源代码,对于应该支持的简单网站,也可以通过 Web 控件运行
乔录制了一个非常不错的播客,前段时间他在谈论这个话题。 你可以在找到它
[http://deepfriedbytes.com/podcast/deep-fried-bytes-episode-4-scaling-large-web-sites-with-joe-stump-lead-architect-at-digg/“](<a rel=) > [http://deepfriedbytes.com/podcast/deep-fried-bytes-episode-4-scaling-large-web-sites-with-joe-stump-lead-architect-at-digg/](http://deepfriedbytes.com/podcast/deep-fried-bytes-episode-4-scaling-large-web-sites-with-joe-stump-lead-architect-at-digg/)
凉。 谢谢。 有趣的是,这并没有出现在我的搜索中。
“ Digg 使用 MemcacheDB 来扩展数据非规范化时发生的大量写入。”
这是个绝妙的主意:**请勿非正规化!**
[http://kottke.org/04/10/normalized-data](http://kottke.org/04/10/normalized-data)
很棒的文章,我非常喜欢 memcache,并已在我的 [http://www.kiran.org.in'](<a rel="nofollow" href="http://www.kiran.org.in) >网站中实现了它
Todd
再次感谢您提供出色的摘要。
在仔细阅读了所有细节之后,我觉得 Digg 必须在其基础架构上投入大量资金才能达到这种级别的可伸缩性。
通过查看在 memcacheDB 上*不使用数据网格*的合理性,我得到的印象是,在评估此选项时没有太多的思想投入,因为有些评论对我来说没有意义。 例如,更改应用程序以将 mecacheDB 用作 MySQL 的应用程序需要进行重大更改。 使用数据网格,由于数据库可以保持不变,因此更改可能会更低。 现在,我无法与成功争论,但是,如果今天我需要扩展我的应用程序,那么在那条路线上走时将非常谨慎,尤其是在当前市场经济条件下。
今天,有更多现成的解决方案可以完成本研究中提到的大多数事情。 这包括将应用程序分解为分布式服务,扩展数据层,与负载均衡器集成以实现动态扩展的能力(请参阅有关此方面的最新文章 [http://highscalability.com/handle-1-billion [使用记忆网格的事件日数]](<a rel=) >使用内存网格(1009)每天处理 10 亿个事件。有趣的是,在过去几周中,我们参与了几个项目,这些项目展示了如何 您可以推动超过 10 万次写入/秒。我们使用 data-grid 作为前端,并保持对数据库的异步更新。我们使用 MySQL 作为基础数据库,从维护的角度来看,带来了使用标准 SQL 数据库的优势。 云计算还可以提供非常经济高效的环境来实现这种级别的扩展,而不会带来太多麻烦。
我不确定在 Digg 构建其解决方案时所有可用的替代方案是否可用,因此 Joe Stump 提出此架构是否合理。
知道乔今天是否会选择该路线会很有趣。
请参阅 [http://natishalom.typepad.com/nati_shaloms_blog/2008/11/the-impact-of-cloud-computing-on-buy-vs-build-behaviour.html“](<a rel=) >影响 基于 Fred 布鲁克斯出色的文章“ No Silver Bullets”撰写的云计算在构建与购买行为之间的关系正如 Fred 所指出的那样,在许多情况下,我们倾向于认为我们有专门的要求,并且最终在基础设施建设和投资方面进行投资 经济压力迫使人们重新评估这些假设。
男孩,
对不起,你错了。 您正在展示您的经验。 处理大数据时,必须进行规范化以最大程度地减少数据集上的锁定。 您还可以通过减少联接来提高性能。 请记住,读取量远大于写入量。
我不确定这是否相关。 假设您是 Digg,并且拥有 1 TB 的数据(可能更多,但是请在此处与我联系)。 您可以将其分布在 40 个服务器上,每个服务器具有 24 GB 的 RAM 和 24 GB 的存储。
根据我刚刚检查的 HP 网站,将 DL 360 从 1GB RAM 升级到 24GB 的费用为 998 美元。 为了简单起见,我们将其舍入到$ 1,000。 (服务器总成本不到 7,000 美元,包括 120GB RAID 1 SAS 存储)
您最终得到的是$ 40,000 的 RAM,总计 1 TB,分布在 40 台服务器上。 对于在服务器上花费 280,000 美元的公司来说,这不是一个坏交易。 这相当于 RAM 的服务器成本的 14%。
因此,敬请注意,低于 1.0 只是由于规划不当或数据集过大。 (请注意,我足够聪明地意识到 1TB 可能对于 Facebook 或 Flickr 这样的公司来说是一个舍入误差,但是他们的预算也相应地更大。)
我看到去年的播客,一个非常有趣的家伙,知道他的东西。
- [http://www.onlinebingoclub.co.uk/foxy-bingo/“](<a rel=) >狡猾
嗨,
我们正在处理一个项目,该项目实现了 MemcacheDB 作为持久性缓存的解决方案。 不幸的是,该产品似乎并不是所有的东西都那么光明:
1\. Get 时间平均变化为 50ms,标准差为 150ms(键和数据的大小小于 100bytes)
2.您 不知道 MemcacheDB 中存储了多少数据,那里“丢失”了哪些数据,并且如果您没有密钥(也不能,不支持枚举),就无法删除信息。
3.似乎 前两个事实是相关的(您不能删除废弃的项目,因此性能很差)。
4.根据产品的网站,该产品似乎已被废弃,并且在目前的状态下还远远不能管理。
最好的问候,
Moshe Kaplan。 Performacne 专家。
感谢另一篇出色的文章,从网络上一些最繁忙的站点中看到真实的示例,这为我们提供了有关准备工作的真正有价值的信息。
我在< http://www.mrkirkland.com/prepare-for-web-application-scalability/ >的最新文章中引用了 highscalability.com。
谢谢!
柯克兰先生
首席执行官 artweb.com
- 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 内容平台的经验教训