# StubHub 体系结构:全球最大的票务市场背后的惊人复杂性
> 原文: [http://highscalability.com/blog/2012/6/25/stubhub-architecture-the-surprising-complexity-behind-the-wo.html](http://highscalability.com/blog/2012/6/25/stubhub-architecture-the-surprising-complexity-behind-the-wo.html)
![](https://img.kancloud.cn/f3/36/f3365a77bb8d509a4edc06df95504bd9_240x108.png)
StubHub 是一个有趣的架构,因为作为门票的做市商,他们所从事的业务与我们通常考虑的业务不同。
StubHub 规模惊人,每年以 20%的速度增长,每小时可处理 80 万个复杂页面,每年可售出 500 万张门票,每小时可处理 200 万次 API 调用。
票务空间异常复杂。 StubHub 的流量非常棘手。 突发性,围绕不可预测的游戏结果,事件,时间表和季节。 涉及很多钱。 有很多不同的参与者。 涉及许多复杂的业务流程。 StubHub 在业务上有几个互补但又截然不同的部分:它们有一个广告服务器组件,可为 ESPN 等网站提供广告,丰富的交互式 UI 和实时门票市场组件。
对我而言,最有趣的是 StubHub 如何将票务,销售点系统,FedEx 交付,买卖双方以及金钱等曾经一度是高接触的实体世界带入数字领域。 他们通过与组织(例如美国职业棒球大联盟)的深度电子集成以及将复杂业务流程移出应用程序空间的生命周期总线来实现这一目标。
这是一个很有趣的问题,因为在处理业务构建功能成为首要任务时必须继续处理构建的旧系统,这使问题变得更加复杂。 让我们看看 StubHub 如何使其全部工作...
## 资源
* 查理·芬曼(Charlie Fineman)在 QCon 上的演讲: [StubHub:为全球最大的票务市场](http://www.infoq.com/presentations/StubHub-Designing-for-Scale-and-Innovation-for-the-World-s-Largest-Ticket-Marketplace)设计规模和创新
## 商业模式
* **StubHub 是用于门票** 的 eBay。 为门票买卖双方提供一个市场。 他们不像 Ticketmaster 。
* **托管模型用于为卖家** 提供信任和安全。 信用卡记录在 StubHub 上,当确认订单已收到时,才转移款项。
* **门票不是商品** 。 买家想要特定的门票,而不是看台座位。 数量有限,没有滞票。 卖方不断更新价格和数量以响应市场力量。 这是一个非常活跃的市场。
## 统计信息
* 每年 500 万订单
* 200 万个活动列表/门票。
* 门票围绕 45,000 个赛事进行。 美国职业棒球大联盟的职缺赛季和超级碗是最活跃的时期。
* 销售额每年以 20%的速度增长。
* 每小时可处理 600k-800k 复杂页面。 在后期赛季每小时爆破一百万。
* 在美国 10 到 12 个核心醒着时间的狭窄时段中,流量突发。 例如,季后赛结束后,会有买家为下一场比赛疯狂。
* 每小时有 200 万来自会员的 API 调用。
* 24-36 工程师。
* 这是一项高触感的业务。 交易的支持电话过去是 1-1,但现在好多了。 员工最大的部分是客户服务和后台业务运营支持。
## 平台
* Java
* 冷融合(旧版)
* ActiveMQ
* [SEDA](http://www.eecs.harvard.edu/~mdw/proj/seda/) (分段事件驱动的体系结构)
* Lucene / Solr
* Jboss
* 内存缓存
* Infiniband -到 SAN 的快速网络
* XSL
* Oracle 的高级队列
* TeamWorks -IBM 工作流构建器
* Splunk
* Apache HttpClient
* Log4j(使用消息格式)
* 挂毯
## 架构
* 门票的三种购买来源:Web,销售点系统,批量上传。 批量上传允许将票证单上传到系统中。
* Manager 层在 Ticket 数据库上方提供了业务对象抽象。 它调解了所有与票证表的对话。
* 票务表会因买卖双方的活动以及事件周围的自然流量突发性而受到影响。
* 活跃的市场可能导致移动客户端与系统的当前状态过时,因此买家对旧数据做出反应。
* 两个数据泵将来自 Tickets 数据库的数据馈送到内部和外部系统:我的帐户,查找和公共馈送。 我的帐户是用户帐户的界面。 查找是一种搜索功能。 Public Feeds 为 ESPN 和 eBay 等网站提供支持。
* 内部供稿-包含用于仪表板,卖家是谁,销售情况,销售速度,热图等敏感信息,例如帐户信息。它还根据敏感的市场数据供稿主页的某些部分, 例如热门话题,他们不想与公众分享。
* 外部供稿(LCS)-广告商,例如 ESPN ,都通过此供稿供稿。 广告是通过 IP 地址映射的地理位置。
* LCS (上市目录服务):
* 我在这里道歉,幻灯片有些偏离,并且很难使演讲者与演示文稿匹配。 所有错误都是我的。
* 触发器用于使修改表保持最新状态,以进行数据库中发生的更改。
* 更改数据捕获作业不断轮询更改,并将消息注入到 ActiveMQ 代理中。 这是路由的第一级,包含 sma ll 有效负载:对象 ID,对象类型和更改日期。
* 更改数据被路由到主服务器,这是在数据中心之间进行复制的基本机制。 辅助数据中心订阅了这些主题,这就是在数据中心之间复制数据的方式。
* 进入主数据后,数据将被注入 SEDA 队列中进行处理(稍后会有更多介绍)。
* 未使用管理器是因为存在许多不使用管理器而直接进入数据库的旧系统,因此数据库是分发增量的常见点。
* 他们的大多数广告是 Flash,但有些广告使用 HTML 呈现。
* LCS 提供了购物体验,例如从体育场的交互式图形中选择门票。 Solr 使添加这样的新功能非常容易。
* SEDA (分段事件驱动的体系结构)在主服务器中使用
* 主服务器接收 sma ll 更新并弄清楚如何 构建进入内存缓存的内容,以便最终将路由到 Solr 。
* 使用协议缓存格式将消息缓存在 memcached 中。
* 消息发送到第二个代理,该代理将消息分散到边缘,即 Lucene / Solr。
* 消息使用者从代理接收消息。
* 从数据库加载实体。
* 确定更新是否有任何级联影响。 因为 Solr 和其他 NoSQL 数据库不进行联接,所以例如,如果更改了乐队名称,则该更改必须传播到 ll 事件。
* 序列化实体。 将其存储在内存缓存中。
* 将消息发送到第二个 ActiveMQ 代理,该代理将消息路由到边缘,即 Solr。
* 通过单独的路由处理代理侦听代理。 这曾经在 Jboss 中,但是 Jboss 会不知所措,他们遇到了饥饿问题,因此将其移出 Jboss。 该侦听器成为系统中用于操作管理的有用阀门。 如果他们需要换出新的 Solr 索引以放入新架构,则可以关闭阀门,让消息在消息代理中备份,然后再次打开阀门,消息将再次开始流动。 从 Solr 故障中恢复,复制索引和更新模式时,这些阀门对其操作稳定性产生了巨大影响。
* A ll 这些都是阻塞操作,因此使用线程池可以防止数据库连接风暴。
* SEDA 是一种平滑负载的技术。 从资源管理的角度来看,这对他们是有效的。 想法是将工作分解成足够小的部分,以至于缓慢的工作不会窃取其他用户的线程。 工作是分阶段建模的,每个阶段都有自己的线程池,可作为工作节流阀。
* Solr
* Solr 提供了一个不错的文档存储和自然语言文本查询功能。
* 所有搜索都基于 Solr,包括构面。
* 快速。 查询以 10 毫秒或更短的时间返回。 他们在 SAN 上使用了 Infiniband 网络,发现他们不需要在内存中缓存数据,他们可以通过快速的网络以足够快的速度为 SAN 提供数据服务。
* 潜力。 灵活的查询语言,可以使用 ll 文本搜索以及 geo -特殊搜索。
* 支持许多输出格式:XML,Atom, RSS ,CSV, Json 。 使与各种客户端的集成变得更加容易。
* 高频写入不是很好。 在高频写入下复制似乎集成得不好。 看到成千上万的更改时执行 rsync 不起作用。 您会获得真正过时的数据。 因此,他们必须建立自己的复制机制。
* 平面数据结构。 仍然几乎是面向行的。 他们希望支持结构更复杂的文档。
* DCL -双击介绍浏览
* URL 映射到 ID :类型 ID,地理位置 ID,渲染类型 ID。
* DCL (仅是 XSL )使用类型 ID 和 Geo ID 为 LCS 创建查询。 然后可以一般性地呈现返回的数据。 因此 ll footba ll 小组可以使用 URL 映射 XSL 和 LCS 为他们生成具有完全相同结构的相似页面 ]。
* 巨大的生产率提高,使添加新功能变得更加容易。 页面中的每个块都是通过 CMS 管理的单个资产。 它们是 XSL 的大块,针对从 LCS 中检索到的上下文文档进行渲染。
* A RenderChunkByName ca ll 使在 Facebook 等其他服务上呈现事件变得容易。
* 在后端进行所有这些操作以实现 SEO 目的。 当搜索引擎可以为 Ajax 编制索引时,他们可能不需要这样做。
* gifs ,样式表等的边缘缓存,但是数据缓存在它们的服务器上。
* 减少每笔交易的客户互动次数:
* 客户互动是其营业收入的最大消耗。 当情况恶化时,需要与买卖双方共同努力以解决问题。
* 增加客户自助服务。 顾客想知道什么时候拿到钱和票。 MyAccount 屏幕允许客户在不使用客户服务的情况下检查订单进度。
* 向卖家公开 API ,以便他们可以将这些功能集成到他们的系统中。
* IVR -集成的语音识别系统支持客户打电话以查找其帐户状态。
* 现金流量对供应商很重要,因此他们致力于更快地付款。
* 与美国职棒大联盟(Major League Baseball)的电子集成,因此他们可以在卖方实际拥有票证之前直接从卖方将票证转让给买方。 即时交付并极大地提高了客户满意度并消除了故障点。
* 生命周期总线
* 用于防止硬链接应用程序中的复杂工作流。 签出应用程序不必担心 ll 下游存在的不同业务流程。 您只需要担心已验证的信用卡和订单,而不要担心配送和电子邮件之类的问题。
* 在处理遗留问题和管理站点更改时很有用。
* 有关于 ll 主要生命周期事件的主题。 代理在 Oracle 队列中侦听主题。 下订单时,它将进入未确认状态。 侦听器将收听“未经确认”的主题,并通过电子邮件向卖方发送电子邮件以访问该站点并确认订单。 当卖方确认订单后,那里的代理商将从买方的托管账户中提取款项,向买方发送电子邮件,说明卖方已确认并在何处找到机票。 确认票证后,付款便退给了卖方。
* 所有这些逻辑都与面向网站的最终用户分离。 这些都是后台引擎。
* TeamWorks 为这些流程建模,发现弱点,监视流程,检查 SLA 并触发操作。 帮助更好地优化后台业务流程。 由于他们每年以 20%的速度增长,因此他们不希望运营团队的年增长率达到 20%。
* FedEx 是最初的履行方式。 电子实现已添加。 业务流程如下:未确认->自动确认; 已确认->条码重发和付款 PDF; 实现。 您要做的就是编写在相同订单生命周期内生存的代理,以实现新的实现模式。 该逻辑不在应用程序中。 它在代理中,是一个可单独部署和测试的单元。
* 避免欺诈。 使用相同的生命周期模型来实现,但增加了两个新状态:已购买和已批准。 他们无需进行任何更改即可添加避免欺诈的功能。 他们只需要更改状态机即可。 代理决定将其移至批准状态或未批准状态。
* 销售点系统集成
* 使用两个阶段的提交:在外部系统上预订票证,将其标记为 StubHub 中声明的内容,在外部系统上提交购买。
* 希望对此进行概括,以便其他系统可以在交易中购买门票。 将门票与旅行或酒店购买捆绑在一起。
* Splunk 和染料
* 在 StubHub 上最大的投资回报率项目之一。 节省了很多调试时间。
* 染色-工件被放置在每个请求的 HTTP 标头中。
* 这些使用 Log4j 记录。
* 使用 Splunk ,如果订单有问题,您可以使用染料标记查看日志行以向后推 ll ,然后查看 ll 属于请求的呼叫,包括对 LCS 之类的其他服务的二次呼叫。 追溯活动很容易。
* 确实类似于 Splunk 。 就像日志行的文档存储。 将染料标记和 ID 排序到日志行,就像一系列键值对一样, Splunk 使得查看日志变得非常容易。 他们的仪表板是使用 Splunk 编写的,用于统计信息,例如每分钟的事务,每分钟的失败。 您可以根据需要对数据进行切片和切块。
* 将 Log4j 与消息格式一起使用,以便它不会创建动态字符串。
## 得到教训
* **可扩展性是专业化** 。 每个问题空间都有其独特的特征,必须构建任何系统来解决该特定问题。 StubHub 受制于对安全购买体验的需求,票务市场的独特性质,突发流量以及事件多变的局面。 他们的系统必须反映这些要求。
* **从一开始就使用抽象层** 。 否则,您将无法继续为旧客户提供支持,而超出了您的承受能力。
* **生产中的烘烤** 。 实施多种解决方案,并在生产中进行审核,以确定哪个版本更好。 StubHub 在生产中测试了两个不同的数据泵版本,以发现哪种版本更合适。 您不想支持多种基础架构。
* **将工作移出 Jboss** 。 大量请求可能会导致 Jboss 饿死,因此他们将工作移到 Jboss 之外。
* **通过因果链** 渗滤染料。 检测请求,以便可以在整个堆栈中跟踪请求。 这是一个巨大的投资回报,能够调试整个堆栈中的问题。
* **优化业务流程。** 系统之间的电子集成。 通过充当卖方,买方和 MLB 之间的协调者,他们能够提高客户满意度并消除交易中的大量可能失败点。 购买了受欢迎的销售点程序,以便他们可以与它集成。
* **建立在您自己的 API** 上。 他们花费大量时间尝试在自己的 API 上构建自己的应用程序,以便他们可以更好地管理其用户和合作伙伴的体验。
* **一般定义资产** 。 定义资产以便可以在任何上下文中呈现它们,可以轻松组成不同格式的页面并在其他网站上呈现事件。
* **从 ROI 透视图** 最大化开发。 寻找可提高开发人员 ROI 的项目。 使用 Solr 对他们来说是一个巨大的胜利。 它易于使用,快速且非常实用,可以立即满足许多类型的查询。
* **SEDA 适合阻止读取** 。 他们的许多系统都基于阻止读取,因此 SEDA 非常适合该用例。 线程池可防止淹没他们要使用的资源。
* **在客户端** 上呈现。 对于像体育场馆地图这样非常酷的交互式地图,在客户端上通过 ll 处理 ll 的 UI 交互可节省大量服务器负载。 即使对于具有 10-20K 列表的大型活动,下载整个列表也是一个更好的解决方案。
* **比重框架**更薄。 沉重的框架易于使用和滥用。 隐藏的复杂性使您很快失去对站点的控制。 示例:Hibernate 和基于组件的框架。 验证和业务逻辑可能会泄漏到表示层中。 做出明智的决定。 了解遗留问题方面的问题。
* **糟糕的经历是最好的训练** 。 就像没有教给如何正确做事一样。 刚开始 StubHub 的家伙正在通过尽快发布功能来建立业务,但这留下了一笔遗产。 管理遗留物的关键是管理依赖关系。 使用基于代理的 Lifecycle Bus 样式解决方案可帮助他们了解对遗留系统的依赖性。
* **使用工作流将状态机与应用程序分离。** 不要在应用程序逻辑中嵌入复杂的流。 外部化逻辑,以便业务流程可以更灵活的方式耦合在一起。 这使系统在未来变得无限灵活和适应性强。
* **避免使用 ETL** 。 它引入了许多您不想处理的依赖项。 有风险。 当您尝试确定财务上依赖的变更对您而言是否很大时,旧式数据模型可以真正占用资源。
* **不要缩短 CM 和部署**。 当前,对于开发人员来说,这是最大的浪费时间。 非常痛苦 现在投资您的 CM 和部署系统。
* **投资持续改进** 。 它不是免费提供的。 在项目上运行验尸。 确保问题不再出现。 随着公司的发展,这些东西无法扩展。 立即做出正确的决定,否则将来 ll 需要花费 3 到 5 倍来解决。
* **在系统** 中建立操作阀。 例如,如果您需要换出新的架构,请使用一个阀门,您可以在其中关闭事件并重新启动它们。
该 Java Framework Tapestry 在哪里使用?
您是在我们网站上还是其他地方?
“当您试图找出变更是否会带来巨大收益时,它们将成为您财务上依赖的系统。”
句子里有错字,对不对? 难道不是“当您试图确定变更是否会创建您在财务上依赖的系统时”吗? 谢谢。
爱德华
我认为这个家伙在获得我的要点方面做得很好,但是在这种情况下...是的...这很想念...我认为不是错字。 :-)在不返回原始录音版本的情况下,它应该类似于:
“当您试图确定更改是否会在您所依赖的系统中造成回归时”
我真的想了解更多有关如何在 HTTP 标头中使用 splunk 和 dye 来跟踪整个堆栈中的每个请求的信息,从调试的角度来看,这是非常有用的功能。
- 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 内容平台的经验教训