2017-07-03 67 views
0

我們在windows server 2012上部署了一個簡單的express節點服務器,它只接收3個參數的GET請求。它對這些參數做了一些小的處理,有一個非常簡單的內存節點緩存用於緩存這些參數組合中的一些,與外部許可證服務器的接口爲請求用戶提取許可證並將其設置在cookie中,隨後是,它通過負載平衡器(使用zmq運行)與一些工作人員進行交互,以下載一些大文件(分塊,解壓並提取它們,將它們寫入某些目錄)並將其顯示給用戶。在部署這些文件時,還會啓動對工作人員的其他調用。簡單消息傳遞Nodejs服務器一次只接受4個請求

節點服務器不會與任何數據庫或磁盤進行通信。它只是等待運行在其他機器上的負載平衡器的響應(這些是長時間的操作,通常需要2-3分鐘才能發送響應)。因此,本質上,計算和數據庫交互發生在其他機器上。節點服務器只是一個簡單的消息傳遞/握手服務器,它等待事件處理程序中的響應,啓動其他請求並呈現響應。

我們目前沒有使用'cluster'模塊或nginx。使用裸機節點服務器,是否可以同時接受和處理至少16個請求?諸如這些http://adrianmejia.com/blog/2016/03/23/how-to-scale-a-nodejs-app-based-on-number-of-users/的頁面提到一個簡單的節點服務器一次只能處理2-9個請求。但是,即使我們的裸骨執行,一次也不會超過4個請求。

即使對於這種情況,是使用羣集模塊還是nginx?如何爲幾百個用戶擴展此應用程序?

+1

如果一次只接受4個以上的請求,聽起來好像您的應用程序正在運行某種強加的限制(如連接池沒有連接並等待連接釋放)。你的故事中有太多的移動部分來查明罪魁禍首,但是首先刪除你的請求處理程序的一部分,以查看哪一個可能會導致該塊(另外,鏈接到的博客文章並沒有說明單個節點服務器一次只能處理2-9個請求)。 – robertklep

回答

1

一個Express服務器一次可以處理多於9個請求,特別是如果它不與數據庫交談。

您所指的文章假定每個請求都有一些數據庫訪問權限,並通過節點本身而不是CDN提供靜態資產。所有這些都在1GB RAM的單CPU上進行。這是一個數據庫和Web服務器,都運行在一個內核最小的RAM上。

在這類事情上確實沒有硬數字;你建立它並看看它是如何執行的。如果性能不夠好,請在它之前放置一個反向代理,如nginx或haproxy以進行負載平衡。

但是,根據您的問題,如果您確實遇到了一次只能連接4個連接的瓶頸,那麼您聽起來好像讓這些連接打開時間過長並阻止其他連接。最好讓那些長時間運行的進程被節點拉開,關閉連接,然後讓這些服務器在完成時以某種方式回叫。

+0

是有道理的。但是,我們正在做的是爲幾乎每個請求創建一個zmq req套接字(除非它已被緩存)。並且基本上等待socket.on('message')內的這個套接字上的響應。當你說'關閉連接'並讓工作人員完成後回電,就像火災和遺忘模型一樣,如何使用zmq套接字來實現? – svk

+0

這超出了原始問題的範圍。 – Soviut

相關問題