在集群模式下使用pm2和node.js安全

所以pm2是一个进程pipe理器,允许我在同一台服务器上启动我的应用程序的多个实例。 它的工作原理是负载均衡请求到所有实例。
所以我认为这是对Node.js环境进行假multithreading的一种forms。 然后我想到了以下情况:

如果我的Node.js应用程序实例连接到MongoDB并且实例0正在执行查找请求,而同时实例1实际上是插入到同一个集合中呢?

MongoDB不是单线程的,它有一个线程池。 这是否意味着在MongoDB中可能存在冲突或线程安全与某种forms的互斥有关?
这只是一个例子。 pm2有可能导致这样的问题吗?

我在所有节点应用程序中使用PM2。 就集群模式而言,它至less是以我的经验来说是安全的。 虽然PM2有一些注意事项需要注意。

  1. 注意你的configuration文件。 无论您使用何种格式(JSON YAML等),您都需要了解每个设置的分支。 例如使用最大的核心等

  2. 我会build议不要使用watch参数。 这似乎减慢了系统,我在内存分配上遇到了麻烦。

  3. 使用PM2 Monit来监视服务器上正在发生的事情,这样你就可以处于最佳状态。

  4. 如果你正在处理一个强大的生产需要复杂的集群,那么最好看看其他昂贵的选项。 在一个大型,多样化和高度使用的集群系统中,我不会把整个集群操作交给一个系统。

但安全? 据我的经验,是的。

从MongoDB的文档来看,它支持并发控制。

并发控制允许多个应用程序并发运行,而不会导致数据不一致或冲突

如果您需要更新多个文档,则可以使用$ isolated操作符

使用$ isolated操作符,一旦写操作修改第一个文档,影响多个文档的写入操作可以防止其他进程交错。 这确保了在写入操作完成或错误消除之前,客户端不会看到更改。

请注意,$孤立不适用于分片群集,但我假设你只使用一个MongoDB数据库实例。