Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?
那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。
Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?
Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?
那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。
Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?
当前回答
也可以将web服务设计为几个独立的服务器,它们侦听unix套接字,这样就可以将数据处理等功能推到单独的进程中。
这类似于大多数脚本/数据库web服务器架构,其中cgi进程处理业务逻辑,然后通过unix套接字将数据推入和拉入数据库。
不同的是,数据处理被写入一个节点web服务器监听端口。
它更复杂,但最终是多核开发的必经之路。为每个web请求使用多个组件的多进程架构。
其他回答
也可以将web服务设计为几个独立的服务器,它们侦听unix套接字,这样就可以将数据处理等功能推到单独的进程中。
这类似于大多数脚本/数据库web服务器架构,其中cgi进程处理业务逻辑,然后通过unix套接字将数据推入和拉入数据库。
不同的是,数据处理被写入一个节点web服务器监听端口。
它更复杂,但最终是多核开发的必经之路。为每个web请求使用多个组件的多进程架构。
这个领域的新成员是LearnBoost的“Up”。
它提供“零停机重新加载”,并额外创建多个worker(默认为cpu数量,但可配置),以提供所有world中的最佳服务。
它是新的,但似乎相当稳定,我正在我目前的一个项目中愉快地使用它。
集群模块允许您利用机器的所有核心。事实上,您可以使用非常流行的进程管理器pm2,在不修改代码的情况下,仅用两个命令就可以利用这一点。
npm i -g pm2
pm2 start app.js -i max
您可以使用集群模块。检查这个。
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
}
node的未来版本将允许你fork一个进程并将消息传递给它,Ryan表示他想要找到一些共享文件处理程序的方法,所以它不会是一个直接的Web Worker实现。
目前还没有一个简单的解决方案,但它仍然处于早期阶段,node是我见过的移动最快的开源项目之一,所以期待在不久的将来会有一些很棒的东西。