如何为具有 IO 绑定和 CPU 绑定任务的 Node.js 应用程序应用 clustering/spawing 子进程技术?

How to apply clustering/spawing child process techniques for Node.js application having bouth IO bound and CPU bound tasks?

我正在从事一个 IOT 项目,其中 Node.js 应用程序执行以下任务:

1.使用异步消息库读取消息流(IO绑定)
2. 将消息发送到基于 Node.js 应用程序发送的消息进行机器学习的 Web 服务(IO 绑定仅涉及 API 调用)
3. 从网络服务接收机器学习生成的模式(使用 REST API) 4. 将模式与实时流消息进行比较(CPU 密集,因为模式匹配涉及复杂的算法)。
5. 记录堆栈跟踪(IO 绑定)

一个 node.js 应用程序将被开发为在默认情况下在单线程下将这些功能作为单独的任务 运行。事实上,生成子进程仅对 CPU 密集型任务有用,如何为 node.js 进程点 IO 和 CPU 绑定任务进行集群?我们是否需要对此 node.js 应用程序执行部分集群?

任何人都可以为这个 node.js 应用程序提出有效的体系结构吗?

如果您有任何 CPU 密集型任务,则对所有请求使用集群。

集群进程也在做一些 I/O 密集的事情这一事实不会伤害你,但你会想要集群进程来处理 CPU 密集的事情。因此,只需将您的服务器集群化,让每个集群处理请求的全部负载(I/O 和 CPU 内容)。

简而言之,CPU密集型内容是集群的主要驱动力。如果集群进程也在执行非阻塞 I/O,那也没有什么坏处。事实上,在高负载情况下,聚类到 CPU 可用数量甚至可以帮助 I/O 绑定进程(尽管不如 CPU 密集型进程那么有用) .


另一种方法虽然可能更复杂,但仅对请求处理的 CPU 密集部分使用子进程或新工作线程。在那种情况下,您将创建某种工作队列和一组子进程或工作线程以在队列中执行操作,您的主进程会将任务分配给队列中的每个子进程。使用此方案,您可以准确地决定哪些代码通过工作队列执行,哪些代码保留在主进程中,尽管您现在必须使用某种进程间通信在两者之间进行协调。