Node.js群集和其他进程

Node.js群集和其他进程,node.js,Node.js,我们在多cpu机箱上的express应用程序中使用集群。工作正常,我们最大限度地利用了AWS linux服务器 我们继承了一个正在修复的应用程序。这是不寻常的,因为它有两个过程。它有一个Express API部分,用于接收传入的请求。但是处理这些请求的进程可以运行几分钟,因此它被构建为一个单独的后台进程,节点调用python和maya 最初,这两者是紧密耦合的,由上传数据的请求调用python脚本。但这当然是次优的,因为它会让客户端在运行时等待响应,因此它被重写为后台进程,在循环中运行,检查新的

我们在多cpu机箱上的express应用程序中使用集群。工作正常,我们最大限度地利用了AWS linux服务器

我们继承了一个正在修复的应用程序。这是不寻常的,因为它有两个过程。它有一个Express API部分,用于接收传入的请求。但是处理这些请求的进程可以运行几分钟,因此它被构建为一个单独的后台进程,节点调用python和maya

最初,这两者是紧密耦合的,由上传数据的请求调用python脚本。但这当然是次优的,因为它会让客户端在运行时等待响应,因此它被重写为后台进程,在循环中运行,检查新的上传,并按顺序处理

所以我的问题是:如果我们有一个单独的节点进程在后台运行,我们运行集群,为每个CPU启动一个进程,这将如何工作?我们不打算让两个节点进程竞争同一个CPU吗。我们昨天收到了一些奇怪的行为和崩溃,没有很多错误消息,(上帝我爱节点),所以有点担心。我假设Linux只会在使用进程时交换进程。但我想知道这是否会有问题,我还想知道有人在长时间运行的过程中,将web会话交换了几分钟

聪明的做法是将其重写为在两个不同的服务器上运行,但maya使用/创建的文件位于服务器的文件系统上,并且我们没有获得重建所需的预算。所以,我们现在只能使用这种架构


任何现在可能出现的问题以及如何避免这些问题的想法都将受到赞赏。

从总体架构的角度来看,每个核心产生1个节点是一个很好的方法。但是,您有很多相互依赖关系,nodejs进程正在调用maya,这可能会使用多线程(请记住)

我关心的是你的随机崩溃和你的“循环运行的进程”。如果该进程只是检查文件系统,那么可能存在一个竞争条件,即nodejs进程竞争处理相同的输入/输出文件

从理论上讲,每个核心1个nodejs进程将非常有效,应该有助于充分利用您的CPU使用率。Linux总是交换进程,所以这不是一个问题。您可以为每个核心启动多个NodeJ,但仍然没有问题


最后一点要注意的是,请务必注意您的内存使用情况,EC2上的几个linux发行版默认情况下没有启用交换文件,内存不足可能是另一个无声的应用杀手,最好添加一个交换文件,以防您遇到内存问题。

谢谢。循环检查RDS实例中的新记录,选择一条,然后对其进行处理。所以,当没有工作时,它会检查每一秒(使用settimeout等待,然后再次启动自己)当它工作时,它不会这样做。做更多的监控,当python进程启动时,它会消耗CPU,但它是maya,它会渲染复杂的图形,不知道该怎么做。如果我们限制它的资源,它只会花费更长的时间。Maya不是多线程的,因此您应该能够为每个核心运行一个nodejs进程,并且当所有作业都在处理所有核心时,应该使用所有核心。在这种情况下,更好的设置是运行1个nodejs进程,并以这样的方式设置它,即它可以为每个核心生成1个python进程核心。由于nodejs没有使用任何重要的CPU,因此不会出现每个CPU需要多个实例的问题。一个单节点进程可以很容易地生成并跟踪几百个进程(您可能不会启动超过4-8个)。