我已经构建了一个 node.js 应用程序,它接收传入的请求并将这些请求转发到多个节点(虚拟机)。
确定将每个请求发送到何处的逻辑非常简单,但是当将它与多个 CPU(节点进程)一起使用时,我有时会遇到竞争状况。
基本上,node.js 应用程序会收到具有特定要求的“START”命令(例如:发送到 Linux 节点)。我在一个数组中保留一个节点列表,遍历数组并选择一个符合要求的节点。然后我将该节点标记为不可用,以便其他 START 请求在第一个节点使用它时不会选择同一个节点。
该列表保存在 Redis 中,但是当 2 个 START 请求具有相同的要求时,可能会出现竞争条件,即我的应用程序将相同的节点分配给两个请求,这不是我想要的。
我尝试使用https://github.com/errorception/redis-lock但效果不佳,仍然偶尔会出现问题。
如果有人对如何解决此问题提出建议,将不胜感激!