# MixRadio 体系结构-兼顾各种服务
> 原文: [http://highscalability.com/blog/2014/8/25/mixradio-architecture-playing-with-an-eclectic-mix-of-servic.html](http://highscalability.com/blog/2014/8/25/mixradio-architecture-playing-with-an-eclectic-mix-of-servic.html)
![](https://img.kancloud.cn/1b/a6/1ba628ec4be1f8a40017fb3d053f2cdd_200x200.png)
*这是 [MixRadio](https://twitter.com/sr_gb) 的首席架构师 Steve Robbins 的来宾[重新发布](http://dev.mixrad.io/blog/2014/08/22/MixRadio-Architecture-Overview/)。*
At MixRadio, we offer a free music streaming service that learns from listening habits to deliver people a personalised radio station, at the single touch of a button. MixRadio marries simplicity with an incredible level of personalization, for a mobile-first approach that will help everybody, not just the avid music fan, enjoy and discover new music. It's as easy as turning on the radio, but you're in control - just one touch of Play Me provides people with their own personal radio station.The service also offers hundreds of hand-crafted expert and celebrity mixes categorised by genre and mood for each region. You can also create your own artist mix and mixes can be saved for offline listening during times without signal such as underground travel, as well as reducing data use and costs.Our apps are currently available on Windows Phone, Windows 8, Nokia Asha phones and the web. We’ve spent years evolving a back-end that we’re incredibly proud of, despite being British! Here's an overview of our back-end architecture.
# 架构概述
我们有机会在 2009 年重新设计后端。今天,我们的后端核心是 RESTful 服务的集合,其模式称为['微服务'](http://martinfowler.com/articles/microservices.html)。 这些服务的大小,功能,开发语言和数据存储各不相同,但都具有共同的属性,例如公开定义良好的 RESTful API,可独立扩展的功能(包括监视功能),我们将在下面介绍更多功能。 围绕这些核心服务,我们有两个类似的代理服务,它们是通过配置驱动的,以公开用于不同目的的 RESTful 资源的子集。 “内部工具 API”代理内部 API 的工具,以涵盖客户服务,内容管理,发布组合,监控和许多其他情况。 在公开场合,我们通过“外部 API 身份验证层”服务公开了针对客户端应用和第三方开发人员的 RESTful API。 此服务还具有执行适当的权限和授权方案的工作,例如 [OAuth2](http://en.wikipedia.org/wiki/OAuth) 。
对于最终用户,我们的 API 服务的应用范围非常广泛。 我们提供 [HTML5 网站](http://www.mixrad.io/),适用于所有不同类型诺基亚手机的设备应用程序,Windows 8 应用程序,并且我们还向第三方开发人员提供了相同 API 的子集。 我不会在本文中详细介绍我们的应用架构,因为我们团队的内森(Nathan)先前曾写过[。](http://dev.mixrad.io/blog/2014/02/24/Bringing-MixRadio-to-the-new-Nokia-X-family/)
下图概述了系统的主要领域,其中驻留了五十多个微服务:
![](https://img.kancloud.cn/70/6c/706c3da85ce44c62a97a53559b0ac8e9_640x386.png)
# 使用的技术
我们采取务实的方法,即针对开源技术使用正确的工具来完成这项工作。 目前,我们正在积极使用:
## 语言能力
* [Clojure](http://clojure.org/) 用于我们的微服务。
* C#用于我们的设备应用程序和媒体交付服务。
* HTML5 / CSS / JavaScript 用于我们的网络体验。
## 存储
* [MySQL](http://www.mysql.com/)
* [Solr](http://lucene.apache.org/solr/)
* [MongoDB](http://www.mongodb.org/)
* [Redis](http://redis.io/)
* [Elasticsearch](http://www.elasticsearch.org/)
* [ZooKeeper](http://zookeeper.apache.org/)
* [SQLServer](http://www.microsoft.com/sqlserver)
## 基础设施
* [适用于 Linux 微服务的 AWS](https://aws.amazon.com/) 。
* [Azure](http://azure.microsoft.com/) 用于 Windows 和媒体存储上运行的媒体服务。
* [GitHub Enterprise](https://enterprise.github.com/) 用于源代码控制。
* [Packer](http://www.packer.io/) 用于创建机器映像。
* [人偶](http://puppetlabs.com/),用于调配和检查机器映像。
## 监控方式
* [Nagios](http://www.nagios.org/)
* [石墨](http://graphite.wikidot.com/)
* [Tasseo](https://github.com/obfuscurity/tasseo)
* [塞伦](https://github.com/scobal/seyren)
* [篝火](https://campfirenow.com/)
* [PagerDuty](http://www.pagerduty.com/)
* [主题演讲](http://www.keynote.com/)
* [Logstash](http://logstash.net/)
* [Kibana](http://www.elasticsearch.org/overview/kibana/)
# 建筑原理
为了使 API 与五十多种微服务保持一致,我们制定了有关 URI 结构,分页,排序,大小写,处理语言代码等方面的标准; 但是在开放的文化中,我们通常使用原则而不是硬性规则来获得一致性。 我们的服务应:
* 松散耦合,无状态,并通过 HTTP 提供 JSON 的 RESTful 接口。
* 单独部署并拥有自己的数据,即其他服务通过 API(而不是数据库连接)访问数据。 这允许单独的规模以及持久性技术和数据结构的更改。
* 当我们为每个服务使用一个机器实例时,它既不会太大以致于变得笨拙,又不会太小而使其浪费计算资源。
* 实施用于检查的 Healthcheck API,并负责确定健康状况。
* 永远不要破坏他们的消费者。 我们很早就同意一个标准,在资源路径中有一个版本号(例如`/1.x/products/12345/`),这样如果需要进行重大更改,则可以并行部署新版本并被上游消费者采用 。 即使我们仍然保留此功能,多年来也不需要使用它。
除了这些内部原则外,对于面向公众的 API,我们还添加了以下内容:
* API 已针对移动设备进行了优化:我们使用 JSON,因为与低功耗设备上的 XML 相比,它解析所需的内存要少于 XML,并尽可能使用 GZIP 编码响应,最重要的是-如果不需要数据,则不会返回。 最后一点是与 API 一致性的良好平衡。
* 尽可能使用缓存; API 返回适当的缓存头,以便将内容缓存在最终用户设备和浏览器以及[内容分发网络(CDN)](http://en.wikipedia.org/wiki/Content_delivery_network)上,从而首先使内容更接近我们的消费者。
* 云中会保留尽可能多的逻辑和数据真实性,以减少应用程序中逻辑的重复并提供一致的体验。
* 相同的 API 用于所有客户端-网络,移动,桌面和第三方子集。 但是,为了针对不同的屏幕尺寸和要求进行优化,我们使用了一些技巧。 一个明显的例子是“ itemsperpage” querystring 参数,用于调整返回的内容数量。 另一个适用于 RESTful API 设计,其中资源返回隔离的内容。 我们经常将内容分组为所谓的“视图”,以减少所需的请求数量。
使用视图 API 的一个示例是我们应用程序中的艺术家详细信息页面,该页面包含来自许多资源的数据-艺术家传记,图像,推文,演出,并混合了其中的专辑,热门专辑,热门歌曲和类似歌手。 通过将其组合成一个“视图”,应用程序可以一击即获得约 5KB 的数据。
# 快速微服务
在过去的几年中,我们已经在 [Clojure](http://clojure.org/) 而非 Java 中构建了微服务。 Clojure 是一种动态语言,仍然可以在 Java 虚拟机(JVM)上运行,并且还允许访问 Java 框架。 我们的后端团队出于开发速度和运行时的速度选择使用 Clojure。 Clojure 比 Java 简明得多-例如,这是我们在 Clojure 中重新开发的 Java 服务之一,其代码行数从 44,000 行增加到 4,000 行(包括所有配置,测试和其他工件)。 我们使用 [Leiningen](http://leiningen.org/) 来加快开发速度-Leiningen 提供的一个方面是自定义项目模板,我们有一个名为`cljskel`的模板为我们创建框架服务。 我们打算在以后的帖子中再次使用该模板,但是为了说明使用,我们能够运行以下命令,并具有带有监控 API 的功能性 RESTful 服务:
```
lein new cljskel <project name>
```
如果您对我们如何进入 Clojure 感兴趣,您可能想观看我们两位工程师去年在伦敦所做的演讲。
# 数据
我们处理的两个最大数据源是我们拥有的 32+百万首曲目的内容元数据(以及相关的艺术家,专辑,混音等)以及来自我们的应用程序的分析数据,例如播放事件,大拇指向上/向下 和导航事件。
Catalog 服务(请参见下图)为我们的消费者体验提供内容元数据和搜索功能。 “主目录”服务存储来自各种来源的原始数据,例如记录标签,我们的内部内容团队和互联网资源(例如 Wikipedia)。 配置驱动的数据模型指定了如何合并来源(例如,优先考虑从我们的内容团队得到更正的某些字段,而不是其他来源),哪些字段可搜索以及哪些字段返回给调用者。 我们可以返回不同的字段来满足不同的用例。 例如,我们不需要搜索结果中的专辑曲目列表,但在显示专辑详细信息时确实需要它们。 主目录服务不会直接为用户流量提供服务,而是“搜索和查询” API 是其余后端的接口。 搜索和查询服务基于 [Apache Solr](http://lucene.apache.org/solr/) 构建,“索引后台程序”服务对主目录进行爬网以获取发布到 Solr 搜索索引的更新。
[![](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/catalogue.png)](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/catalogue.png)
收集分析和使用数据对于驱动个性化体验,进行 A / B 测试,CRM,计算业务指标和合同报告至关重要。 随着数据全天不断地从各种应用程序进入后端,许多服务需要同时访问同一数据。 一个例子是用户在曲目上按下了“ thumbs down”按钮,这对于当前播放曲目的混合很重要*和*到用户的整体口味,重复的拇指 下降表示不喜欢艺术家。 为了能够处理我们期望的数据量,去年初我们决定需要一个发布-订阅模型,该模型将:
* 高可用性,无单点故障。
* 通过解耦和暂停传入消息的能力为整个系统提供可伸缩性。
* 与消息格式无关。
* 写延迟低(即“即发即弃”的语义)。
* 为订户提供快速吞吐量。
* 提供简单的发布和订阅 API。
* 支持多个用户使用相同的数据,每个用户可能具有不同的体系结构,并以不同的速度和时间表运行。 例子是实时处理与批处理聚合或归档。
我们从 LinkedIn 选择了 [Apache Kafka](http://kafka.apache.org/documentation.html#introduction) ,因为它非常适合我们的需求。 特别是它是一个持久的消息传递系统,旨在支持许多具有自己状态(例如读取数据的位置)的消费者,而不是假设订户永久存在并以相同速率消费数据。
# 监控方式
我们针对关键用例的<延迟时间为 0.8 秒,在为期 90 天的滚动期内达到 99.99%的可用性-相当于每月停机 4.3 分钟。 因此,当出现问题时,我们如何知道何时出现问题并迅速做出反应? 我们具有多层监视功能,可以提醒开发人员和操作工程师。
在最低级别上,我们使用 [Nagios](http://www.nagios.org/) 检查虚拟机的基本运行状况,并使用 [PagerDuty](http://www.pagerduty.com/) 来提醒运维工程师。 我们利用每个微服务实现的运行状况检查 API,让 AWS 负载均衡器确定盒子是否需要回收(您可以在此[上一篇文章](http://dev.mixrad.io/blog/2014/05/16/How-we-use-cluppet/)中阅读有关如何配置 AWS 负载均衡器的更多信息)。 [石墨](http://graphite.wikidot.com/)用于收集操作系统级别的指标,例如 CPU 使用率,磁盘空间等。但是,每个微服务也记录自定义指标,这对所涉及的工程师很有帮助。 我们收集的服务指标从低级项目(例如 HTTP 500 错误计数)到高级抽象(激活的订阅数),不计其数。 这是一个石墨仪表板示例:
[![](https://img.kancloud.cn/c2/4b/c24bd8532be258b4a84123c0fc497ed5_500x272.png) ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-graphite.png)
我们在 Graphite 顶部使用 [Tasseo](https://github.com/obfuscurity/tasseo) 提供漂亮的仪表板数据摘要视图,并使用 [Seyren](https://github.com/scobal/seyren) 根据阈值变化发出警报。 Seyren 由我们的一些工程师创立,并在一篇有关 [2012 年奥巴马连任竞选](http://arstechnica.com/information-technology/2012/11/how-team-obamas-tech-efficiency-left-romney-it-in-dust/)中使用的技术的文章中得到提及。
[![](https://img.kancloud.cn/ef/82/ef820c79fe8c1332bf5ac25ab7f0702d_639x356.png) ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-seyren.png)
在最高级别上,我们使用[主题演讲](http://www.keynote.com/)来监控全球的用例和响应时间:
[![](https://img.kancloud.cn/ca/ec/caecbe922ccfcf0657e6e82d3ee9486b_640x356.png) ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-keynote.png)
最后,对于详细的诊断,我们避免了必须通过日志传送连接到特定服务器。 我们使用 [Logstash](http://logstash.net/) 将系统,请求,错误和特定于应用程序的日志收集到中央位置,并与自定义仪表板一起使用 [Kibana](http://www.elasticsearch.org/overview/kibana/) 来跟踪特定的错误或查看趋势。 该示例是几年前我们试图减少应用程序错误噪声时的自定义仪表板:
[![](https://img.kancloud.cn/4c/fd/4cfdd12a3dcfa631d7b83f768e576cf2_640x316.png) ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-errors.png)
# 持续交付
连续交付是一种通过自动化部署和测试以可重复的方式快速发布软件的实践。 从大爆炸发布开始,我们花费了数年的时间来改进我们的流程; 迁移到部署管道,然后使用 AWS 中的 Netflix“红/黑”样式模型迁移到今天的状态。 我们工程团队的 Joe 在 6 月的[伦敦持续交付聚会](http://vimeo.com/100788786)上谈到了这一点。
通过查看过去五年中完成的部署次数,可以了解我们的进展情况:
![](https://img.kancloud.cn/58/6c/586c03cc5b46e5b396819b02363f8138_486x256.png)
## 相关文章
* [MixRadio 历史记录](http://dev.mixrad.io/blog/2014/08/05/MixRadio-History/)
- 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 内容平台的经验教训