如何在Node Js应用程序的多个实例之间同步对象

Sha*_*han 6 concurrency synchronization locking node.js

是否可以锁定Node JS应用程序中的任何对象.

应用程序是否有多个实例可用,某些功能不应该并发运行.如果实例A函数完成,它应解锁该对象/密钥或某个标识符和应用程序的B实例应检查其解锁是否应该运行某些功能.

任何对象或密钥都可用于识别锁定和解锁功能.

如何在具有多个实例的NodeJS应用程序中执行此操作.

小智 6

如上所述,Redis可能是您的答案,但这实际上取决于您可用的资源。还有其他一些不太复杂但肯定不那么强大的可能性也可以解决问题。

  1. 如果设置正确,node-cache也可以解决问题。它远没有Redis强大,但从好的方面来说,它不需要太多的设置以及与环境的交互。

因此,存在用于内存锁定的Redis和节点缓存。我应该提到有很多NPM软件包可以进行缓存。取决于您的需求以及缓存的复杂程度。

但是,可以用更少的优雅方式来做自己想要的事情,尽管不够优雅不一定意味着更糟。

  1. 您可以使用基于JSON文件的系统,并为TTL锁定文件。锁文件适当的锁文件将完成任务。您可以在需要时从文件中读取信息,在需要时删除文件,并给它们提供TTL。基本上是一个缓存系统到磁盘。

内存系统显然更快。文件系统需要与存储系统一样多的代码计划。

  1. 还有另一种方式。这可能是最危险的一种,您将不得不在安全性和需求方面认真思考后果。

Node.js有其自己的process.env。最众所周知的是,只需编写process.env.foofoo将被声明为全局系统变量的位置,即可使系统全局变量可供所有人使用。诸如.dotenv之类的程序包使您可以通过.env文本文件将其添加到系统变量中。因此,如果将文件sam = mongoDB放入,则在编写代码的地方process.env.sam将其解释为mongoDB。可以在此处设置大量系统范围的变量。

您可能会问,这样做有什么好处?这些是系统范围的变量,可以在运行中进行更改。因此,如果您需要锁定变量然后进行更改,这是一种简单的方法。当心这里的陷阱。一旦系统崩溃或所有进程停止并再次启动,您的环境变量将恢复为.env文件中的默认值。

此外,除非您运行的系统在AWS或Azure等上相对安全,否则我对向所有人开放.env文件不会感到安全。也有一种解决方法。您可以使用哈希来加密所有变量,并将哈希放入文件中。调用它时,请在实际请求使用full变量之前进行解密。

  1. 锁定和解锁的方式可能有很多,其中最重要的是使用本机的Node.js结构。将文件系统事件Crypto结合在一起。但这需要对实际的Node.js库和结构有更深入的了解。

希望其中的一些帮助。