如何跨节点集群共享一个资源
Posted
技术标签:
【中文标题】如何跨节点集群共享一个资源【英文标题】:How can I share one resource across Node clusters 【发布时间】:2018-09-06 13:43:43 【问题描述】:我正在使用节点cluster
模块,每个worker加载一个数据库连接。
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】:Node.js worker 和 master 之间不能共享资源。其中每一个都是一个新流程,您所能做的就是通过消息进行交流(文档here)。
基于 Node.js 文档:
工作进程是使用 child_process.fork() 方法生成的,因此它们可以通过 IPC 与父进程通信并来回传递服务器句柄。
对于每个child_process
,我们有:
重要的是要记住,生成的 Node.js 子进程独立于父进程,但两者之间建立的 IPC 通信通道除外。每个进程都有自己的内存,有自己的 V8 实例。由于需要额外的资源分配,因此不建议生成大量子 Node.js 进程。
根据您的应用程序架构,您可能能够将要共享的资源移动到主服务器,然后将工作分配给工作人员。
【讨论】:
以上是关于如何跨节点集群共享一个资源的主要内容,如果未能解决你的问题,请参考以下文章