我使用PM2集群模块为我的每个CPU内核生成我的Node.js应用程序的实例。同时,对于cpu繁重的操作(如加密),我使用Piscina (Node.js的工作池库模块,它基于Node.js工作线程模块)。
基本上,我创建了一个带有一些工作线程的Piscina实例,并在每次访问特定API时调用它进行加密操作。
在内存使用方面,这可能是低效的,因为我为我的每个应用程序实例创建一个工作池?同时使用工作线程和Node.js集群模块的最有效方法是什么?
简短的回答是肯定的,如果您使用PM2或Cluster模块,则存在无效的内存使用,因为它们使用进程分叉而不是利用多线程。
在你的情况下,问题是工作池是在应用程序实例中创建的,这可能会导致内存使用的一些无效(我认为如果池配置充分考虑到应用程序实例,它可能可以忽略不计)。你可以创建另一个单独的节点简单应用程序,只是为了处理像微服务这样的加密任务,并在运行应用程序集群之前启动它。集群工作器可以通过一些IPC消息协议与它通信,或者最好使用GRPC/REST。