**jsGen**大量使用了内存缓存,开启Cluster多进程后,各进程进程之间是独立的,这个进程更新了数据缓存,那个进程却没有更新。有什么办法让各个进程共享内存缓存?
有办法:不用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当缓存?
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
有办法:不用Cluster
仅提供一个思路:在master进程初始化jsGen,worker进程通过message事件向master进程申请jsGen的api访问。写了个简单的例子,实际操作起来还要适当封装api,序列化参数等等
个人是倾向于不用cluster的,非cpu密集运算的应用,多进程对nodejs性能提升甚微;退一步讲,就算要执行cpu密集运算,也可以通过child_process手工fork一个进程来单独执行。
主要是觉得message事件通信读写效率可能也不是很高。
看来要不放弃cluster,要不就是用Redis这样的内存数据库来代替内存缓存了,效率也会低很多。
最好还是Node.js原生实现可在各进程间共享的Buffer
单进程占用太多内存会影响性能吧。 缓存还是使用专门的缓存服务器吧
嗯,看来会要动大手术
redis当缓存?