# WhatsApp 如何每秒吸引近 5 億用戶,11,000 內核和 7,000 萬條消息
> 原文: [http://highscalability.com/blog/2014/3/31/how-whatsapp-grew-to-nearly-500-million-users-11000-cores-an.html](http://highscalability.com/blog/2014/3/31/how-whatsapp-grew-to-nearly-500-million-users-11000-cores-an.html)

上次[訪問 WhatsApp](http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html) 時,他們剛剛被 Facebook 以 190 億美元的價格收購。 我們了解了他們的早期體系結構,該體系結構主要集中于優化 Erlang,以處理服務器上的 200 萬個連接,使用 All The Phones 并通過簡單性使用戶滿意。
兩年后,流量增長了 10 倍。 WhatsApp 如何使它躍升到新的可擴展性水平?
[Rick Reed](http://www.linkedin.com/pub/rick-reed/2/186/427) 在 Erlang 工廠的一次演講中告訴我們: [這是“十億”,帶有“ B”: WhatsApp 的下一個級別](https://www.youtube.com/watch?v=c12cYAUTXXs) ( [幻燈片](https://github.com/reedr/reedr/blob/master/slides/efsf2014-whatsapp-scaling.pdf) ),這顯示了 WhatsApp 的統計數據:
> 擁有數百個節點,數千個內核,數百 TB 的 RAM 的東西,并希望為不久將在全球范圍內成為現實的數十億智能手機提供服務? WhatsApp 上基于 Erlang / FreeBSD 的服務器基礎結構。 在滿足對消息傳遞服務不斷增長的需求方面,我們面臨著許多挑戰,但是隨著我們不斷擴大服務范圍(> 8000 核)和速度(>每秒 70M Erlang 消息), 系統。
與兩年前相比,最顯著的變化是什么?
* 顯然,除了工程師數量之外,每個維度都更大。 更多的盒子,更多的數據中心,更多的內存,更多的用戶以及更多的擴展問題。 Rick 最引以為傲的是,用很少的工程師來處理這種增長水平:每個工程師 4000 萬用戶。 這是云計算勝利的一部分。 他們的工程師在他們的軟件上工作。 網絡,硬件和數據中心由其他人處理。
* 由于需要有足夠的頭部空間來處理每個盒子上增加的總體負載,因此他們放棄了嘗試為每個盒子盡可能多地支持連接。 盡管他們通過增加大型機箱并在 SMP 機器上高效運行來降低管理開銷的一般策略仍然保持不變。
* 瞬態很好。 如今,多媒體,圖片,文本,語音,視頻已成為其體系結構的一部分,而不必長期存儲所有這些資產,極大地簡化了系統。 該體系結構可以圍繞吞吐量,緩存和分區展開。
* Erlang 是它自己的世界。 聽了這個談話,很清楚您在 Erlang 的世界觀中所做的一切都多少,這可能會令人迷惑。 盡管最終是一個分布式系統,所有問題都與其他任何分布式系統相同。
* Erlang 數據庫 Mnesia 似乎是造成大規模問題的重要原因。 這讓我想知道是否還有其他一些數據庫可能更合適,是否需要留在 Erlang 解決方案系列中是否會有點盲目呢?
* 您可能會想到很多與規模有關的問題。 不穩定的連接問題,隊列太長以至于它們會延遲高優先級的操作,定時器的抖動,在一種流量級別上正常工作的代碼在較高流量級別上嚴重中斷,高負載下的高優先級消息無法得到服務,阻塞其他操作的問題 意外的方式,導致資源問題的故障等等。 無論您使用什么系統,這些事情都會發生,并且必須通過它們來解決。
* 我對 Rick 跟蹤并修復問題的能力感到震驚和驚訝。 非常令人印象深刻。
瑞克總是講好話。 他非常慷慨地提供具體細節,這些細節顯然直接來自生產中遇到的問題。 這是我對他的講話的掩飾…
## 統計信息
* 每月有 4.65 億用戶。
* 每天& 40B 中有 19B 條消息
* 600M 圖片,2 億語音,1 億視頻
* 147M 高峰并發連接-手機已連接到系統
* 230K 高峰登錄/秒-電話連接和斷開連接
* 342K 峰值 msgs in / sec,712K 峰值
* 大約有 10 位團隊成員在 Erlang 上工作,他們既處理開發工作,又處理操作。
* 假期多媒體使用率最高。
* 輸出 146Gb / s(圣誕節前夕),電話的帶寬相當大
* 已下載 360M 視頻(圣誕節偶數)
* 已下載 2B 張圖片(46k / s)(除夕)
* 1 張圖片已下載 3200 萬次(除夕)
## 堆棧
* Erlang R16B01(加上自己的補丁)
* FreeBSD 9.2
* Mnesia(數據庫)
* 偏航
* SoftLayer 是他們的云提供商,裸機,網絡內相當隔離的雙數據中心配置
## 硬件
* ?550 個服務器+備用設備
* 約 150 個聊天服務器(每個約 100 萬個電話,1.5 億個高峰連接)
* ?250 毫米(多媒體)服務器
* 2x2690v2 Ivy Bridge 10 核(超線程總共 40 個線程)
* 數據庫節點具有 512GB 的 RAM
* 標準計算節點具有 64GB RAM
* SSD 主要用于可靠性,但由于需要更多存儲空間而存儲視頻時除外
* 雙鏈路 GigE x2(面向用戶的公共&面向后端系統的私有)
* > 11,000 個內核運行 Erlang 系統
## 系統概述
* 二郎的愛。
* 很棒的語言,只用很少的工程師就能支持這么多的用戶。
* 強大的 SMP 可擴展性。 可以運行非常大的盒子并保持較低的節點數。 操作復雜性隨節點數(而不是核心數)而定。
* 可以即時更新代碼。
* 可擴展性就像清除雷區。 他們通常能夠在爆炸之前發現并清除問題。 測試系統的事件是世界性事件,尤其是足球,這會產生較大的垂直負載峰值。 服務器故障,通常是 RAM。 網絡故障。 和不良的軟件推動。
* 傳統外觀架構:
* 電話(客戶端)連接到聊天和 MMS(多媒體)。
* 聊天連接到瞬時離線存儲。 后端系統在用戶之間傳遞消息時會保留它們。
* 聊天連接到數據庫,例如帳戶,個人資料,推送,群組等。
* 發給手機的消息:
* 實際短信
* 通知:小組主題,個人資料照片更改等
* 存在消息:鍵入,空閑,已連接/未連接等
* 多媒體數據庫:
* 內存中 [Mnesia 數據庫](http://www.erlang.org/doc/man/mnesia.html) 使用大約 2TB 的 RAM 在 16 個分區上分片,以存儲約 180 億條記錄。
* 消息和多媒體僅在傳遞時存儲,而在傳遞媒體時,有關媒體的信息存儲在數據庫中。
* 每臺服務器的連接數為 100 萬,而不是兩年前的每臺服務器 200 萬的連接數,通常是因為服務器繁忙得多:
* 隨著更多的用戶,他們希望在每臺服務器上以更多的凈空運行,以吸收峰值負載。
* 用戶比兩年前更加活躍。 他們正在發送更多消息,因此服務器正在執行更多操作。
* 這些服務器之外的功能已移至它們上運行,因此它們可以做更多的事情。
## 去耦
* 隔離瓶頸,使它們不會在系統中傳播
* 緊密耦合會導致級聯故障。
* 堆棧中較深的后端系統不應冒充前端。
* 所有內容均已分區,因此,如果一個分區出現問題,其他分區將不會受到影響。
* 解決問題時,請保持盡可能多的吞吐量。
* 異步性可最大程度地減少延遲對吞吐量的影響
* 即使在系統中的各個點存在等待時間或等待時間無法預測時,也可以保持盡可能高的吞吐量。
* 減少耦合,并使系統盡可能快地工作。
* 避免 [行頭阻塞](http://en.wikipedia.org/wiki/Head-of-line_blocking)
* 行頭塊是在隊列中對第一個數據包進行處理而使在其后排隊的所有那些項目餓死的地方。
* 分離的讀寫隊列。 特別是在表上執行事務的地方,因此,如果在寫側存在任何延遲,則不會阻塞讀側。 通常,讀取端的運行速度要快得多,因此任何阻塞都會堆積讀取器。
* 單獨的節點間隊列。 如果某個節點或連接節點的網絡出現故障,則可能會阻止應用程序中的工作。 因此,當將消息發送到不同的節點時,會將消息傳遞給不同的 [進程](http://www.erlang.org/doc/reference_manual/processes.html) (Erlang 中的輕量級并發),因此僅備份發往問題節點的消息。 這允許發送到健康節點的消息自由流動。 問題被隔離到問題所在。 修補的 mnesia 在 async_dirty 復制時可以很好地做到這一點。 發送消息的應用程序與發送程序是分離的,并且如果節點出現問題,則不會感到任何背壓。
* 當使用不確定的延遲時,使用“隊列” FIFO 工作程序分配模型。
* 元集群
* 請注意,本節僅在演講開始約 29 分鐘時進行,非常簡短,很不幸。
* 需要一種方法來包含單個群集的大小,并允許其跨越很長的距離。
* 構建了 wandist,這是 gen_tcp 上類似 dist 的傳輸,它由需要相互通信的節點的網格組成。
* pg2 之上的透明路由層創建了一個單跳路由調度系統。
* 示例:兩個數據中心中的兩個主要群集,兩個不同數據中心中的兩個多媒體群集,以及兩個數據中心之間的共享全局群集。 它們之間都有廣電連接。
* 示例:
* 通過使用 async_dirty 避免進行 Mnesia 事務耦合。 大多數交易未使用。
* 僅在從數據庫取回時使用調用,否則將強制轉換所有內容以保留異步操作模式。 在 Erlang 中,handle_call 會阻止響應,并且消息已排隊,而 handle_cast 不會阻止,因為操作結果無關緊要。
* 呼叫使用超時,而不是監控器。 減少遠端 proc 上的競爭,并減少分發渠道上的流量。
* 當只需要盡力而為時,請在演員表上使用 nosuspend。 如果一個節點有問題或網絡有問題,這會將一個節點與下游問題隔離開,在這種情況下,分發緩沖區會在發送節點上備份,并且嘗試發送的 proc 會被調度程序掛起,從而導致級聯失敗,每個人 正在等待,但尚未完成任何工作。
* 使用大型分配緩沖區來吸收網絡和下游節點中的問題。
## 并行化
* 工作分配:
* 需要分配超過 11,000 個核心的工作。
* 從單線程 [gen_server](http://www.erlang.org/doc/man/gen_server.html) 開始。 然后創建一個 gen_factory 以將工作分散到多個工作人員。
* 在一定的負載下,調度過程本身成為了瓶頸,而不僅僅是執行時間。 繁瑣的操作使許多節點進入了盒子的調度過程,過程的鎖定成為分配端口和過程本身進入的瓶頸。
* 如此創建了 gen_industry,位于 gen_factory 之上的一層,因此有多個調度過程,允許對進入包裝盒的所有輸入以及對工人本身的調度進行并行化。
* 通過一個鍵選擇工作程序進行數據庫操作。 對于 IO 等不確定的延遲情況,使用 FIFO 模型分配工作量以防止行首阻塞問題。
* 分區服務:
* 在 2 到 32 種方式之間進行分區。 大多數服務是按 32 種方式分區的。
* [pg2 尋址](http://erlang.org/doc/man/pg2.html) ,它們是分布式進程組,用于尋址整個群集中的分區。
* 節點成對運行。 一個是小學,另一個是中學。 如果一個或另一個發生故障,它們將處理主要和次要流量。
* 通常嘗試將訪問單個 [集合](http://www.erlang.org/doc/man/ets.html) (內置術語存儲)或單個記憶缺失片段的進程數限制為 8。 鎖爭用在控制之下。
* Mnesia:
* 因為他們不使用事務來獲得盡可能高的一致性,所以他們通過哈希將對單個節點上單個進程的記錄的訪問序列化。 哈希到一個分區,該分區映射到 [記憶缺失片段](http://www.erlang.org/doc/apps/mnesia/Mnesia_chap5.html) ,最終被分派到一個工廠,一個工人中。 因此,對單個記錄的所有訪問都將進入單個 erlang 進程。
* 每個記憶缺失片段僅在一個節點上的應用程序級別被寫入或讀取,這使得復制流只能在一個方向上進行。
* 當同級之間存在復制流時,片段更新的速度會遇到瓶頸。 他們修補 OTP,以使多個事務管理器僅針對 async_dirty 運行,因此記錄更新并行發生,從而提供了更多的復制吞吐量。
* 修補程序,用于將 mnesia 庫目錄拆分為多個庫,這意味著可以將其寫入多個驅動器,從而增加了磁盤的吞吐量。 真正的問題是何時從對等方加載了失憶癥。 將 IO 分散在多個驅動器(甚至是 SSD)上,就數據庫加載速度而言,提供了更大的可伸縮性。
* 將記憶缺失的島嶼縮小到每個島嶼的兩個節點。 島嶼是記憶障礙的群集。 即使有 32 個分區,也將有 16 個支持一個表的島。 由于只有兩個節點需要完成架構操作,因此有更好的機會在負載下支持架構操作。 如果嘗試同時啟動一個或兩個節點,則減少了加載時間協調。
* 通過快速警報來處理 Mnesia 中的網絡分區。 他們繼續運行。 然后進行手動對帳,以將它們合并在一起。
## 優化
* 離線存儲系統曾經是負載高峰期間的一個大瓶頸。 只是無法將內容快速推入文件系統。
* 用戶可以快速讀取大多數郵件,例如 60 秒內可以讀取 50%。
* 添加了回寫緩存??,因此可以在必須將消息寫入文件系統之前將其傳遞。 98%的緩存命中率。
* 如果由于負載而備份了 IO 系統,則在 IO 系統追趕時,緩存會提供額外的緩沖以全速傳輸消息。
* 通過將 BEAM(Erlang VM)打補丁到所有異步工作線程中的循環文件端口請求,從而解決了異步文件 IO 中的行頭阻塞問題,該問題在出現大郵箱或慢速磁盤的情況下可簡化寫操作 。
* 將大型郵箱保留在緩存之外。 有些人處于大量群組中,每小時收到數千封郵件。 他們污染了緩存并放慢了速度。 從緩存中逐出它們。 請注意,處理不成比例的大型用戶是每個系統(包括 Twitter )的問題。
* 緩慢訪問帶有很多碎片的失憶表
* 帳戶表分為 512 個片段,這些片段被劃分為多個孤島,這意味著用戶到這 512 個片段的稀疏映射。 大多數片段將是空的和空閑的。
* 主機數量加倍導致吞吐量下降。 事實證明,記錄訪問的速度確實很慢,因為當目標為 7 時,哈希鏈的大小超過了 2K。
* 發生的是散列方案導致創建了大量的空存儲桶,而很少的存儲桶非常長。 兩行更改將性能提高了 4 比 1。
## 修補
* 爭奪計時器輪。 在一臺主機中有幾百萬個連接,并且每當特定電話發生任何事情時,每個連接都在設置和重置計時器,因此,結果是每秒成千上萬個計時器設置和重置。 一個計時器輪和一個鎖,這是一個重要的競爭來源。 解決方案是創建多個計時器輪以消除競爭。
* mnesia_tm 是一個很大的選擇循環,在嘗試加載表時,由于選擇接收,積壓可能會導致無法返回的點。 修補程序將物料從傳入的事務流中拉出并保存以供以后處理。
* 添加多個 mnesia_tm async_dirty 發件人。
* 為 prim_file 命令添加標記/設置。
* 有些星團橫跨整個大陸,因此,健忘癥應該從附近的節點而不是整個國家/地區加載。
* 為異步文件 IO 添加循環調度。
* 種子和哈希散列以破壞與 phash2 的重合。
* 優化主要/名稱表的比例。
* 如果已經遺失,請不要將其遺忘在隊列中。 無法完成具有待處理的轉儲的架構操作,因此如果排隊了很多轉儲,則無法進行架構操作。
## 2/22 中斷
* 即使所有這些工作都發生了。 它發生在最壞的時間,在 Facebook 收購之后,發生了 210 分鐘的中斷[。](http://techcrunch.com/2014/02/22/whatsapp-is-down-facebooks-new-acquisition-confirms/)
* 由于負載未發生。 它始于后端路由器問題。
* 路由器丟棄了 VLAN,該 VLAN 導致整個集群中大量節點斷開/重新連接。 當一切重新連接時,它處于不穩定狀態,他們從未見過。
* 最終決定,他們必須停止所有操作并將其恢復,這是他們多年來沒有做過的事情。 花了一段時間才將所有內容放回原處并重新保存。
* 在此過程中,他們發現了一個過度耦合的子系統。 通過斷開連接和重新連接,pg2 可以進入 n ^ 3 消息傳遞狀態。 他們看到 pg2 消息隊列在幾秒鐘內從零增加到 400 萬。 推出補丁。
## 版本
* 無法模擬這種規模的流量,尤其是在高峰時段,例如午夜的新聞除夕。 如果他們嘗試的是極具破壞性的措施,則推出的速度將非常緩慢。 只需要一小部分流量。 然后快速迭代,直到效果良好為止,然后部署到集群的其余部分。
* 推出是滾動升級。 一切都是多余的。 如果他們要進行 BEAM 升級,則會先安裝 BEAM,然后逐步在集群中執行重新啟動以獲取新更改。 有時,它只是一個熱補丁,無需全面重啟就可以推出。 這是罕見的。 通常升級整個事情。
## 尚待解決的挑戰
* 由于升級,數據庫會定期刷新。 數據量太大的問題需要花費很長時間才能加載,并且由于各種原因,加載會在較大規模下失敗。
* 實時集群狀態&大規模控制。 舊的 shell 窗口方法不再起作用。
* 2 次冪分割。 現在有 32 個分區。 下一步是 64,這將起作用,但是 128 分區將是不切實際的。 關于這一點沒有太多討論。
對 whatapp 與其他聊天應用說微信/行比較的興趣,是否有關于此的博客/文章/文檔?
Softlayer 的路由器只是“丟棄” VLAN。
他們可以通過廉價找到的 LCD(最低公分母)人員聯網的另一朵云。
檢查我們。 我們可以做的更好:)
是的,喬,讓我們使用您的小公司。 這并不是說 Softlayer 并不是一個存在時間更長的大型企業集團。 他們并不便宜。 他們很容易成為更高端的提供商之一。 他們知道自己在做什么。 一個問題并不大。 AWS 遇到了一些問題。
您的帖子只是展示您的天真,給您的公司起了壞名聲。 我建議不要發布有關其他提供商的負面評論,以使自己看起來不錯。
- 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 內容平臺的經驗教訓