# Poppen.de 建筑
> 原文: [http://highscalability.com/blog/2010/4/12/poppende-architecture.html](http://highscalability.com/blog/2010/4/12/poppende-architecture.html)
這是 Alvaro Videla 的來賓,他描述了 [Poppen.de](http://www.poppen.de/) 這個流行的德國約會網站的架構。 該站點非常類似于 NSFW,因此在單擊鏈接之前請多加注意。 我發現最有趣的是,他們如何使用 Nginx,MySQL,CouchDB 和 Erlang,Memcached,RabbitMQ,PHP,Graphite,Red5 和 Tung 等技術,成功地將一些舊代碼與一些新代碼成功融合。
## 什么是 Poppen.de?
Poppen.de(NSFW)是德國最熱門的約會網站,盡管與 Flickr 或 Facebook 這樣的巨頭相比,它可能是一個很小的網站,但如果您開始遇到一些擴展問題,我們認為這是一個不錯的架構。
## 統計資料
* 2.000.000 用戶
* 20.000 個并發用戶
* 每天 300.000 條私人消息
* 每天 250.000 次登錄
* 我們有一個由 11 個開發人員,2 個設計師和 2 個 sysadmin 組成的項目團隊。
## 商業模式
該網站使用免費增值模式,用戶可以免費執行以下操作:
* 搜索其他用戶。
* 互相寫私信。
* 上傳圖片和視頻。
* 有朋友
* 視頻聊天。
* 多得多…
如果他們想發送無限制的消息或上傳無限制的圖片,則可以根據需要為不同類型的成員付費。 視頻聊天和網站的其他部分也是如此。
## 工具箱
### Nginx 的
我們所有的網站都通過 Nginx 提供服務。 我們有 2 臺 Nginx 前端服務器,在高峰時間每分鐘向 www.poppen.de 發送 150.000 個請求。 它們是使用四年的計算機,每個計算機只有一個 CPU 和 3GB RAM。 然后,我們有單獨的機器來提供站點圖像。 每分鐘由 3 個 nginx 服務器處理* .bilder.poppen.de(圖像服務器)有 80.000 個請求。
Nginx 讓我們做的很酷的事情之一就是從 Memcached 發出很多請求,而無需點擊 PHP 機器來獲取已經緩存的內容。 因此,例如,用戶配置文件是站點中 CPU 占用最大的頁面之一。 請求配置文件后,我們會將全部內容緩存在 Memcached 上。 然后 Nginx 服務器將命中 Memcached 并從那里傳遞內容。 每分鐘有 8000 個請求從 Memcached 發送出去。
我們有 3 個 Nginx 服務器正在從本地緩存中傳遞圖像。 用戶將他們的圖片上傳到中央文件服務器。 圖片請求將命中 3 臺 Nginx 服務器之一。 如果圖片不在本地緩存文件系統中,則 Nginx 將從中央服務器下載圖片,將其存儲在本地緩存中并提供服務。 這使我們可以負載均衡圖像分布并減輕主存儲機中的負載。
### PHP-FPM
該站點在 PHP-FPM 上運行。 我們使用 28 臺 PHP 機器,每個機器具有兩個 CPU 和 6GB 的內存。 他們每個運行 100 個 PHP-FPM 工作進程。 我們使用啟用 APC 的 PHP5.3.x。 PHP 5.3 版本使我們可以減少 30%以上的 CPU 和內存使用率。
該代碼是使用 symfony 1.2 PHP 框架編寫的。 一方面,這意味著額外的資源占用,另一方面,它使我們可以加快開發速度,并擁有眾所周知的框架,可以使我們輕松地將新開發人員集成到團隊中。 這里并不是所有的東西都是“花和玫瑰”。 因此,盡管我們擁有該框架提供的許多優勢,但我們還是不得不對其進行大量調整,以使其達到服務于 www.poppen.de 的任務。
我們所做的就是使用 XHProf(Facebook 的 PHP 概要分析庫)對站點進行概要分析,然后優化瓶頸。 由于該框架易于自定義和配置,因此我們能夠緩存大多數昂貴的計算,這些計算給 APC 中的服務器增加了額外的負載。
### 的 MySQL
MySQL 是我們的主要 RDBMS。 我們有幾臺 MySQL 服務器:一臺 32GB 的機器,帶有 4 個 CPU,用于存儲所有與用戶有關的信息,例如個人資料,圖片元數據等。該機器已有 4 年的歷史。 我們計劃將其替換為分片群集。 我們仍在設計此系統,以盡量減少對我們的數據訪問代碼的影響。 我們希望按用戶 ID 對數據進行分區,因為網站上的大多數信息都以用戶本身為中心,例如圖像,視頻,消息等。
我們有 3 臺機器在用戶論壇的主從配置中工作。 然后有一個服務器群集,用作網站自定義消息系統的存儲。 目前,它有超過 2.5 億條消息。 它們是在主從站主/從站從站系統中配置的 4 臺機器。
我們還有一個由 4 臺計算機組成的 NDB 集群,用于寫入大量數據,例如哪個用戶訪問了哪個其他用戶的個人資料的統計信息。
我們嘗試盡可能避免像瘟疫這樣的聯接并緩存。 數據結構被高度非規范化。 為此,我們創建了摘要表,以簡化搜索。
大多數表都是 MyISAM,可提供快速查找。 我們看到越來越多的問題是全表鎖。 我們正在轉向 XtraDB 存儲引擎。
### 記憶快取
我們大量使用 Memcached。 我們有超過 51 個節點的 45 GB 緩存。 我們將其用于會話存儲,視圖緩存(如用戶配置文件)和函數執行緩存(如查詢)等。我們對用戶表擁有的大多數按主鍵進行的查詢都緩存在 Memcached 中,然后從那里傳遞 。 我們擁有一個系統,該系統可在每次修改該表的一條記錄時自動使緩存無效。 將來改善緩存失效的一種可能解決方案是使用新的 Redis Hash API 或 MongoDB。 使用這些數據庫,我們可以以足夠的粒度更新緩存,而無需使其無效。
### 兔子 MQ
自 2009 年中以來,我們將 RabbitMQ 引入了我們的堆棧。 這是一個易于部署并與我們的系統集成的解決方案。 我們在 LVS 后面運行兩個 RabbitMQ 服務器。 在上個月,我們一直在將越來越多的東西移到隊列中,這意味著目前 28 臺 PHP 前端計算機每天大約發布 50 萬個作業。 我們向隊列發送日志,電子郵件通知,系統消息,圖像上傳等等。
為了使消息入隊,我們使用了 PHP-FPM 提供的最酷的功能之一,即 fastcgi_finish_request()函數。 這使我們能夠以異步方式將消息發送到隊列。 在生成必須發送給用戶的 HTML 或 JSON 響應后,我們將調用該函數,這意味著用戶不必等待我們的 PHP 腳本清理完畢,例如關閉 Memcached 連接,DB 連接等。 同時,所有保存在內存數組中的消息都將發送到 RabbitMQ。 這樣,用戶也不必等待。
我們有兩臺專用于處理這些消息的機器,目前總共運行 40 個 PHP 進程以消耗作業。 每個 PHP 進程消耗 250 個工作,然后死亡并重新生成。 我們這樣做是為了避免 PHP 出現任何形式的垃圾回收問題。 將來,我們可能會增加每個會話消耗的作業數量,以提高性能,因為事實證明重新分配 PHP 進程會占用大量 CPU。
該系統使我們可以改善資源管理。 例如,在高峰時間,我們甚至每分鐘可以登錄 1000 次。 這意味著我們將對 users 表進行 1000 個并發更新,以存儲用戶的上次登錄時間。 因為現在我們使這些查詢入隊,所以我們可以依次依次運行每個查詢。 如果我們需要更高的處理速度,我們可以將更多的使用者添加到隊列中,甚至可以將機器加入集群中,而無需修改任何配置或部署任何新代碼。
### CouchDB
為了存儲日志,我們在一臺計算機上運行 CouchDB。 從那里我們可以按模塊/動作查詢/分組日志; 事實證明,發現問題出在哪里很有用。 在將 CouchDB 用作日志聚合器之前,我們必須在每臺 PHP 機器上登錄并拖尾-f,然后從那里嘗試找出問題所在。 現在,我們將所有日志中繼到隊列,然后使用者將它們插入 CouchDB。 這樣,我們可以在集中的地方檢查問題。
### 石墨
我們使用[石墨](http://graphite.wikidot.com/)從網站收集實時信息和統計信息。 從每個模塊/動作的請求到 Memcached 命中/未命中,RabbitMQ 狀態監視,服務器的 Unix 負載等等。 Graphite 服務器每分鐘進行約 4800 次更新操作。 實踐證明,該工具對于查看站點中的實際情況非常有用。 它是簡單的文本協議,其圖形功能使它易于使用,幾乎可以即插即用到我們要監視的任何系統。
我們使用 Graphite 做的一件很酷的事情是監視同時運行的網站的兩個版本。 去年一月,我們部署了由新版本的 symfony 框架支持的代碼。 這意味著我們可能會遇到性能下降的情況。 我們能夠在一半的服務器中運行該站點的一個版本,而新版本則在其他服務器中運行。 然后,在 Graphite 中,我們為每半創建 Unix 負載圖,然后進行實時比較。
由于我們發現新版本的 Unix 負載較高,因此我們啟動了 XHProf 分析器并比較了這兩個版本。 我們使用 APC 存儲“標志”,這些標志使我們可以啟用/禁用 XHProf,而無需重新部署代碼。 我們有一個單獨的服務器,在其中發送 XHProf 配置文件,然后從那里匯總它們并進行分析,以找出問題所在。
### 紅色 5
我們的網站還向用戶提供視頻。 我們有兩種。 一種是來自用戶配置文件的視頻,這些視頻是用戶制作和上傳的電影。 此外,我們還有一個視頻聊天功能,可讓我們的用戶互動并分享他們的視頻。 在 2009 年中,我們每月向用戶流式傳輸 17TB 的視頻。
### 宗宗
Tsung 是用 Erlang 編寫的分布式基準測試工具。 我們使用它來進行 HTTP 基準測試,并比較我們計劃使用的 MySQL 的不同存儲引擎,例如新的 XtraDB。 我們有一個工具可以記錄到主 MySQL 服務器的流量,并將該流量轉換為 Tsung 基準測試會話。 然后,我們重播了這些流量,并通過 Tsung 生成的數千個并發用戶訪問了實驗室中的計算機。 很棒的事情是,我們可以產生更接近實際生產環境中發生情況的測試方案。
## 得到教訓
* 雖然面向 Buzz 的開發很酷,但**仍在尋找具有重要社區的工具**。 當有問題需要解決時,或者需要將人員納入團隊時,文檔和良好的社區將非常寶貴。 symfony 規定,可以免費獲得 5 本以上的官方書籍。 CouchDB 和 RabbitMQ 的開發人員也提供了良好的支持,它們具有活躍的郵件列表,可以及時回答問題。
* **了解您正在使用什么以及這些系統/庫的局限性是**。 我們從 symfony 中學到了很多東西。 可以在哪里進行調整以及可以改進什么。 就 PHP-FPM 而言,我們可以這么說,只是通過閱讀文檔,我們發現強大的 fastcgi_finish_request()函數被證明是非常有用的。 另一個例子是 Nginx,Nginx 社區已經解決了一些問題,例如我們對圖像存儲緩存的解釋。
* **擴展工具**。 如果他們運行良好,則無需在當前堆棧中引入新軟件。 我們已經編寫了幾個 Nginx 模塊,這些模塊甚至已經被 Nginx 社區測試過。 這樣,您可以回饋。
* **D** **對于無關緊要的**并不保守。 石墨似乎是在生產中運行的一種很酷的工具,但是關于它的報道并不多。 我們只需要嘗試一下。 如果它不起作用,我們可以禁用它。 如果我們無法在系統中得到一個很好的 Unix Load 圖,誰也不會哭。 今天,甚至我們的產品經理都喜歡它。
* **測量所有**:Unix 負載,站點使用情況,Memcached 命中率/丟失率,每個模塊/動作的請求等。學習解釋這些指標。
* **創建工具,使您可以盡快對問題做出反應**。 如果您必須回滾部署,那么您不想花費一秒鐘以上的時間。
* **創建工具,使您可以實時分析網站的情況**。 在實驗室中,大多數測試都給出了樂觀的信息,但隨后卻無法應對生產負荷。
## 未來
* 構建一個新的,更具可伸縮性的消息系統,因為當前版本相當舊,并且并非針對如此大量的消息而設計。
* 將越來越多的處理任務移至隊列系統。
* 將更多的 Erlang 應用程序添加到我們的系統中。 事實證明,RabbitMQ 對我們和 CouchDB 都適用。 它們是易于安裝和部署的系統,從而增加了我們對 Erlang 作為語言/平臺的信任。
* 我們正在尋找 Red5 的替代產品,可能是用 Erlang 編寫的 Oneteam Media Server。 目前,當我們使用開源 Erlang 產品時,我們可能會開始使用該語言編寫我們自己的應用程序,因為現在我們已經有了使用它的經驗。
* 改進我們的日志可視化工具。
我要感謝 Alvaro Videla 的出色寫作。 如果您想共享 fablous 系統的體系結構,請 [與聯系我](http://highscalability.com/contact/),我們將開始。
讓我們做數學。 每分鐘有 15 萬個請求到 www。*,這意味著每秒有 2500 個請求。
他們有 28 個 PHP 框,每個框有 100 個進程。 這意味著 2800 個 PHP 進程。
您需要盡可能多的 PHP 進程來處理并發請求(不是每秒)。 這意味著它們的腳本要么花費 1 秒來執行每個腳本,要么它們有很多方法可以執行。
不管哪種方式,東西都壞了。
我知道有使用 2-4 臺服務器使用 PHP 滿足此請求數量的網站。 不是 28。
Quote:
**此系統使我們可以改善資源管理。 例如,在高峰時間,我們甚至每分鐘可以登錄 1000 次。 這意味著我們將對用戶表進行 1000 個并發更新,以存儲用戶的上次登錄時間**
不,這并不意味著您有 1000 個并發更新。 這意味著您每秒大約有 16 次登錄,這意味著您可能有 10-20 次并發更新。 大多數時候少很多。
還要注意,它們有 50 個 memcached 節點。 他們必須處理多少臺服務器來處理這種中等負載? 太瘋狂了
結論:并不令人印象深刻,我還沒有看到任何新見解。 我對他們的代碼的效率提出了很多質疑。
您好 Alvaro,感謝您對體系結構的有趣了解。 我提出了兩個問題:-如何衡量并發用戶(超時?),為什么使用這么小的數據集使用如此多的節點進行內存緩存? 問候,保羅
您可以提供指向 Graphite 的鏈接嗎? 聽起來很有趣,我們已經開始研究這些系統,但是它的含義如此普遍,以至于簡單的 Google 都無法提出我認為正確的任何東西。
可以在 [http://graphite.wikidot.com/](http://graphite.wikidot.com/) 上找到石墨網站。
@霜:
-對 poppen.de 的 150.000 請求并不意味著它們全部都到達了 PHP 后端。
“我知道使用 2-4 臺服務器使用 PHP 滿足此請求數量的站點。不是 28 臺。” 這取決于他們做什么,他們緩存了什么,可以從請求中緩存多少。 它們顯示多少個局部分量? 網站信息是否完全動態? 問題列表可以繼續。 除此之外,我們將平均負載保持在較低水平,并且我們有足夠的服務器來滿足計劃的增長。
除此之外,當您建立網站時,您還必須做出商業決策。 不像您選擇有關網站編程理論的最佳書籍。 在我們的例子中,我們使用框架和 ORM。 這使我們發展很快。 您也必須考慮到這一點。 我了解到,在不了解其他公司背后的背景的情況下很難談論它們。
關于對數據庫和登錄號的并發查詢,您是對的,我在編號上犯了一個錯誤。 我向讀者道歉,因為他們提供了誤導性的信息。 另一方面,我希望您和該站點的其他讀者能夠理解使用隊列服務器可以完成的工作。 如果您已經知道了這一點,并且不需要向我學習,那么對您會更好。 我希望這對至少一名開發人員有用。
50 個 Memcached 節點并不意味著有 50 個專用計算機。
@保羅 p:
我們有一個“誰在線”服務器來跟蹤在線用戶。 它使用超時將其標記為已注銷。
我們使用幾個 Memcached 節點,因為根據要緩存的內容,我們有專門的存儲桶。 例如,我們有視圖緩存,用于緩存模板。 函數緩存,用于將查詢緩存到數據庫。 然后,一個 Memcached 專門將查詢緩存到一個表等。這樣,一個 memcached 的使用不會影響其他表。
@理查德:
http://graphite.wikidot.com/
嗨,阿爾瓦羅 我想向您介紹一個更好的流服務器: [erlyvideo](http://erlyvideo.org) ,值得測試,在您的情況下它將處理多少用戶(對我來說,它可以從一臺計算機上支持 1800 個連接)。
如果需要,請寫 [[受電子郵件保護]](/cdn-cgi/l/email-protection) 。
>我們希望按用戶 ID 對數據進行分區,因為網站上的大多數信息都以用戶本身為中心,例如圖像,視頻,消息等。
哼...這很有趣...會不會創建太多分區? 我對 Mysql 不太熟悉,但是我正在研究的那個 MySQL 建議我們不要創建超過 2000 個分區。
但是,在用戶 ID 上進行分區將意味著幾個 100K +分區。
@Alvaro:
因此,如果他們甚至不使用 PHP,那么我更正確的是您的腳本太慢,進程太多。 但這不是真正的問題。
我正在談論的站點具有很多動態內容,但是緩存非常聰明,而且它們不使用任何框架或 ORM 包裝器。
這就是我認為您可能損失 90%的性能的地方,這些東西往往是絕對的性能殺手。
當然,您可以在開發時間上獲得一些優勢,但是一旦達到一定的規模,就會希望您沒有走這條路。
為使用更智能查詢和緩存的對象編寫一些類并不難。
您的前端有 2.5k re / s,memcached 可以提供 133 re / s。 這是否意味著您的緩存命中率為 5%?
而且請不要使用“每分鐘的請求數”,沒有人對規模感興趣。 它主要是“每秒請求數”,突然之間您的數字似乎不再那么大了,因為它只有 60 分之一。
@Abhishek:
他沒有說每個用戶一個分區,而是說了按用戶 ID 劃分的分區。 這并沒有暗示有關分區大小的任何信息。 每個分區可以是 100 個用戶或 100 萬個用戶。 它僅告訴您使用哪個鍵來決定將值存儲在哪個分區中。
同樣,這與 MySQL 本身無關。 你在做什么? 還有 2000 個分區? 是,對..
有趣。
您使用任何類型的虛擬化/云服務還是全部物理硬件? 任何 CDN?
什么操作系統/發行版?
阿爾瓦羅
很棒的帖子。 我認為閱讀和查看如何解決許多問題很有趣。 關于石墨也不錯的技巧。
此致
尼克拉斯
嗨,阿爾瓦羅。 您說過您正在使用 memcached 來緩存諸如用戶個人資料之類的視圖組件。 您能否說明有關如何使這些視圖緩存無效的更多詳細信息?
我了解您在更改數據時編寫了自己的代碼來使“數據緩存”無效。 但是對于視圖緩存,有很多數據,任何數據更改都將使該視圖緩存無效。 你是怎樣做的?
我的第一感覺:太多的 PHP 服務器。 我認為在這種情況下,Symfony 對于他們來說 PHP 框架太慢了。 從我的經驗中得知,Symfony 吃了很多 CPU。
我真的認為他們應該用更具擴展性和輕量級的 PHP 框架取代 Symfony
@Max Lapshin
感謝您對 Erlyvideo 的提示,幾個月前我們也對此進行了調查。 我們尚未決定。
@Maxim R
我們使用 EC2 進行視頻傳輸,其他系統則托管在我們的物理服務器中。 服務器正在運行 SLES10。
@尼爾·H
我們對鍵進行“命名空間”,因此可以立即使相關的鍵集失效。 但這取決于網站的哪一部分。 因此,在這里很難解釋所有這一切。 參見此處,了解許多常見模式:http://code.google.com/p/memcached/wiki/FAQ
@pcdinh
如果您是 http://twitter.com/pcdinh,那么我可以告訴您,我們不使用 16 核 Dell / HP 之類的計算機。 我們使用具有 8 核的 6G Ram 的舊刀片服務器。 除此之外,我們將這些機器的平均負載保持得非常低。
然后,關于 symfony 或任何 PHP 框架,盡管它們不是比普通的 PHP 代碼或更輕量級的框架最快的解決方案,但速度并不是選擇框架時唯一考慮的問題。 symfony 擁有強大的支持,強大的社區和大量文檔。 這意味著我們可以輕松雇用已經知道我們所使用技術的人員。 那么,如果我們使用超快速的自定義框架,然后編寫它的“黑客”離開了公司,會發生什么呢? 誰來維護他的代碼? 從理論上講,您關于遷移到另一個框架的建議聽起來不錯,但是您知道將站點代碼移植到另一個框架可能需要花費幾個月的時間嗎? 我們還必須支付開發人員的薪水,而在大多數情況下,這些薪水都比其中一臺刀片服務器貴。 因此,正如我在之前的回答中所說,公司會做出業務決策,而不僅僅是因為速度快而選擇了這種框架。
因此,請不要將服務器數量歸咎于 symfony,因為雖然 yes 比普通的 PHP 代碼重,但這不是我們使用那么多服務器的原因。 如果不是,那為什么要使用 PHP?C 的速度要快得多。
Alvaro,我絕不會質疑您的基礎架構,因為您比這里的其他任何人都了解它,尤其是其中一些“扶手椅系統架構師”。 :)
但是該語句
> 我們還必須支付開發人員的薪水,而在大多數情況下,這些薪水都比其中一臺刀片服務器貴。
can lead you into a corner. you can throw money at hardware only for so long until your investment start to produce diminishing returns and your infrastructure becomes too unwieldy and then it'll be that much harder to do any meaningful code changes.
保持服務器負載“ *非常*低”又有什么意義呢? 如果服務器在可接受的時間內返回數??據,負載是多少(故障或嚴重超載除外)有關系嗎?
聽起來您所有的服務器都在內存緩存池中。 我很好奇,PHP 服務器具有更大的 APC 緩存大小而不是將其用于內存緩存會更好嗎?
@馬克西姆 R.
感謝您的見解。 我同意你的看法。 不是說您去硬件上花錢,應該有一個平衡點。 我們也會在可能的情況下嘗試改進代碼。 e .:每當我們向站點功能添加功能時,我們都會嘗試提高性能,重構代碼等,因為我們需要在腐爛之前對其進行維護。 我們正在開發一種用于 SQL 查詢的輕量級解決方案,根據我們的基準測試,該解決方案將減輕站點的大量負載,因為我們可以刪除我們使用的 ORM,這是很沉重的。 我們的網站在不斷發展,我們正在像每個人一樣從錯誤中學習。
關于平均負載語句,我說過,因為對于某些評論者來說,我們有 28 臺完全過載的計算機。 除此之外,我們擁有這些機器是因為我們正在計劃未來的增長,如果一切都按計劃進行,那么到將來我們的意思是迫在眉睫。
關于 APC 與 Memcache。 我們必須考慮更多。 有時我們討論的與您剛才所說的相同。 同時,一些經驗豐富的 PHP 開發人員告訴我,APC 在擁有大量 RAM 時不能很好地工作。 我沒有與此相關的經驗可以發表意見。 另外,APC 緩存不共享,如果這也是一個問題,我們必須考慮。 我們也將一些計算緩存到 APC 中。
阿爾瓦羅
感謝**很棒的文章**! 我對您的 nginx 和 memcached 有一個問題。 您寫道,許多請求甚至都沒有達到 PHP,因為 Nginx 從 memcached 獲取了緩存的內容-您能再描述一下嗎? 您是否緩存 HTML 頁面?
問候,
@阿爾瓦羅
Erlyvideo 發展非常迅速。 幾個月前,您可以看到它的前一代,什么也做不了。 因此,如果您有興趣,最好通過電子郵件進行交流。
+1 感謝您的精彩文章!
Alvaro,我認為您應該嘗試 Erlyvideo-它在 Erlang 中很爛,而且發展非常迅速。 我認為,erlyvideo 的作者 Max Lapshin(привет,Макс:)可以提供支持并實現所需的所有功能。
Alvaro,您嘗試過 Facebook 的 HipHopPHP 編譯器嗎?
> 我發現最有趣的是他們如何成功地將一些舊的和一些新的
不,他們沒有成功地將新舊融合在一起。
poppen.de 以運行緩慢而聞名。 它幾乎從來沒有真正快過,而且每隔幾(6-8)周就會額外減速至少幾小時,通常是 1-2 周。
當前的緩慢周期自大約 6 周開始,至今仍未結束。 poppen.de 的性能給 a * s 帶來了痛苦。.遠非成功...
> 我們有 2 個前端 Nginx 服務器
Alvaro, are these 2 servers in a master/master setup? Which is the solution to make them highly available/load balanced? Regards
- 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 內容平臺的經驗教訓