所以pm2是一个进程管理器,它允许我在同一台服务器上启动我的应用程序的多个实例。它的工作原理是它将请求负载平衡到所有实例
所以我认为这是对Node.js环境的某种形式的虚假多线程。然后我想到了以下场景:
如果我的Node.js应用实例连接到MongoDB和实例,该怎么办? 0正在执行查找请求,同时实例1是 实际插入同一个集合?
MongoDB不是单线程的,它有一个线程池。这是否意味着MongoDB中存在某种形式的互斥锁可能发生冲突或线程安全?
这只是一个例子。 pm2是否有可能导致这样的问题?
答案 0 :(得分:1)
我在所有节点应用程序中使用PM2。就集群模式而言,它尽可能安全(至少在我的经验中)。但是在PM2中需要注意一些注意事项。
注意配置文件。无论您使用何种格式(JSON YAML等),您都需要了解每个设置的后果。例如,使用max cores等
我强烈建议不要使用watch参数。它似乎放慢了系统的速度,我在内存分配方面遇到了麻烦。
使用PM2 Monit监控服务器上发生的事情,以便您掌握最新信息。
如果您正在处理需要复杂群集的强大生产,那么建议您查看其他昂贵的选项。在一个庞大,多样化且使用频繁的集群系统中,我不会将整个集群操作放在一个系统的手中。
但安全吗?就我的经验而言,是的。
答案 1 :(得分:0)
从MongoDB's docs开始,它支持并发控制。
并发控制允许多个应用程序同时运行而不会导致数据不一致或冲突
如果您需要更新多个文档,可以使用其$ isolated运算符
使用$ isolated运算符,一旦写入操作修改第一个文档,影响多个文档的写入操作可以防止其他进程交错。这可确保在写入操作完成或出错之前,没有客户端看到更改。
请注意,$ isolated不适用于分片群集,但我假设您只使用一个MongoDB数据库实例。