如何处理RESTful系统中新创建的记录的竞争条件

时间:2016-07-14 14:06:17

标签: mysql node.js concurrency race-condition

我可以控制两个系统,我们称之为proxystore,然后访问第三方系统,我们称之为producer

+----------+    +-------+    +-------+
| producer | -> | proxy | -> | store |
+----------+    +-------+    +-------+

生产者通过代理消费这些消息并使用HTTP请求将它们发送到商店,从而生成成为商店中记录的消息。我遇到的并发问题是消息生成得足够快,以至于更新记录的消息可能会在创建记录的消息出现之前到达商店。

我的问题

在发送任何PATCH请求之前,我在代理上使用了一个简单的超时解决了这个问题。它的工作原理,但我知道这是一个有一些真正缺陷的黑客。

我的问题是,我还应该怎么想这个呢?有什么更惯用(或甚至规范)的方法来解决这个问题。我在代理和商店上使用Node,在商店后面使用MySQL。目前(操作词),无法访问像Redis这样的键/值存储。

似乎有意义的解决方案是:(A)实现某种锁定,以及(B)使所有数据库输入成为INSERT ... ON DUPLICATE KEY UPDATE查询。对于(A),我不确定锁定应该发生在哪里 - 在代理上,还是在商店?对于(B),这似乎打破了HTTP方法的语义。

非常感谢对这些(或完全不同的策略)的任何意见。

0 个答案:

没有答案