# 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)

*這是 [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/)
下圖概述了系統的主要領域,其中駐留了五十多個微服務:

# 使用的技術
我們采取務實的方法,即針對開源技術使用正確的工具來完成這項工作。 目前,我們正在積極使用:
## 語言能力
* [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)
收集分析和使用數據對于驅動個性化體驗,進行 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 錯誤計數)到高級抽象(激活的訂閱數),不計其數。 這是一個石墨儀表板示例:
[ ](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/)中使用的技術的文章中得到提及。
[ ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-seyren.png)
在最高級別上,我們使用[主題演講](http://www.keynote.com/)來監控全球的用例和響應時間:
[ ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-keynote.png)
最后,對于詳細的診斷,我們避免了必須通過日志傳送連接到特定服務器。 我們使用 [Logstash](http://logstash.net/) 將系統,請求,錯誤和特定于應用程序的日志收集到中央位置,并與自定義儀表板一起使用 [Kibana](http://www.elasticsearch.org/overview/kibana/) 來跟蹤特定的錯誤或查看趨勢。 該示例是幾年前我們試圖減少應用程序錯誤噪聲時的自定義儀表板:
[ ](http://dev.mixrad.io/assets/blog/MixRadio-Architecture-Overview/monitoring-errors.png)
# 持續交付
連續交付是一種通過自動化部署和測試以可重復的方式快速發布軟件的實踐。 從大爆炸發布開始,我們花費了數年的時間來改進我們的流程; 遷移到部署管道,然后使用 AWS 中的 Netflix“紅/黑”樣式模型遷移到今天的狀態。 我們工程團隊的 Joe 在 6 月的[倫敦持續交付聚會](http://vimeo.com/100788786)上談到了這一點。
通過查看過去五年中完成的部署次數,可以了解我們的進展情況:

## 相關文章
* [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 內容平臺的經驗教訓