Node.js 是一個基於 JavaScript 的開發平台,使開發人員能夠使用 JavaScript 建立伺服器端應用程式。 其單執行緒、事件驅動架構是一個關鍵優勢,可以有效管理大量並發請求,而無需多個執行緒或進程的開銷。
儘管 Node.js 有其優點,但它的單執行緒特性也有其限制:
解決方案? Node.js 的主從模式(也稱為叢集模式)。這種分散式系統設計使用一個主進程來監督多個工作進程。 master 管理和監控工人,而工人則處理個人任務。
Node.js 利用 cluster
模組來實作 Master-Worker。此模組簡化了多個子進程的創建,並提供了控制和進程間通訊的機制。 詳細介紹如下:
cluster
模組並辨識目前程序是master還是worker。 cluster.fork()
產生工作進程並附加事件偵聽器來監視其狀態和訊息。 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 作為反向代理和負載平衡器來跨多個 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
.
總之,使用 cluster
模組實現的 Node.js 主從模式提供了一種簡單而強大的方法來構建多進程應用程序,提高效能和可靠性。
Leapcell 是用於 Web 託管、非同步任務和 Redis 的下一代無伺服器平台:
多語言相容性
無限制免費專案部署
卓越的成本效益
簡化的開發人員工作流程
輕鬆的可擴充性和高效能
在文件中了解更多!
在 X 上追蹤我們:@LeapcellHQ
在我們的部落格上閱讀更多
以上是NodeJS 中的主從模式:解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!