# Medialets 體系結構-擊敗艱巨的移動設備數據
> 原文: [http://highscalability.com/blog/2011/3/8/medialets-architecture-defeating-the-daunting-mobile-device.html](http://highscalability.com/blog/2011/3/8/medialets-architecture-defeating-the-daunting-mobile-device.html)

移動開發人員面臨著巨大的擴展問題:對來自數百萬個設備的大量連續遙測數據流進行有用的處理。 這是一個非常好的問題。 這意味著智能手機的銷售終于實現了他們的命運:[在銷售領域屠宰 PC](http://www.mobiledia.com/news/81680.html) 。 這也意味著移動設備不再只是簡單的獨立應用程序的容器,它們正成為大型后端系統的主要接口。
盡管開發人員現在在客戶端進行移動開發,但他們面臨的下一個挑戰是如何對那些棘手的后端位進行編碼。 目前面臨同樣問題的公司是 [Medialets](http://www.medialets.com/) ,這是一種移動富媒體廣告平臺。 他們所做的是幫助發布商制作高質量的互動廣告,盡管就我們的目的而言,他們的廣告內容并不那么有趣。 對于他們的系統,我確實感到非常有趣的是他們如何解決克服移動設備數據泛濫的問題。
每天,Medialets 都需要處理數十億個新對象,這些對象嵌入了數百萬兆個原始事件數據流中,而這些數據又是從數百萬個移動設備流入的。 所有這些數據必須是:在移動設備上生成的; 通過長時間斷開連接而中斷的有損連接進行傳輸; 緊縮 提供給報告系統; 反饋到必須能夠在幾毫秒內響應請求的控制系統中。
這將成為具有移動設備的系統的常見范例。 問題是,如何實現它?
現在很有趣。
為了幫助我們更多地了解 Medialets 的工作原理,Medialets 服務器平臺的工程經理 Joe Stein 很友好地向我介紹了他們在做什么。 Joe 還運行了一個出色的 Hadoop 播客和博客,名為 [All Things Hadoop](http://allthingshadoop.com/) ,請查看。
Joe 在這個問題上做了很多工作,并且對如何使用諸如 Hadoop,MySQL,HBase,Cassandra,Ruby,Python 和 Java 之類的工具構建有效的移動數據處理器有一些很棒的想法。
## 現場
* [http://www.medialets.com](http://www.medialets.com/) -主頁。
* [http://www.medialytics.com](http://www.medialytics.com/) -用于分析來自應用程序事件的見解儀表板。
## 什么是 Medialets?
Medialets 將富媒體廣告投放到 iPhone,iPad 和 Android 等移動設備。 富媒體意味著廣告可以是使用 SDK,事件生成和廣告功能嵌入的復雜應用程序。 這個想法是,廣告可以在平臺內運行,而不是 being 腳的 adsense 型廣告,它們可以完全互動,同時提供與電視相同的品牌質量,但在移動設備上除外。 應用程序可以讓您做一些事情,例如搖動設備或與 Michael Strahan 玩足球比賽。 所有這些活動都會生成必須流回其服務器場以進行處理的數據。
除了廣告外,他們還為發布商提供非常詳細的基于[應用程序的分析](http://www.medialytics.com/)。
要查看其廣告的示例[,請點擊此處](http://www.medialets.com/showcase)。
## 統計資料
* 每天有 2-3 TB 的新數據(未壓縮)。
* 每天創建數百億個分析事件。 事件表示有人搖晃,關閉,旋轉等應用程序。
* 200 多個高級應用程序在數以千萬計的移動設備(iPhone,iPad 和 Android)上運行。
* 已經處理了超過 7,000 億個分析事件。
* 在典型的 MapReduce 作業中,每秒可以處理超過一百萬個事件
* 通常在 [www.medialytics.com](http://www.medialytics.com/) 中可以從移動設備收到數據
* 總共約有 100 臺服務器。
* 移動電話正在增長。 智能手機[的銷售量首次超過了個人電腦](http://www.mobiledia.com/news/81680.html)的銷售量,而 Medialets 的銷售量卻在增長。 iPhone,iPad 和 Android [設備在 2010 年第四季度增長了近](http://www.medialets.com/medialets-data-spotlight-mobile-rich-media-momentum-q4-2011/) 300%。Android 繼續增長市場份額,但 iOS 仍占據著高端手機庫存的主導地位。
* 有十幾個人在從事工程,主要是在客戶端和 Medialytics 上。 基礎架構團隊為 1-2 人。
## 基礎設施
* 在四核 x 16GB / 1TB 上運行的 Ad Server 實例
* 16 核心 x 12 GB(含 10TB)的事件跟蹤服務器
* 事件處理,作業執行,日志收集&聚合對每個 16 核 24GB RAM / 6TB 空間進行預處理
* 日志收集&匯總了預處理和后處理。 Hadoop 群集節點各有 16 個核心 x 12GB RAM(含 2x2TB(JBOD))。
* [www.medialytics.com](http://www.medialytics.com/) 各種配置都具有 16 個內核,從 12 到 96GB RAM 帶有 1-2TB
## 開源系統&生產工具
* 的 Linux
* 滅螺
* 雄貓
* 的 MySQL
* 阿帕奇
* 乘客
* 收益率
* 記憶快取
* 德語
* Hadoop 的
* 豬
* 納吉奧斯
* 神經節
* 走
* 吉拉
## 語言能力
* C / C ++-廣告服務器
* Java-數據轉換
* Ruby-很多服務器端 Ruby。 Ruby 可能比 C ++更多,但更多地轉向了 Python。
* Python-許多 MapReduce 正在使用 [Python 流](http://allthingshadoop.com/2010/12/16/simple-hadoop-streaming-tutorial-using-joins-and-keys-with-python/)移入 Python。
* 階梯
* 重擊
## 建筑
* 該系統構建了幾年,主要使用定制軟件,盡管他們使用 Hadoop 來承擔分析方面的繁重任務,并使用 MySQL 作為數據庫。 定制軟件在開始時就需要擴展,但是隨著這些產品的發展,他們現在正在考慮使用更多現成的產品。
* 該系統是實時的,因為隨著數據的滴入,報表中的數據將盡可能快且盡可能真實。
* 不是基于云的。 它們在物理硬件上運行。 他們無法在云中的多租戶環境中完成所需的工作。 具有 16 個核和 TB 級磁盤空間的計算機幾乎是不夠的。 他們花費大量時間來構建軟件,以充分利用硬件,磁盤 IO,CPU,并行處理的優勢,并充分利用內存。
* 他們所做的一切(幾乎)都是異步的。 您無需連接到網絡即可查看廣告或讓他們捕獲分析。 廣告可以在廣告系列開始之前幾周投放(預定),您也可以乘坐地鐵,仍然可以看到廣告。 廣告期間收集的數據最終會傳遞到服務器端。
* 發布者負責構建應用程序,并集成到 Medialets SDK 中。 該 SDK 特別適用于分析和廣告。 當他們想要運行分析或在廣告位中運行廣告時,他們使用 Medialets 的工具。
* 共有三個基本子系統:廣告投放,事件處理和報告。
* 服務器分為以下幾層:
* 前向層:
* 廣告投放層-專為運行廣告服務器而設計。
* 跟蹤層-處理數據轉儲和數據加載。
* 異步處理層:
* Hadoop 集群-在其自己的服務器集上運行。
* Java 和 Ruby 流程-接收傳入的數據,并將數據轉換為 Hadoop 可用的形式,以進行不同的聚合。
* 使事情保持精簡和卑鄙,并僅根據需要提供盡可能多的冗余。
* 硬件是根據軟件的功能進行配置的。 并非所有機器都是高端或低端。 系統的不同部分具有不同的硬件需求。
* 響應廣告服務請求時,磁盤 IO 或計算量很少。 有一個 C ++服務在靜態內存上進行查找。 因此,廣告投放機具有大量內存和低端處理器。
* 在有數據接收的地方,它們有許多套接字阻塞并寫入磁盤,因此它們只需要很少的內存。
* Hadoop MapReduce 層需要您提供的所有功能。
* 事件處理流程如下所示:
* 移動設備上的應用程序會生成事件。 有應用程序事件,廣告事件和自定義事件。 定制事件可以由應用程序創建為鍵-值對,它們將在此基礎上聚合,而無需定制編碼。
* 跟蹤服務器接收事件并將其寫入對象的日志文件。 這些文件表示收集事件數據的時間快照,例如 7 分鐘。
* Java 服務器讀取這些文件,解壓縮它們并通過一系列線程池運行對象,以便將它們轉換并與所有必要的元數據合并。 不同的流程將拾取不同的事件類型并對其進行處理。
* 上一步創建一個新文件,其中該事件在與元數據合并后現在已完成。 該新文件被推送到 HDFS(Hadoop 使用的文件系統)中。
* MapReduce 在這些 HDFS 文件上運行以對數據進行重復數據刪除。 重復數據刪除發生后,數據集是干凈的。
* MapReduce 作業生成數據,然后將其導入到分析 UI 可提供給客戶的數據庫中。 運行數十種不同類型的聚合。 通過 Medialytics 提供了標準指標,可以從廣告和應用報告的角度顯示應用的運行狀況。 它們沿著許多不同的維度進行匯總,例如,按設備和平臺進行匯總。 其中一些數據是對廣告投放系統的反饋。
* 數據復制是移動設備和異步系統上的關鍵設計點。
* 手機操作系統無法保證應用程序會獲得時間來生成事件。 在 OnClose 掛鉤中,發布者將運行一些清除邏輯,Medialets 具有一些清除邏輯,然后將事件寫入服務器,這需要花費幾毫秒的時間來響應,然后本地應用程序必須更新本地數據庫。 即使這是一個快速的旅程,您仍處于 15 毫秒的窗口中,在該窗口中,操作系統無法保證所有功能都將執行。 操作系統可能會終止進程或崩潰。 根據失敗發生的位置,這將導致重播事件重復。 iPhone 的新后臺功能使記帳變得復雜。 如果某個應用程序在后臺運行了 30 秒或更短的時間,則仍被認為是同一次運行。 有很多變化。
* 關機 3 個月的手機仍然可以輸入數據。 他們必須能夠知道自己是否曾經看過這些數據,如果不經常使用應用程序,這種情況很常見。
* Hadoop 用于計算指標和聚合,但也用于重復數據刪除。 在處理數據時,他們每秒查看超過一百萬個事件以對數據進行重復數據刪除。 他們每天都會收到 100 億個事件。 他們必須查看每個事件并確定是否:1)他們之前看過事件; 2)他們是否要在他們正在處理的數據集中再次看到該事件。 使用 MapReduce 可以將數據分散在一堆服務器上,這意味著您直到減少所有重復數據的所有工作后才真正知道。
* 廣告
* 某些類型的事件數據是實時流回的。 對于另一類數據,必須在創建事件之前打開和關閉事件。 例如,要知道某人一天使用一次應用的次數,必須有一個打開事件和一個相應的關閉事件。
* 移動世界中的用戶確實是獨一無二的。 在 Internet 世界中,除非已登錄,否則幾乎無法量化用戶。 電腦被很多人使用,您無法真正確定誰在使用設備。 像電話這樣的物理設備通常由一個人使用,因此,基于設備的聚合實質上就是基于用戶的聚合。
* 他們可以收集不同維度的統計數據,例如轉化數據。 他們可以告知某人從該操作系統的版本升級到另一版本需要多長時間。 誰是不同類型的人? 然后,他們可以將其覆蓋到他們擁有的不同類型的應用程序中。
* 廣告既可以是品牌廣告也可以是直接響應廣告,兩者混合。 例如,當電影廣告被點擊而不是去網站時,它可以從設備中調出本地應用程序。 這樣您就可以在應用程序中直接購買門票。 具有不同的攔截器并具有創建豐富的用戶體驗的能力,從而可以通過新方式將交互流貨幣化。
* 啟動應用程序后,應立即顯示廣告。 異步用于將數據推送到服務器,但可以同步投放廣告。 許多應用程序在打開時都會看到贊助商徽標,并且必須立即提供。 第一個 onload 調用是獲取廣告的同步調用。 他們的廣告投放系統可以在 200 毫秒內以 3%的差異投放廣告。
* 由于它們將數據存儲在[壓縮序列文件](http://blog.mgm-tp.com/2010/04/hadoop-log-management-part2/)中,因此節省了 70%-80%的存儲成本。
* HDFS 具有序列文件格式。 壓縮可以基于行或塊進行。 假設您有一個包含 10 個塊的序列文件,并且一個塊定義為將進入映射器的數據(對于 MapReduce)。 如果壓縮是在塊級別上,并且有 10 個塊,則可以將這 10 個塊并行推送到映射器,HDFS 將自動處理所有解壓縮和流傳輸。
* 可將來自 reducer 的數據存儲在序列文件中,例如它是重復數據刪除過程的結果,或者可以以未壓縮的格式存儲,可以將其加載到另一個數據庫中。
* 許多人不壓縮數據。 要使用 Hive,必須解壓縮數據,以便您可以與之交互。 這取決于您要花多少錢以及您希望在哪里發揮系統效率低下的作用。
* 將大量數據以未壓縮格式存儲在磁盤上是一個弊端。 他們有選擇地決定使用哪種格式,具體取決于與將數據保留在磁盤上多長時間相比,解壓縮階段是否值得承擔這些開銷。
* 工作執行系統
* 內置 Ruby,然后再提供合適的現成系統。
* 他們建立了作業處理系統來實施工作流處理。 工作流是一組具有不同任務和步驟并針對不同事件進行操作的作業。 必須以許多不同的方式處理應用程序數據,并且結果必須進入幾個不同的系統,一些進入表,有些進入其他報告系統。 所有這些都是自動化和腳本化的。
* 聚合數據存儲在 MySQL 中,供發布者和廣告商查看。 它們達到了可以分片的極限。 他們正在研究 MongoDB 和 GridFs(屬于 MongoDB)。
* GridF 看起來可以很好地存儲,擴展和提供其媒體文件,這使他們考慮使用 MondoDB 來存儲聚合結果集。
* 他們還在尋找 Cassandra 和 HBase 來存儲其匯總結果集。 他們會考慮將相同的基礎結構也用于其跟蹤和事件捕獲服務器,這些服務器目前完全是自定義編寫的。
* Cassandra 看起來很有吸引力,因為它可以跨多個數據中心工作。 他們將使用此功能在同一個 dacenter 中擁有多個集群,并在一個集群中進行寫操作,而在另一個集群中進行讀操作,因此不同的流量負載不會互相影響。 他們不想混合使用不同類型的流量,因此他們不想在同一臺計算機上執行 MapReduce 作業,從 HBase 寫入和從 HBase 讀取。
* HBase 是一種有吸引力的選擇,因為它們已經將大量數據寫入 HDFS,以至于那些文件在 HBase 中可用將令人興奮。 他們在 fsync 方面存在可靠性方面的擔憂,以確保將數據寫入磁盤,但是這些擔憂已在最近的發行版中得到解決。 HBase 不允許按不同用途對數據進行分區,這對 Cassandra 來說是有吸引力的,因為 Cassandra 支持在群集中具有不同種類的機架。
* 由于他們已經在使用 HDFS,因此在處理完所有數據后將所有數據移入 Cassandra 并不吸引人,這會使他們的硬盤需求增加一倍。
* 他們喜歡[協處理器](http://highscalability.com/blog/2010/11/1/hot-trend-move-behavior-to-data-for-a-new-interactive-applic.html)的想法,因此不必在網絡上移動數據。 每個作業為 2-3 TB,因此真正實現并行化而無需移動數據非常有吸引力。
* [TTL 刪除在 Cassandra 中的](http://www.quora.com/Which-NoSQL-stores-have-good-support-for-LRU-or-TTL-semantics-in-storage)非常吸引人。 Cassandra 可以輕松處理其寫負載,因此可以用來存儲傳入的事件。 然后,所有工作流程都可以從 Cassandra 中取出移動數據,將其與其他數據庫中的元數據合并,以創建完全連接的對象,然后可以將其寫入 HBase,然后可以進行 MapReduce 聚合并寫入結果 到 MongoDB。
* 另一種重復數據刪除設計是將其全部寫入 HBase,然后選擇最后一個作為贏家。 一旦這些系統就位,他們將重新考慮一些現有流程,以了解如何利用它們。
* 為了確定他們是否應該保留現有軟件,遷移到另一個數據庫還是使用 MySQL,進行了大量的原型嘗試。 他們可能最終會使用 MongoDB,Cassandra 和 HBase,他們只是想為正在構建的新產品找到正確的功能組合,并弄清楚它們如何能夠繼續擴展而不會占用大量開發人員時間。
* AdServer 用 C ++編寫
* 該層提供了標準的廣告投放時間安排功能,因此可以將廣告映射到廣告位,旋轉廣告,定位廣告等。定位可以基于平臺,分辨率,地理位置和其他尺寸。
* 有一個用于數據庫數據的對象緩存,用于制定廣告投放決策。
* 99%的時間緩存足夠,而他們有 1%的時間訪問數據庫。
* 讀取時間只有幾微秒,但當必須訪問數據庫時,讀取時間會增加到 200 微秒。
* 還負責安排廣告投放進度,以便可以在應用的整個生命周期內投放廣告系列。 例如,如果某個應用每天運行一百萬次,而該廣告系列獲得了一百萬次展示,則他們不想在一天內耗盡它。 假設廣告客戶希望廣告系列投放一個月。 廣告服務器查看分析數據,然后提出費率請求,以計算應投放的步伐廣告。
* 許多決定都是預先計算的。 人將放置目標,說出應在何處顯示添加項。
* 諸如地理分布之類的決策是動態計算的。 例如,如果您要投放一組廣告印象,則需要一些去加拿大,一些去美國。
* Java 服務器
* 將元數據與傳入的數據集連接起來。以 95%的命中率從緩存中提取元數據。 例如,當他們有一個新的廣告上線時,他們將訪問數據庫。
* 進入數據庫后,他們希望盡可能樂觀,并盡可能減少線程的中斷,因此在進行非常繁重的讀取操作和寫入次數很少時,它們使用原子變量和 CAS(比較并設置)。 此開關將性能提高了 15%-20%,因為它們不再阻止寫入。
* 他們對讀取的數量進行了基準測試,發現 Mutex 花了很長時間。 信號量最終阻止了作者。 假設有 10 個線程,其中 9 個可以讀取,因此沒有線程會阻塞,但是第 10 個線程必須寫入,它將阻塞所有線程。 與循環執行比較和設置相比,這增加了延遲,并且效果不佳。 這是有可能的,因為它們不斷處理 JVM 內某些被阻止的千兆字節數據。
* 使用[并發備注模式](http://javathink.blogspot.com/2008/09/what-is-memoizer-and-why-should-you.html)創建用于處理緩存請求的線程池。 緩存是一個池,將在需要時加載數據。 負載使用 CAS 來阻止正在發生的實際讀取。
* [SEDA](http://www.eecs.harvard.edu/~mdw/proj/seda/) 用于通過所有不同的轉換處理數據。 每個線程池對一塊數據執行狀態轉換,然后將數據轉發到另一個線程池以進行下一個轉換。 例如,第一步是從磁盤讀取數據并將其序列化到對象陣列上。 這些操作對延遲不敏感。
* 使用 Ruby
* 使用 Ruby 時,必須有效地實現真正的多進程功能。
* [Rinda](http://en.wikipedia.org/wiki/Rinda_(Ruby_programming_language)) 用于在分支過程之間創建并發。 有時使用數據庫進行協調。
* 這隱藏了解釋程序常見的任何內存泄漏問題或綠色線程問題。
* 監控方式
* 內部工具和 Nagios 的混合。
* 與 Ganglia 跨所有不同層級對自己的日志進行大量趨勢分析。
* 他們采取了非常主動的監視方法,并花費了大量的 R & D 努力,因此他們可以在發生問題之前就知道他們有問題。
* 趨勢式飼料進入他們的監測。 如果他們的一臺廣告服務器在 10 毫秒內停止響應,在一秒鐘內響應超過 1 或 2 個請求,則他們需要知道這一點。
* 如果請求延遲平均要從 200 毫秒增加到 800 毫秒,那么他們想知道。
* 它們記錄了很多日志,因此通過日志進行問題調試。
## 得到教訓
* ****將數據轉化為產品**。** Development 知道他們擁有的數據。 該知識可用于幫助產品團隊創建新產品以銷售給客戶。 R & D 與業務之間始終存在很大的差距。 幫助企業與 R & D 的工作保持一致。 讓他們了解 Hadoop 的功能,處理數據的速度以及處理數據的速度。 新的轉化歸因產品就是一個很好的例子。 如果用戶看到靜態廣告,點擊它并下載該應用程序,則可能不是導致該轉化的唯一原因是靜態廣告。 例如,如果用戶在前一天(或兩周前)體驗了富媒體廣告,則根據發布者可配置的標準,該廣告將為轉化分配一定的功勞。 只有強大的數據處理基礎架構才能實現這種功能。 如果沒有 R & D 知道這種功能甚至是可能的,那么就不可能開發出這些新型的高附加值產品并將其出售給客戶。
* **探索新工具**。 這是一個由新工具組成的復雜世界。 所有這些新技術使知道在何處放置功能具有挑戰性。 一個功能可以通過很多不同的方式完成,并且根據工具(HBase,Cassandra,MongoDB)的不同而有所不同。 重復數據刪除是否仍應在 MapReduce 中完成還是應使用協處理器完成? 通過支持兩個不同的數據庫值得將磁盤加倍嗎? 按使用模式對數據進行分區是真的還是獲勝,或者所有流量模式都可以在同一系統上工作? 對您的選項進行原型設計,并考慮您的體系結構如何隨每個新工具(單獨工作或一起工作)而變化。
* **主動監視和規劃容量**。 將監視數據轉變為基礎架構規劃。 如果您不這樣做,那您將只保留消防問題。 建立主動警報和趨勢數據,以便即使在成為警告之前,您也可以看到它的到來。 有時您只需要另一個服務器。 更多數據僅意味著更多服務器。 這是做生意的成本。 知道要放置在哪個服務器以使所有不同的數據流正常運行的技巧就在于此。 比較 CPU 和負載的趨勢,并真正看一下整個基礎架構并基于此基礎制定計劃,這一點很重要。
* **從產品運營角度來看數據**。 查看新的應用程序,看看它們與以前已實現的功能有何相似之處,以弄清您如何擴展。 僅僅因為有一個新應用程序并不意味著需要添加新的廣告服務器,新的數據節點和新的跟蹤服務器。 這取決于。 許多不同的廣告會發出少量的廣告請求,但發送的數據卻非常荒謬。 趨勢日志可查看數據中的峰值,并查看延遲與峰值之間的關系。 這告訴您系統的不同部分在何處以及如何擴展。
## 相關文章
* Joe Stein 的 [AllThingsHadoop Twitter Feed](http://www.twitter.com/allthingshadoop)
* [大規模解決大數據問題](http://www.medialets.com/tackling-big-data-problems-at-scale/)
* 已發布 2010 年第四季度移動人物 [http://www.medialets.com/medialets-data-spotlight-mobile-rich-media-momentum-q4-2011/](http://www.medialets.com/medialets-data-spotlight-mobile-rich-media-momentum-q4-2011/)
* [Hadoop,BigData 和 Cassandra 與 Jonathan Ellis 在一起](http://allthingshadoop.com/2010/05/17/hadoop-bigdata-cassandra-a-talk-with-jonathan-ellis/)-HBase 適用于 OLAP,Cassandra 適用于 OLTP
* [Twitter 的計劃分析 1000 億條推文](http://highscalability.com/blog/2010/2/19/twitters-plan-to-analyze-100-billion-tweets.html)
真的很棒。 對團隊嘗試使用可用的批處理工具(如 MapReduce)構建自己的實時分析體系結構所面臨的各種挑戰的深入了解。 在 Cloudscale,我們 100%專注于提供實時分析平臺,該平臺不僅是世界上最快的大數據架構,而且可以在具有 10GigE 網絡的商品 Amazon 云集群上運行。 現在,在大數據分析領域處于領先地位的公司可以替代 Medialets 英勇采用的“自己動手”方法,并在此具有高度可擴展性。 隨著實時分析繼續迅速成為主流,本文將成為爆炸性增長的 Web 公司和企業的關注焦點,這些公司正面臨著同樣艱巨的挑戰,并正在尋找工具,技術和方法。 平臺來幫助他們。
真好! 非常詳細和有用。
對于 mysql 替換,我建議您查看 Infobright(www.infobright.com)。 它是一個柱狀 mysql 插件引擎,可以很好地替代 mysql(它們也具有開源版本)。
- 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 內容平臺的經驗教訓