NodeJS Cluster模块基础教程

本文详细介绍了NodeJS的Cluster模块,讲解如何利用Cluster实现多进程,提升服务器性能和负载均衡。内容包括Cluster的基本概念、创建子进程、压力测试、主进程与子进程的通信以及优雅重启。通过实例展示了如何使用Cluster提高HTTP服务器的可用性和性能。
摘要由CSDN通过智能技术生成

本文首发于我的个人博客:https://www.zhutongtong.cn/

Cluster简介

默认情况下,Node.js不会利用所有的CPU,即使机器有多个CPU。一旦这个进程崩掉,那么整个 web 服务就崩掉了。

应用部署到多核服务器时,为了充分利用多核 CPU 资源一般启动多个 NodeJS 进程提供服务,这时就会使用到 NodeJS 内置的 Cluster 模块了。Cluster模块可以创建同时运行的子进程(Worker进程),同时共享同一个端口。每个子进程都有自己的事件循环内存V8实例

NodeJS Cluster是基于Master-Worker模型的,Master负责监控Worker的状态并分配工作任务,Worker则负责执行具体的任务。Master和Worker之间通过IPC(进程间通信)传递消息,进程之间没有共享内存

主进程也做叫Master进程,子进程也叫做Worker进程,下面会混用这两种叫法

HTTP服务器和Cluster

使用NodeJS构建http服务器非常简单,代码如下:

//app.js
const http = require("http");
const pid = process.pid;
http
  .createServer((req, res) => {
    for (let i = 1e7; i > 0; i--) {}
    console.log(`Handling request from ${pid}`);
    res.end(`Hello from ${pid}\n`);
  })
  .listen(8081, () => {
    console.log(`Started ${pid}`);
  });
****

为了模拟一些实际的CPU工作,我们执行了1000万次空循环,启动服务之后,可以使用浏览
器或curl向http://localhost:8080发送请求

curl localhost:8081

返回如下:

Hello from 33720

使用autocannon压测服务器

安装autocannon:

npm i -g autocannon

使用autocannon:

autocannon -c 200 -d 10 http://localhost:8081

上面的命令将在10秒内为服务器发起200个并发连接

运行结果如下:

┌─────────┬────────┬────────┬─────────┬─────────┬───────────┬───────────┬─────────┐
│ Stat    │ 2.5%   │ 50%    │ 97.5%   │ 99%     │ Avg       │ Stdev     │ Max     │
├─────────┼────────┼────────┼─────────┼─────────┼───────────┼───────────┼─────────┤
│ Latency │ 453 ms │ 651 ms │ 1003 ms │ 1829 ms │ 750.95 ms │ 208.08 ms │ 1968 ms │
└─────────┴────────┴────────┴─────────┴─────────┴───────────┴───────────┴─────────┘

3k requests in 10.02s

Latency表示延迟,可以看到平均延迟是750ms,最慢的响应延迟接近2S,在10S服务器一共接受了3000请求

使用Cluster模块进行扩展


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值