Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?
那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。
Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?
Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?
那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。
Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?
当前回答
你可以在多个核上运行你的node.js应用程序,通过使用集群模块和os模块的组合,可以用来检测你有多少cpu。
例如,假设你有一个服务器模块,它在后端运行简单的http服务器,你想在几个cpu上运行它:
/ /依赖性。 Const server = require('./lib/server');//这是我们的定制服务器模块。 Const cluster = require('cluster'); Const OS = require(' OS '); //如果我们在主线程上,启动fork。 if (cluster.isMaster) { // Fork进程。 对于(设I = 0;I < os.cpus().length;我+ +){ cluster.fork (); } }其他{ //如果我们不在主线程上,启动服务器。 server.init (); }
其他回答
你可以在多个核上运行你的node.js应用程序,通过使用集群模块和os模块的组合,可以用来检测你有多少cpu。
例如,假设你有一个服务器模块,它在后端运行简单的http服务器,你想在几个cpu上运行它:
/ /依赖性。 Const server = require('./lib/server');//这是我们的定制服务器模块。 Const cluster = require('cluster'); Const OS = require(' OS '); //如果我们在主线程上,启动fork。 if (cluster.isMaster) { // Fork进程。 对于(设I = 0;I < os.cpus().length;我+ +){ cluster.fork (); } }其他{ //如果我们不在主线程上,启动服务器。 server.init (); }
也可以将web服务设计为几个独立的服务器,它们侦听unix套接字,这样就可以将数据处理等功能推到单独的进程中。
这类似于大多数脚本/数据库web服务器架构,其中cgi进程处理业务逻辑,然后通过unix套接字将数据推入和拉入数据库。
不同的是,数据处理被写入一个节点web服务器监听端口。
它更复杂,但最终是多核开发的必经之路。为每个web请求使用多个组件的多进程架构。
多节点利用您可能拥有的所有核心。 看看http://github.com/kriszyp/multi-node。
对于更简单的需求,您可以在不同的端口号上启动多个节点副本,并在它们前面放置一个负载均衡器。
可以使用纯TCP负载均衡器(HAProxy)将NodeJS扩展到多个盒子,每个盒子运行一个NodeJS进程。
如果你有一些共同的知识在所有实例之间共享,你可以使用一个中央Redis存储或类似的,然后可以从所有流程实例访问(例如从所有盒子)
Spark2基于Spark,目前已不再维护。集群是它的继承者,它有一些很酷的特性,比如每个CPU核心生成一个工作进程,以及重生死亡的工作进程。