我可以控制两个系统,我们称之为proxy
和store
,然后访问第三方系统,我们称之为producer
。
+----------+ +-------+ +-------+
| producer | -> | proxy | -> | store |
+----------+ +-------+ +-------+
生产者通过代理消费这些消息并使用HTTP请求将它们发送到商店,从而生成成为商店中记录的消息。我遇到的并发问题是消息生成得足够快,以至于更新记录的消息可能会在创建记录的消息出现之前到达商店。
我的问题
在发送任何PATCH请求之前,我在代理上使用了一个简单的超时解决了这个问题。它的工作原理,但我知道这是一个有一些真正缺陷的黑客。
我的问题是,我还应该怎么想这个呢?有什么更惯用(或甚至规范)的方法来解决这个问题。我在代理和商店上使用Node,在商店后面使用MySQL。目前(操作词),无法访问像Redis这样的键/值存储。
似乎有意义的解决方案是:(A)实现某种锁定,以及(B)使所有数据库输入成为INSERT ... ON DUPLICATE KEY UPDATE
查询。对于(A),我不确定锁定应该发生在哪里 - 在代理上,还是在商店?对于(B),这似乎打破了HTTP方法的语义。
非常感谢对这些(或完全不同的策略)的任何意见。