Node JS 应用程序中是否有任何对象可以锁定?
是否有多个应用程序实例可用,某些功能不应并发运行。如果实例 A 功能完成,它应该解锁该对象/密钥或某些标识符,并且应用程序的 B 实例应该检查其解锁是否应该运行某些功能。
任何对象或密钥都可以用于识别锁定和解锁功能。
如何在具有多个实例的 NodeJS 应用程序中执行此操作。
如上所述,Redis 可能是您的答案,但是,这实际上取决于您可用的资源。还有一些其他不太复杂、当然也不那么强大的可能性也可以达到目的。
-
节点缓存如果你设置正确的话,也可以达到这个目的。它并不像 Redis 那样强大,但好的一面是它不需要太多的设置以及与环境的交互。
于是就有了 Redis 和节点缓存用于内存锁。我应该提到有很多 NPM 包可以进行缓存。取决于您的需求以及缓存的复杂程度。
然而,还有一些不太优雅的方法可以做你想做的事情,尽管不太优雅并不一定更糟糕。
- 您可以使用基于 JSON 文件的系统并在文件上锁定 TTL。lockfile or 正确的锁定文件将完成任务。您可以在需要时从文件中读取信息,在需要时删除,并给它们一个 TTL。基本上是一个到磁盘的缓存系统。
内存系统显然更快。文件系统需要与内存系统一样多的代码规划。
- 还有另一种方法。这可能是最危险的,你必须仔细考虑安全和需求方面的后果。
Node.js 有自己的进程.env。正如大多数人所知,这通过简单地编写来保持所有人都可以使用的系统全局变量process.env.foo
其中 foo 将被声明为全局系统变量。一个包,例如.dotenv允许您通过 .env 文本文件添加到系统变量。因此,如果您放入该文件 sam=mongoDB,那么在您编写的代码中process.env.sam
它将被解释为 mongoDB。可以在此处设置大量系统范围的变量。
那么你可能会问,这有什么好处呢?那么这些是系统范围的变量,并且可以在飞行途中更改。因此,如果您需要锁定变量然后更改它们,这是一种简单的方法。但要小心这里的陷阱。一旦系统出现故障,或者所有进程停止并再次启动,您的环境变量将恢复为 .env 文件中的默认值。
此外,除非您运行的系统在 AWS 或 Azure 等上有些安全,否则我对向全世界开放我的 .env 文件感到不安全。也有一种方法可以解决这个问题。您可以使用哈希来加密所有变量并将哈希放入文件中。当您调用它时,请在实际请求使用完整变量之前进行解密。
- 可能有很多种锁定和解锁的方法,其中最重要的是使用原生 Node.js 结构。结合文件系统事件和...一起Crypto。但这需要对实际的 Node.js 库和结构有更深入的了解。
希望其中一些有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)