使用Node.js服务器,我想知道是否可能并且建议从委派的工作进程而不是主进程发送HTTP响应。这些工作进程可以是Node.js服务器本身,也可以是通过IPC进行通信的Node.js子进程。
我认为群集核心模块https://nodejs.org/api/cluster.html可以做我想做的事情,因为在该模型中,所有工作人员都在监听同一个端口,并且他们代表处理所有请求主过程。我正在寻找的是一个响应所有HTTP请求的主要Node.js进程,可能是进行身份验证并处理某些请求,但也能够将数据密集型或CPU密集型请求委派给工作池。
想象一下,我们有大量数据的GET请求,比如说2-3MB。
我们至少有三种可能的情况:
我特别好奇让#3成为可能。
方案3的简单描述如下:
(为了清楚起见,我不想要一个请求的3个响应,我只是想表明一个工作人员可能代表主要流程发送响应。)
任何人都知道这对Node.js有用吗?如何在其他语言中使用?通常我对Node.js并发模型没有任何问题,但对于某些类型的数据,使用Cluster模块可能不是实现最高并发级别的最佳方法。
我相信这个模型的一个术语是"直接响应",这意味着工作者直接响应请求。也许只需使用集群核心模块https://nodejs.org/api/cluster.html即可。
答案 0 :(得分:0)
我想知道是否有可能并建议从委派的工作进程发送HTTP响应
是的,这是可能的,也可能是最简单的扩展应用服务器的最常用方法。与IPC不同,它可以通过网络跨主机工作。 (如果你想要它,它也将在本地工作......但确保你的应用程序实际上是CPU绑定的。尽管JavaScript本身是单线程的,但IO和一些NPM模块的大多数库都使用线程池。 )
没有理由使用Node.js作为后端服务器之间的服务器负载平衡。 Node.js更适合您的应用程序服务器。对于只是代理HTTP请求的东西,我会使用Nginx或类似的东西。 Nginx可以有效地处理客户端的所有处理,并且可以轻松配置为负载平衡。
答案 1 :(得分:0)
如果您尝试在您的计算机中使用多个处理器(执行Node本身只使用一个进程),只需使用PM2:
https://www.npmjs.com/package/pm2
PM2在您指定给PM2的处理器上启动应用程序的各种实例。如果您的应用程序是无状态的(理想情况下是使用Node),您的应用程序的实例将在每个处理器上运行,PM2将执行路由。
如果我可以口头重新绘制您为方案3发布的图表,PM2将代替" MAIN"和" W"将被您的应用程序取代,无需担心工人和分叉。
我们在生产中使用PM2,它对我们来说效果很好。