gpt4 book ai didi

具有附加进程的 Node.js 集群

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:38 26 4
gpt4 key购买 nike

我们在多 CPU 盒子上使用 Express 应用程序的集群。效果很好,我们最大限度地利用了 AWS Linux 服务器。

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

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

所以我的问题是:如果我们在后台运行这个单独的 Node 进程,并且运行为每个 CPU 启动一个进程的集群,那么这将如何工作?难道我们不会让两个 Node 进程竞争同一个CPU吗?昨天我们遇到了一些奇怪的行为并崩溃了,没有很多错误消息(上帝我爱 Node ),所以这有点令人担忧。我假设 Linux 只会在使用进程时将其换入换出。但我想知道这是否会有问题,而且我还想知道有人在运行时间较长的进程运行时将其网络 session 交换了几分钟。

明智的做法是重写它以在两个不同的服务器上运行,但 Maya 使用/创建的文件位于服务器的文件系统上,并且我们没有预算来按照我们应该的方式重建。因此,我们现在只能使用这种架构。

任何现在可能出现的问题以及如何避免这些问题的想法将不胜感激。

最佳答案

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

与我有关的部分是你的随机崩溃和你的“循环运行的进程”。如果该进程只是检查文件系统,则可能存在竞争条件,其中 Nodejs 进程竞争处理相同的输入/输出文件。

理论上,每个核心 1 个 Nodejs 进程会很好地工作,并且应该有助于利用所有 CPU 使用率。 Linux 总是交换进程进出,所以这不是问题。您可以为每个核心启动多个 Nodejs,但仍然没有问题。

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

关于具有附加进程的 Node.js 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com