簡體   English   中英

Node.js CPU 在多個 CPU 內核上負載平衡 Websocket 客戶端

[英]Node.js CPU Load balancing Websocket Client over Multiple CPU Cores

我的 node.js 應用程序當前訂閱了許多 websocket 服務器,這些服務器開始每秒向應用程序推送大量數據。 這個 websocket 客戶端應用程序有幾個事件處理程序,它們在接收 websocket 數據時做一些工作。

然而,Node.js 似乎在任何時候都只使用 1 個 CPU 核心,而其余的核心未被利用。 這是預期的,因為 Node.js 使用單線程事件循環模型。

是否可以在多個 CPU 內核上對傳入的 websocket 數據處理進行負載平衡? 我知道如果您正在運行 websocket 服務器,節點集群pm2集群模式能夠實現負載平衡,但是 websocket 客戶端呢?

從客戶端,我可以想到以下選項:

  1. 創建一些子進程(可能為您擁有的每個 CPU 核心創建一個),然后在這些子進程之間划分您的 webSocket 連接。

  2. 創建 node.js WorkerThreads (可能為您擁有的每個 CPU 內核創建一個),然后在這些 WorkerThreads 之間划分您的 webSocket 連接。

  3. 創建 node.js WorkerThreads (可能為您擁有的每個 CPU 內核創建一個)並創建一個工作隊列,其中來自各種 webSocket 連接的每個傳入數據都被放入工作隊列。 然后,WorkerThreads 是從隊列中定期分派的數據以進行處理。 當他們完成一條數據時,他們會從隊列中獲得下一條數據,依此類推……

如何最好地解決這個問題實際上取決於 CPU 時間主要花在哪里。 如果處理傳入數據的時間最長,那么這些解決方案中的任何一個都將有助於將多個 CPU 應用於該任務。 如果是實際接收傳入數據,那么您可能需要像前兩個選項一樣將傳入的 webSockets 本身移動到新的線程/進程。

如果這是由於數據量導致的系統帶寬問題,那么您可能需要增加網絡連接的帶寬,可能需要涉及多個網絡適配器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM