首頁 > web前端 > js教程 > NodeJS 中的主從模式:解釋

NodeJS 中的主從模式:解釋

Barbara Streisand
發布: 2025-01-20 10:33:40
原創
608 人瀏覽過

Master-Worker Pattern in NodeJS: Explained

Node.js 是一個基於 JavaScript 的開發平台,使開發人員能夠使用 JavaScript 建立伺服器端應用程式。 其單執行緒、事件驅動架構是一個關鍵優勢,可以有效管理大量並發請求,而無需多個執行緒或進程的開銷。

為什麼要採用主工模式?

儘管 Node.js 有其優點,但它的單執行緒特性也有其限制:

  • CPU 密集型操作: 影像處理或加密函數等任務可能會阻塞單一線程,從而影響整體效能。
  • 強大的錯誤處理:由於錯誤或異常而導致的單執行緒崩潰會導致整個應用程式停止。
  • 多核心效率低:單執行緒模型未充分利用多核心處理器。

解決方案? Node.js 的主從模式(也稱為叢集模式)。這種分散式系統設計使用一個主進程來監督多個工作進程。 master 管理和監控工人,而工人則處理個人任務。

實現Master-Worker模式

Node.js 利用 cluster 模組來實作 Master-Worker。此模組簡化了多個子進程的創建,並提供了控制和進程間通訊的機制。 詳細介紹如下:

  1. 導入cluster模組並辨識目前程序是master還是worker。
  2. 如果是主進程,請使用 cluster.fork() 產生工作進程並附加事件偵聽器來監視其狀態和訊息。
  3. Worker進程執行特定任務並透過process.send()與master進行通訊。

一個簡單的例子

這個基本範例示範了 cluster 模組:

<code class="language-javascript">const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Spawn workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Workers share a TCP connection (e.g., HTTP server).
  http
    .createServer((req, res) => {
      res.writeHead(200);
      res.end('Hello from Worker!');
    })
    .listen(8000);

  console.log(`Worker ${process.pid} started`);
}</code>
登入後複製

主程序決定它是否為主程序(使用cluster.isMaster)。 如果是這樣,它會建立等於 CPU 核心數的工作執行緒。每個worker都是一個獨立的進程,有自己的記憶體和V8實例。 Worker 建立一個 HTTP 伺服器並監聽請求。 exit 事件處理工作進程崩潰,使主進程能夠重新啟動它們。

進階應用:Nginx 負載平衡

使用 Nginx 作為反向代理和負載平衡器來跨多個 Node.js 進程分發請求,從而增強可擴展性。

Nginx 設定範例:

<code class="language-nginx">http {
    upstream node_cluster {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        # ... more Node.js processes
    }

    server {
        listen 80;

        location / {
            proxy_pass http://node_cluster;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}</code>
登入後複製

Nginx 在 node_cluster.

中列出的 Node.js 進程之間均勻分配請求

Master-Worker 模式的優點

  • 負載分佈:多個 Node.js 進程分發傳入請求,提高吞吐量。
  • 容錯性和可用性:worker 崩潰不會影響其他人;主人重新啟動它。
  • CPU 密集型任務處理: 多個工作進程處理 CPU 密集型操作,防止主執行緒阻塞。

需要考慮的要點

  • 共用狀態: Worker 是獨立的;狀態共用需要資料庫等外部解決方案。

總之,使用 cluster 模組實現的 Node.js 主從模式提供了一種簡單而強大的方法來構建多進程應用程序,提高效能和可靠性。


Leapcell:您的首要 Node.js 託管解決方案

Master-Worker Pattern in NodeJS: Explained

Leapcell 是用於 Web 託管、非同步任務和 Redis 的下一代無伺服器平台:

多語言相容性

  • 使用 Node.js、Python、Go 或 Rust 進行開發。

無限制免費專案部署

  • 只需支付使用費;沒有要求,不收費。

卓越的成本效益

  • 即用即付,無閒置費用。
  • 範例:25 美元可處理 694 萬個請求,平均回應時間為 60 毫秒。

簡化的開發人員工作流程

  • 使用者友善的介面,易於設定。
  • 自動化 CI/CD 管道和 GitOps 整合。
  • 即時監控和記錄。

輕鬆的可擴充性和高效能

  • 自動縮放以實現高並發。
  • 零營運開銷。

在文件中了解更多!

Master-Worker Pattern in NodeJS: Explained

在 X 上追蹤我們:@LeapcellHQ


在我們的部落格上閱讀更多

以上是NodeJS 中的主從模式:解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板