使用Cluster多进程有没有办法共享内存缓存?
发布于 8 年前 作者 zensh 6282 次浏览 最后一次编辑是 5 年前

**jsGen**大量使用了内存缓存,开启Cluster多进程后,各进程进程之间是独立的,这个进程更新了数据缓存,那个进程却没有更新。有什么办法让各个进程共享内存缓存?

6 回复

有办法:不用Cluster

仅提供一个思路:在master进程初始化jsGen,worker进程通过message事件向master进程申请jsGen的api访问。写了个简单的例子,实际操作起来还要适当封装api,序列化参数等等

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
    var info={counter:1}
    for (var i = 0; i < numCPUs; i++) {
        var worker=cluster.fork();
        worker.on('message',function(msg){
            info.counter++;
            this.send(info);
        }.bind(worker));
    }
} else {
    http.createServer(function(req, res) {
        process.send('getInfo');
        process.once('message',function(info){
            res.writeHead(200);
            res.end(info.counter+":hello world\n");
        });
    }).listen(8080);
}

个人是倾向于不用cluster的,非cpu密集运算的应用,多进程对nodejs性能提升甚微;退一步讲,就算要执行cpu密集运算,也可以通过child_process手工fork一个进程来单独执行。

主要是觉得message事件通信读写效率可能也不是很高。

看来要不放弃cluster,要不就是用Redis这样的内存数据库来代替内存缓存了,效率也会低很多。

最好还是Node.js原生实现可在各进程间共享的Buffer

单进程占用太多内存会影响性能吧。 缓存还是使用专门的缓存服务器吧

嗯,看来会要动大手术

redis当缓存?

回到顶部