如何跨节点群集共享一个资源

时间:2018-03-28 01:57:25

标签: mysql node.js node-cluster

我正在使用节点cluster模块,每个工作人员都加载数据库连接。

index.js

const cluster = require('cluster');
const database = require('./db.js');
if (cluster.isMaster) {
   cluster.fork();
   cluster.fork();
} else {...}

db.js

const mysql = require('mysql');
const pool = new mysql.pool(config);
module.exports = function(query){
    return pool.query(query);
}

我的理解是,每次生成一个worker时,它都会初始化db.js,这将创建一个新的mysql池/连接。

是否有另一种方法来构建它,以便所有工作者共享相同的mysql池?

1 个答案:

答案 0 :(得分:2)

无法在Node.js worker和master之间共享资源。其中每个都是一个新流程,您所能做的就是通过消息进行沟通(文档here)。

基于Node.js文档:

  

使用child_process.fork()方法生成工作进程,以便它们可以通过IPC与父进行通信并来回传递服务器句柄。

对于每个child_process我们都有:

  

重要的是要记住,衍生的Node.js子进程独立于父进程,但两者之间建立的IPC通信通道除外。每个进程都有自己的内存,带有自己的V8实例。由于需要额外的资源分配,因此不建议生成大量子Node.js进程。

根据您的应用程序体系结构,您可以将资源移动到主服务器,并将工作分发给员工。

相关问题