我们正在深入研究Node.js架构,以实现完全理解,如何扩展我们的应用程序 . 清除解决方案是群集使用情况https://nodejs.org/api/cluster.html . 一切似乎都很好,除了 Worker 管理描述:
但是,Node.js不会自动管理您的工作人员数量 . 您有责任根据应用程序的需要管理工作池 .
我在寻找,如何真正管理 Worker ,但大多数解决方案说:
开始这么多 Worker ,因为你有核心 .
但我想根据服务器上的当前负载动态扩大或缩小我的工作人员数量 . 因此,如果服务器上有负载并且队列越来越长,我想开始下一个工作 . 换句话说,当没有那么多负载时,我想关闭 Worker (并留下f.e.至少2个) .
理想的地方,将是我的主进程队列,以及新请求进入主进程时的事件 . 在这个地方,我们可以决定是否需要下一个 Worker .
您是否有从群集中的主线程管理工作人员的任何解决方案或经验?动态启动和杀死它们?
问候,
拉德克
2 回答
以下代码将帮助您了解根据请求创建群集 .
该程序将在每10个请求中生成新的集群 .
注意:您需要打开http://localhost:8000/并刷新页面以增加请求 .
要手动管理您的工作人员,您需要一个消息传递层来促进进程间通信 . 通过IPC主服务器和工作服务器可以有效地进行通信,默认情况下和架构立场这一行为已经在流程模块本机中实现 . 但是我发现本机实现不够灵活或不够健壮,无法处理由于网络请求引起的水平扩展 .
一个明显的解决方案Redis作为消息代理来促进这种主从通信方法 . 然而,这个解决方案也是因为它的故障,即上下文延迟,直接与命令和回复相关联 .
进一步的研究使我成为了RabbitMQ,非常适合在多个工作者之间分配耗时的任务 . 工作队列(又称:任务队列)背后的主要思想是避免立即执行资源密集型任务,并且必须等待它完成 . 相反,我们安排任务稍后完成 . 我们将任务封装为消息并将其发送到队列 . 在后台运行的工作进程将弹出任务并最终执行作业 . 当您运行许多工作程序时,它们之间将共享任务 .
要实现一个健壮的服务器,请阅读此链接,它可能会提供一些见解 . Link