# 在 30 分鐘內進行 7 年的 YouTube 可擴展性課程
> 原文: [http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)

如果您開始建立約會網站,而最終建立了每天處理 40 億次觀看次數的視頻共享網站(YouTube),那么您可能會在此過程中學到一些東西。 確實,YouTube 的原始工程師之一 Mike Solomon 確實學到了很多東西,他在 [PyCon](https://us.pycon.org/2012/) : [在 YouTube 上的可擴展性上做了演講](http://www.youtube.com/watch?v=G-lGCC4KKok) 。
這不是架構驅動的討論,我們將通過介紹許多盒子相互連接的方式進行介紹。 邁克可以這樣講。 他致力于建立 YouTube 的 Servlet 基礎結構,視頻索引功能,視頻轉碼系統,全文搜索,CDN 等。 但是,相反,他退后了一步,仔細研究了工作時間,并分享了一些深刻的經驗教訓,這些經驗教訓顯然是來之不易的。
對我來說,要講的主要內容是使用非常簡單的工具完成了**。 盡管許多團隊都在轉向更復雜的生態系統,但 YouTube 確實做到了簡單。 他們主要使用 Python 進行編程,使用 MySQL 作為其數據庫,他們一直使用 Apache,甚至對于一個如此龐大的站點來說,新功能都始于非常簡單的 Python 程序。
這并不意味著 YouTube 不會做酷的事情,而是做的,但是使所有事情協同工作的更多的是哲學或做事方式,而不是技術專長。 是什么使 YouTube 成為世界上最大的網站之一? 繼續閱讀并查看...**
## 統計信息
* 每天 40 億次觀看
* 每分鐘上傳 60 個小時的視頻
* 350+百萬臺設備啟用了 YouTube
* 2010 年收入翻了一番
* 視頻的數量增加了 9 個數量級,而開發人員的數量僅增加了 2 個數量級。
* 一百萬行 Python 代碼
## 堆棧
* **Python-** YouTube 的大部分代碼行仍在 Python 中。 每次觀看 YouTube 視頻時,您都在執行一堆 Python 代碼。
* **Apache** -當您認為需要擺脫它時,則不需要。 Apache 是??YouTube 上真正的搖滾明星技術,因為它們保持了簡單。 每個請求都通過 Apache。
* **Linux** -Linux 的好處是總有一種方法可以進入并查看您的系統運行情況。 無論您的應用程序表現多么糟糕,您都可以使用 strace 和 tcpdump 之類的 Linux 工具對其進行查看。
* **MySQL** -使用很多。 觀看視頻時,您正在從 MySQL 獲取數據。 有時它使用關系數據庫或 Blob 存儲。 這是關于調整和選擇組織數據的方式。
* [**Vitess**](http://code.google.com/p/vitess/) -YouTube 發布的新項目,用 Go 編寫,它是 MySQL 的前端。 它動態地進行了很多優化,它重寫查詢并充當代理。 目前,它可以處理每個 YouTube 數據庫請求。 它基于 RPC。
* **Zookeeper** -分布式鎖定服務器。 用于配置。 真正有趣的技術。 難以正確使用,因此請閱讀手冊
* **Wiseguy** -一個 CGI Servlet 容器。
* **Spitfire** -一個模板系統。 它有一個抽象的語法樹,讓他們進行轉換以使處理更快。
* **序列化格式** -無論使用哪種格式,它們都非常昂貴。 測量。 不要用泡菜 不是一個好選擇。 找到的協議緩沖區很慢。 他們編寫了自己的 BSON 實現,比您可以下載的實現快 10-15 倍。
## 一般課程
* YouTube 的 **Tao** :選擇最簡單的解決方案,并附帶最實際的保證。 您需要所有這些東西的原因是您需要靈活性來解決問題。 在您指定的那一刻,您就會把自己粉刷成一個角落。 您不會做出這些保證。 嘗試做出所有這些保證時,您的問題會自動變得更加復雜。 您不會離開自己。
* **整個過程就是**的可伸縮性。 可擴展的系統是您所無法企及的。 您沒有意識到。 這不是流行語。 這是解決精神問題的一般問題。
* **大型系統設計的標志**:每個系統都是根據其特定要求量身定制的。 一切都取決于構建的細節。
* **YouTube 不是異步的**,所有內容都處于阻塞狀態。
* **相信哲學勝于教義**。 簡單點。 那是什么意思? 當您看到它時,您就會知道。 如果執行代碼檢查會更改數千行代碼和許多文件,則可能是一種更簡單的方法。 您的第一個演示應該很簡單,然后進行迭代。
* **解決一個問題:一個字-簡單**。 尋找最簡單的方法來解決問題空間。 有很多復雜的問題,但是第一個解決方案并不需要復雜。 隨著時間的流逝,復雜性自然會到來。
* **許多 YouTube 系統都是從一個 Python 文件**開始的,并在許多年后變成了大型生態系統。 他們所有的原型都是用 Python 編寫的,并且存活了驚人的時間。
* **在設計審查**中:
* 什么是第一個解決方案?
* 您打算如何迭代?
* 我們對該數據將如何使用了解多少?
* **事情隨時間而變化**。 YouTube 如何起步與以后發生的事情無關。 YouTube 最初是一個約會網站。 如果他們為此設計,他們將有不同的對話。 保持靈活性。
* **YouTube CDN** 。 最初是外包出去的。 非常昂貴,所以他們自己做。 如果您有不錯的硬件伙計,則可以構建一個不錯的視頻 CDN。 您建立了一個非常大的機架,將機器插入其中,然后進行 lighttpd 處理,然后覆蓋 404 處理程序以查找未找到的視頻。 這花了兩個星期的時間,而且第一天的服務量為 60 吉比特。 使用非常簡單的工具,您可以做很多事情。
* **您必須測量**。 Vitess 換出了一個協議來進行 HTTP 實現。 即使在 C 語言中,它的速度也很慢。 因此,他們剝離了 HTTP 并使用 python 進行了直接套接字調用,這在全局 CPU 上便宜了 8%。 HTTP 的封裝確實非常昂貴。
## 可擴展性技術
* 這些不是新主意,但令人驚訝的是,一些核心主意如何在許多不同的方面得到應用。
* **分而治之-可伸縮性技術**
* 這是可伸縮性技術。 一切都是關于劃分工作。 確定如何執行它。 從 Web 層開始,適用于許多事物,您擁有許多 Web 服務器,這些 Web 服務器或多或少完全相同且獨立,并且可以水平擴展它們。 那是分而治之。
* 這是數據庫分片的關鍵。 您如何劃分內容,并在細分的部分之間進行交流。 這些是您想盡早解決的事情,因為它們會影響您的成長方式。
* 簡單而松散的連接確實很有價值。
* Python 的動態特性在這里是一個勝利。 不管您的 API 有多糟糕,您都可以存根或修改或修飾自己的方式來解決許多問題。
* **近似正確性-稍作弊**
* 另一個喜歡的技術。 系統的狀態就是它所報告的狀態。 如果用戶不能告訴系統的一部分是歪斜和不一致的,那不是。
* 一個真實的例子。 如果您寫評論,但有人同時加載該頁面,則他們可能會在 300-400 毫秒內沒有收到該評論,正在閱讀的用戶將不在乎。 評論的作者會在意,因此您確保撰寫評論的用戶會看到它。 所以你有點作弊。 您的系統不必具有全局一致的交易記錄。 那將是非常昂貴和過度的。 并非每條評論都是金融交易。 所以知道什么時候可以作弊。
* **專家旋鈕切換**
* 問,您對一致性模型了解多少? 對于評論的最終一致性是否足夠好? 租電影是不同的。 租房時有錢,所以我們會盡力做到永不丟失。 根據數據需要不同的一致性模型。
* **抖動-向系統中添加熵**
* 始終是他們小組中的熱門詞。 如果您的系統沒有抖動,那么您會得到 [雷電群](http://highscalability.com/blog/2008/3/14/problem-mobbing-the-least-used-resource-error.html) 。 分布式應用程序實際上是天氣系統。 調試它們與確定天氣一樣具有確定性。 抖動引入了更多的隨機性,因為令人驚訝的是,事情趨于堆積。
* 例如,緩存過期。 對于流行視頻,他們會盡其所能地緩存內容。 他們可能會緩存 24 小時的最受歡迎的視頻。 如果所有內容一次到期,則每臺計算機將同時計算到期時間。 這產生了一個雷電群。
* 抖動表示您在 18-30 小時之間隨機失效。 這樣可以防止事情堆積。 他們在各處使用它。 當操作排隊并試圖破壞自身時,系統傾向于自我同步。 令人著迷的觀看。 一臺計算機上的磁盤系統運行緩慢,每個人都在等待一個請求,因此所有其他計算機上的所有其他請求突然之間完全同步。 當您有很多機器并且有很多事件時,就會發生這種情況。 每個人實際上都從系統中刪除了熵,因此您必須重新添加一些熵。
* **作弊-知道如何偽造數據**
* 很棒的技術。 最快的函數調用是不會發生的。 當您擁有一個單調遞增的計數器(例如電影觀看次數或個人資料觀看次數)時,您可以在每次更新時進行一次交易。 或者,您可以不時進行一次交易,并隨機更新一次,只要交易從奇數變為偶數,人們可能會認為這是真實的。 知道如何偽造數據。
* **可擴展組件-自己創造運氣**
* **您可以查看一個 API 并獲得良好的感覺**。 輸入是否定義明確? 你知道你要出去嗎? 其中很多最終都與數據有關。 嚴格說明每個函數將輸出什么數據以及它如何流動,實際上可以幫助您在沒有文檔的情況下理解應用程序。 您可以分辨出在調用函數之前和之后發生的情況。
* **在 Python 中,事情傾向于向 RPC** 發展。 代碼的結構基于程序員的紀律。 因此要建立良好的約定,當所有其他方法都失敗時,就會出現 RPC 隔離墻,以便您了解其中的內容和結果。
* **您的組件將不完美**。 知道,一個組件可能會持續一個月或六個月。 通過畫出這些線條,您正在自己賺一些錢。 當事情發展到南方時,您可以將其換成其他東西。 有時用 python 和 C 重寫某些內容,有時則意味著完全擺脫它。 直到您能夠觀察到,您才知道。
* **團隊中有這么多人,沒人知道整個系統**,因此您需要定義組件。 這是視頻轉碼,與視頻搜索不同。 您需要定義明確的子組件。 好的軟件設計。 這些事情最終導致彼此交談,因此擁有一個良好的數據規范將很有幫助。 他最大的罪過是 Servlet 層和模板層之間的通信,使之成為字典。 好主意。 應該添加一個 WatchPage 并說一個觀看頁面有一個視頻,一些評論和一些相關視頻。 這引起了很多問題,因為字典可以具有數百個屬性。 他們并不總是做出正確的選擇。
* **效率-以可擴展性為代價**
* **效率是以可伸縮性** 為代價的。 最有效的方法是用 C 編寫并將其塞入一個進程,但這是不可擴展的。
* **關注宏級別** **,您的組件以及它們如何分解**。 將此做為 RPC 還是以內聯方式有意義? 將其分成一個子包,就可能有一天可能會有所不同。
* **關注算法** 。 在 Python 中,實現良好算法的工作量很低。 例如,有 bisect 模塊,您可以在其中獲取列表,做一些有意義的事情,并將其序列化到磁盤上,然后再次讀回。 對 C 有罰款,但這很容易。
* **測量** 。 在 Python 中,測量就像閱讀茶葉一樣。 Python 中有很多與直覺相反的東西,例如抓斗成本。 他們的大多數應用程序都花時間進行序列化。 對序列化進行概要分析非常取決于您要插入的內容。對 int 進行序列化與對大 blob 進行序列化有很大不同。
* **Python 的效率-知道不該做什么**
* **有關了解不要做什么的更多信息** 。 您制作事物的動態程度與運行 Python 應用程序的昂貴程度相關。
* **Dummer 代碼更易于 grep 且易于維護** 。 代碼越神奇,就越難弄清楚其工作原理。
* **他們并沒有做很多 OO** 。 他們使用很多命名空間。 使用類來組織數據,但很少用于 OO。
* **您的代碼樹是什么樣的?** 他希望用以下詞語來形容它:簡單,實用,優雅,正交,可組合。 這是一個理想,現實有點不同。
## 相關文章
* [使用 Python 調整 YouTube 大小](http://www.slideshare.net/didip/super-sizing-youtube-with-python)
* [擴展 Web 的 MySQL 數據庫](http://www.percona.com/live/mysql-conference-2012/sessions/scaling-mysql-databases-web)
* [YouTube 架構](http://highscalability.com/youtube-architecture)
* [關于 HackerNews](http://news.ycombinator.com/item?id=3757456)
不錯。 可以使用一些校對方法,因為我不得不在某些語言被弄亂的地方放慢腳步,例如“那些東西你想早點弄清楚,因為它們會影響你的成長方式。” 否則,有趣的閱讀使我想給 python 多一點關注。
嗯,但公平地說,YouTube 使用 lighttpd 嗎? 通過螢火蟲:http://i.imgur.com/ClSH4.png
“ Apache 是??YouTube 上真正的搖滾明星技術,因為它們使它保持簡單。每個請求都通過 Apache 進行。”
“您建立了一個非常大的機架,將機器插入其中,然后進行 lighttpd”
如果 Apache 很棒,為什么他們選擇 lighttpd 代替呢?
這是否還意味著“每個請求都通過 Apache”的語句不正確?
好文章。 還有一些 UX 良好做法。
@ Michal,@ Andy:這些語句是在 CDN 的上下文中的,因此您可以假定它們意味著 CDN 將 lighttpd 用于靜態內容,而將 Apache 用于其余內容。
前 YouTuber 在這里...
Apache 是??他們處理動態 Web 請求的方式。 主頁,觀看頁面,用戶頁面等。在早期,視頻流媒體,視頻上傳者和圖像上傳者在 Lighthttpd 上運行,因為它能夠更好地處理非交互式數據流。
當我兩年多前離開時,他們正處于將大多數視頻流切換到基于 Google 的基礎架構的過程中,因為 Google 基礎架構具有對等協議和更高的帶寬成本。 在此過程中,他們似乎決定保留舊的視頻流,并將其用于靜態內容服務(Lighthttpd 做得很好)。
順便提及,隨機更新事物最近已獲得專利。
@michal @andy,聽起來好像 apache 是??他們的 Web 服務器,而 lighttpd 驅動了 CDN,因此在外部您會收到 lighttpd 標頭,但 apache 確實在做這項工作。
作為對 YouTube 的致敬,您可以將其制作成 30 分鐘的視頻嗎? 大聲笑
您可以同時使用 apache 和 lighttpd 來實現目標。 如果這篇文章更詳細地解釋每一個 YouTube 服務的內容,那將是很好的。 看起來.ligspd 至少提供了.css 文件,這是其靜態內容。
“ YouTube 不是異步的,一切都在阻塞。” 為什么? 我以為大家都同意,最好的辦法就是去醫院。
也許它可以防止出現錯誤:
“所有形式的異步 I / O 都會打開應用程序,直至出現潛在的資源沖突和相關的故障。需要仔細的編程(通常使用互斥,信號量等)來防止這種情況。”
資料來源:http://en.wikipedia.org/wiki/Asynchronous_I/O
談到簡單而可靠的工具:Youtube 什么時候切換到 PostgreSQL?
感謝您的出色總結!
哇,什么是“夏季代號”?
- 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 內容平臺的經驗教訓