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中文网其他相关文章!