想问一下 K8S/Docker 里的 node 有没有必要利用 cluster 启用多进程

2021-01-14 19:48:31 +08:00
 Duluku

reference: https://juejin.cn/post/6844903775937757192

Node 的单线程也带来了一些问题,比如对 cpu 利用不足,某个未捕获的异常可能会导致整个程序的退出等等。因为 Node 中提供了 cluster 模块,cluster 实现了对 child_process 的封装,通过 fork 方法创建子进程的方式实现了多进程模型。比如我们最常用到的 pm2 就是其中最优秀的代表。

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`主进程 ${process.pid} 正在运行`);
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`工作进程 ${worker.process.pid} 已退出`);
  });
} else {
  // 工作进程可以共享任何 TCP 连接。
  // 在本例子中,共享的是 HTTP 服务器。
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello World');
  }).listen(8000);
  console.log(`工作进程 ${process.pid} 已启动`);
}

985 次点击
所在节点    问与答
4 条回复
Duluku
2021-01-14 19:49:13 +08:00
我的理解是 K8S/Docker 里面应该不要启用多进程吧,应该是 docker 里面只有一个进程。
kaneg
2021-01-14 20:10:09 +08:00
你可以用 k8s 的 pod 多副本
Duluku
2021-01-15 09:55:06 +08:00
@kaneg 那我给这个 pod 分配 1C2G 还是更多会比较好?
kaneg
2021-01-15 23:11:04 +08:00
@Duluku 这要看你的程序本身消耗多少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745014

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX