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