2017-04-03 63 views
-1

所以,我的Web應用程序的結構基於這種文件結構:https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application。 我的應用程序也與Mlab上的mongoDB有連接。如何使用NodeJs實現橫向擴展性

什麼我的應用程序的功能:

  • 允許用戶登錄/註冊;
  • 從mlab中檢索數據;
  • 檢索到的數據可以由用戶評分;
  • 檢索到的數據可以通過管理員刪除;
  • 用戶可以將數據添加到db(數據是培訓計劃);

現在我需要讓我的應用程序橫向擴展,但我在這裏有點失落:

•正弦我假設我有沒有實時的活動我shoudn't需要像socket.io? •我應該添加某種類型的MQ(rabbitMQ,ZMQ等):如果是這樣,或許有關於如何操作的指針,因爲大多數示例只是使用簡單的文本消息。

•我很確定我需要一些負載平衡器。 Nginx,HaProxy ...我可能應該更改我的快速服務器設置,先聽多個端口,對嗎?

或者我完全錯了嗎?

P.S .:希望這不是太廣泛的問題。

+0

我討厭這麼說,但問題是令人難以置信的廣泛。 –

回答

1

不同的需求需要不同的方法:)

這些可以根據您的需要而有所不同。並非每個可伸縮應用程序都必須擁有它們。如果希望應用程序是異步的,則可以將所有請求放入隊列並立即返回給客戶端。然後,您可能需要推送機制來通知客戶端操作已結束。 (Socket.io,RabbitMQ的等)

當然,你需要一個反向代理請求分發到不同的服務器負載平衡或工作負載的基礎上(HAProxy的等)

需要注意的時,第一件事你想要擴展應用程序就是建立一個無狀態的結構,或者讓它們脫離進程(例如會話,緩存,文件服務器)第二件事你需要注意的是身份驗證階段。一個登錄的客戶端來自ServerA的ServerA可能會在後續請求中遇到ServerB上的「未授權」。您還應該考慮應用程序使用的資源。雖然這些資源服務於單個服務器,但它們將同時響應五至十臺服務器的數百萬個請求。是像監控instan的東西ces.And很多事情都是這樣的。

這些是你應該真正想到的東西:)

+0

非常感謝。現在,我只是添加了nginx來監聽本地主機,即端口80,並且還添加了上游服務器,如81,82,83等等。似乎我添加的服務器越多,運行速度越快。在ab測試運行20k個請求和1k併發的情況下,運行3個服務器的結果是~35s,因爲在單個服務器上運行相同的測試結果爲〜120s。我可以假設這是水平可伸縮性工作或這是別的嗎? – orux