多核计算机上的Node.js

Node.js看起来很有趣,我必须错过一些东西-Node.js是否仅调整为仅在单个进程和线程上运行?

那么它如何扩展到多核CPU和多CPU服务器?毕竟,使速度尽可能快的单线程服务器非常好,但是对于高负载,我想使用多个CPU。同样,使应用程序更快也是如此-今天看来,方法是使用多个CPU并使任务并行化。

Node.js如何适合这张图片?它的想法是以某种方式分发多个实例还是什么?

猿飞云斯丁2020/03/12 10:32:40

也可以将Web服务设计为几个侦听unix套接字的独立服务器,以便将诸如数据处理之类的功能推入单独的进程中。

这类似于大多数scrpring /数据库Web服务器体系结构,在该体系结构中,cgi进程处理业务逻辑,然后通过unix套接字将数据推入和拉出到数据库。

区别在于数据处理被编写为侦听端口的节点Web服务器。

它更加复杂,但最终还是要进行多核开发。一个针对每个Web请求使用多个组件的多进程体系结构。

卡卡西Mandy2020/03/12 10:32:40

使用纯TCP负载平衡器(HAProxy)在每个运行一个NodeJS进程的多个框前面,可以将NodeJS扩展到多个框。

如果您随后在所有实例之间共享一些常识,则可以使用中央Redis商店或类似商店,然后可以从所有流程实例(例如,从所有包装箱中访问)

阿飞十三2020/03/12 10:32:40

集群模块允许你利用你的机器的所有核心。实际上,您可以仅使用2个命令就可以利用此功能,而无需使用非常流行的流程管理器pm2修改代码

npm i -g pm2
pm2 start app.js -i max
Jim小哥GO2020/03/12 10:32:40

我正在使用Node worker从我的主流程以一种简单的方式运行流程。在我们等待正式发布之时,似乎工作做得很好。

GOLEY前端2020/03/12 10:32:40

Spark2基于现在不再维护的Spark。群集是它的继承者,它具有一些很酷的功能,例如,每个CPU内核产生一个工作进程,并重新产生死亡的工作程序。

LGO西里2020/03/12 10:32:40

这里的新手是LearnBoost的“ Up”

它提供“零宕机时间重新加载”功能,并另外创建多个工作程序(默认情况下为CPU数量,但它是可配置的),以提供最佳性能。

它是新的,但似乎很稳定,在我当前的项目之一中,我正在愉快地使用它。

Sam猪猪2020/03/12 10:32:40

节点的未来版本将允许您派生一个进程并将消息传递给该进程,Ryan表示他想找到一种共享文件处理程序的方法,因此它不是简单的Web Worker实现。

目前还没有一个简单的解决方案,但是还很早,node是我见过的发展最快的开源项目之一,因此希望在不久的将来有很棒的事情。

Itachi达蒙Green2020/03/12 10:32:40

多节点可利用您可能拥有的所有核心。
看看http://github.com/kriszyp/multi-node

为了更简单的需求,您可以在不同端口号上启动节点的多个副本,并在它们前面放置一个负载均衡器。

L木嘢2020/03/12 10:32:40

瑞安·达尔(Ryan Dahl )在去年夏天在Google进行的技术演讲中回答了这个问题简而言之,“只需运行多个节点进程并使用明智的方法进行通信即可,例如sendmsg()样式的IPC或传统的RPC”。

如果您想立即弄脏手,请查看spark2 Forever模块。它使生成多个节点进程变得轻而易举。它负责设置端口共享,因此它们每个都可以接受到同一端口的连接,并且如果要确保进程在终止时重新启动,还可以自动重生。

UPDATE - 10/11/11: Consensus in the node community seems to be that Cluster is now the preferred module for managing multiple node instances per machine. Forever is also worth a look.

Harry逆天2020/03/12 10:32:40

一种方法是在服务器上运行多个node.js实例,然后在它们前面放置一个负载平衡器(最好是像nginx这样的非阻塞式负载平衡器)。