2012-01-25 39 views
-1

我從Node.js的角度來看這裏,普遍的共識似乎是它爲IO綁定用例而閃耀。我並沒有試圖建立下一個Facebook/Twitter,但我的問題是社交網站通常I/O綁定或CPU綁定?由於社交網絡可以涵蓋如此廣泛的背景,我將進一步指定我特別關注聊天,即時消息,跟蹤用戶和狀態更新等功能。對於這些類型的事情,瓶頸通常發生在CPU或IO端?社交網站,如Facebook和Twitter的CPU或IO綁定?

回答

3

我是一個網站的主要工程師,每月活躍用戶數爲20萬。我們肯定是I/O綁定的,很少(如果曾經)擔心應用服務器的性能。

縮放CPU非常簡單。您在網絡上啓動一個新節點並將其添加到我們的負載均衡器的可用池中。另一方面,擴展I/O是非常棘手和昂貴的,因爲數據必須保持可尋址性和合理的一致性。

在讀取方面,您可以通過支持複製進行擴展。這需要編寫能夠容忍複製延遲的軟件 - 數據從寫入數據庫移動到讀取數據庫所需的時間。我們有4臺讀取服務器用於1臺寫入服務器,並且在高負載下,延遲可能是幾秒鐘。我們選擇實現具有回寫緩存的I/O訪問,其中緩存由memcached和一系列高RAM服務器供電。

在寫入端,爲了維持併發寫入的數量,數據分片是必需的。這意味着你不能使用表連接,並且你在整個碎片中失去原子性。同樣,你的軟件必須容忍這一點。另外,在處理大量二進制數據(如照片圖片)時,大規模網站通常會使用爲優化文件系統I/O而優化的CDN。

我的觀點是,對於典型的社交網站來說,花更多的時間和金錢來縮放I/O與CPU之間的關係。

相關問題