Node.js Nodejs集群性能改进?

Node.js Nodejs集群性能改进?,node.js,Node.js,我在看关于nodejsclustering的视频,在那里你可以产生几个子进程。他说,父集群以循环的方式照顾子集群,给每个子进程一大块时间。为什么这与运行单个线程有什么不同?除非每个孩子都能自己应付,否则我看不出这样做有多大好处。然而,最后他拿出了一些非常好的基准,这让我想知道,如果拥有集群可以大大提高性能,为什么人们还要使用非集群应用程序。这句话:“父集群以循环的方式照顾子集群,给每个子进程一大块时间”不完全正确 每个集群进程都是一个独立的操作系统进程。操作系统负责在进程之间共享CPU,而不是父

我在看关于nodejsclustering的视频,在那里你可以产生几个子进程。他说,父集群以循环的方式照顾子集群,给每个子进程一大块时间。为什么这与运行单个线程有什么不同?除非每个孩子都能自己应付,否则我看不出这样做有多大好处。然而,最后他拿出了一些非常好的基准,这让我想知道,如果拥有集群可以大大提高性能,为什么人们还要使用非集群应用程序。

这句话:“父集群以循环的方式照顾子集群,给每个子进程一大块时间”不完全正确

每个集群进程都是一个独立的操作系统进程。操作系统负责在进程之间共享CPU,而不是父进程。父进程接受每个传入的http请求,并将它们拆分到子进程中,但这是父进程参与的程度

如果服务器硬件中只有一个CPU核心(现在通常不是这种情况,除非您的托管计划只允许您访问一个CPU核心),那么该CPU核心将在所有活动并希望运行的进程/线程之间共享

如果有多个CPU内核,那么可以将各个进程分配给不同的内核,这样您的进程就可以真正并行运行。这就是nodejs集群的最大优势所在。然后,您将获得多个真正并行运行的请求,而不是像单个nodejs进程那样在单个线程中运行

然而,最后他拿出了一些非常好的基准测试,这让我想知道,如果拥有集群可以大大提高性能,为什么人们还要使用非集群应用程序

集群增加了一定程度的复杂性。例如,如果您的服务器进程内存中保存了所有传入请求都需要访问的任何服务器端状态,那么这将不适用于群集进程,因为所有群集进程都不能访问相同的内存(它们各自有自己的内存)。在这种情况下,您通常必须删除任何服务器端状态,或者将所有服务器端状态移动到所有集群进程都可以访问的自己的进程(通常是数据库)。这是非常可行的,但会增加额外的复杂性,并有其自身的性能影响

此外,集群会占用服务器上更多的内存。它还可能需要更多的监视和日志记录,以确保所有进程都正常运行。

这句话:“父集群以循环方式处理子集群,为每个子进程分配大量时间”并不完全正确

每个集群进程都是一个独立的操作系统进程。操作系统负责在进程之间共享CPU,而不是父进程。父进程接受每个传入的http请求,并将它们拆分到子进程中,但这是父进程参与的程度

如果服务器硬件中只有一个CPU核心(现在通常不是这种情况,除非您的托管计划只允许您访问一个CPU核心),那么该CPU核心将在所有活动并希望运行的进程/线程之间共享

如果有多个CPU内核,那么可以将各个进程分配给不同的内核,这样您的进程就可以真正并行运行。这就是nodejs集群的最大优势所在。然后,您将获得多个真正并行运行的请求,而不是像单个nodejs进程那样在单个线程中运行

然而,最后他拿出了一些非常好的基准测试,这让我想知道,如果拥有集群可以大大提高性能,为什么人们还要使用非集群应用程序

集群增加了一定程度的复杂性。例如,如果您的服务器进程内存中保存了所有传入请求都需要访问的任何服务器端状态,那么这将不适用于群集进程,因为所有群集进程都不能访问相同的内存(它们各自有自己的内存)。在这种情况下,您通常必须删除任何服务器端状态,或者将所有服务器端状态移动到所有集群进程都可以访问的自己的进程(通常是数据库)。这是非常可行的,但会增加额外的复杂性,并有其自身的性能影响


此外,集群会占用服务器上更多的内存。它可能还需要更多的监控和日志记录,以确保所有进程都正常运行。

这与现在存在的情况基本无关。@tadman-这不完全正确。首先,您链接到浏览器中存在于ly上的webWorkers。Nodejs,现在有哪些是不同的。其次,如果您想使用nodejs中的内置集群模块来相当轻松地提高服务器的可伸缩性,那么它将使用子进程,而不是工作线程。当然,您可以编写自己使用工作线程的方法来提高可伸缩性,但这与这个问题所问的完全不同。@jfriend00有针对节点的WebWorker实现,另外,正如您所指出的,还有WorkerThreads替代方案。我提到这一点的唯一原因是网络工作者更加标准化,加上视频是从2017年开始的,而且已经发生了很多变化。集群并不是多线程的唯一游戏。@tadman-这两个问题都与所提出的问题无关,因为没有内置的集群机制可以相当自动地增加使用WorkerThreads的http服务器的吞吐量。是的,如果你想,你可以自己编程,但是。。。那不是什么