0

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

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

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

谁能建议这个 node.js 应用程序的有效架构?

4

1 回答 1

1

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

集群进程也在执行一些 I/O 密集型工作这一事实不会对您造成伤害,但您会希望集群进程用于 CPU 密集型工作。因此,只需让您的服务器集群并让每个集群处理请求的全部负载(I/O 和 CPU 的东西)。

简而言之,CPU 密集型的东西是集群的主要驱动力。如果集群进程也在执行非阻塞 I/O,这不会造成任何损害。事实上,集群最多可用的 CPU 数量甚至可以在高负载情况下帮助 I/O 绑定进程(尽管没有 CPU 密集型进程的帮助那么多)。


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

于 2016-08-21T21:20:50.603 回答