2012-11-12 108 views
9

我一直是ruby/php的Web應用程序開發人員,我已經習慣了服務器實例的水平伸縮以處理更多請求的想法。水平縮放 - 表示位於負載均衡器後面的應用程序的單獨實例,它們不共享任何內容,並且彼此不知道。NodeJS水平縮放

我的主要問題是,因爲Node.js和它的重點evented-io允許單個框運行node.js服務器來處理'數千'的同時請求 - 是負載平衡/水平縮放使用擴展nodejs應用程序?是否縮放一個節點應用程序限於垂直縮放(在問題時拋出更多的RAM /處理能力)?

我的第二個問題與node.js水平縮放和websockets有關。我見過很多使用websockets的Node.js的「聊天」教程。由於websockets在瀏覽器和服務器之間有效地保持開放的通信線路,因此PHP/Ruby世界中典型的水平縮放體系結構導致類似於鏈接中所解釋的那種聊天應用程序打破 - 因爲新的websocket連接請求將被分配給不同的流程/服務器,並且沒有一箇中央資源會跟蹤所有連接的客戶端?

回答

8

Node.js支持水平縮放,與您通過內置的cluster模塊描述的方式非常相似。

關於在此環境中使用websockets/socket.io的第二個問題,您必須使用類似Redis的內容來在應用程序的多個實例中存儲共享狀態,如here所述。

+0

這是一個老問題,但我使用mongodb來存儲和檢索我所有的聊天應用程序數據。由於我想橫向擴展我的應用程序,因爲當我有多個服務器時,我的聊天應用程序不起作用。我應該做什麼,我應該完全刪除mongodb並使用redis?或者有更好的解決方案。 – DragonBorn

1

Node.js的羣集功能僅限於具有多個處理器的單個服務器。主要是利用服務器中的處理器數量。如果我們想通過負載均衡器Facade橫向擴展多臺服務器,我想這個問題是否更多。

+0

爲了回答有關套接字的問題,就像任何服務器調用一樣,套接字創建調用將進行負載均衡,並且在節點Nx上說達到,對於Web套接字的生命週期,此TCP連接保持打開狀態。即所有從瀏覽器到服務器,服務器到瀏覽器的通信都將由Nx提供。 – Pramma

0

如果node.js實例跨多個服務器(水平縮放)分佈,它將用於相同的目的,您需要對其進行正確編程以支持此類設置。