我想知道什么是设计这样一个Web服务的方式:避免竞争条件
说我有一台服务器监听请求,它会收到一些重点和检查,如果它的缓存(例如使用一些数据库),如果不是它做了一些处理,则生成答案,将其存储在高速缓存数据库中并将答案返回给客户端。
这似乎工作正常,但如果两个客户端请求相同的不存在的密钥会发生什么?在这种情况下,竞争条件会发生,所以它看起来像
client 1 -> check cache DB -> generate answer -> store in cache -> reply to client
client 2 -> check cache DB -> generate answer -> store in cache -> reply to client
的一种方式,以避免此问题将在DB采用了独特的功能,因此每当产生并写入到数据库的第二个答案,发生一些错误。这很好,但看起来更像是一个补丁,而不是一个真正的解决方案。特别是,想象一个产生答案需要大量处理的情况,那么其他事情会更好。
我能想到的一个选择是使用作业队列,所以无论何时收到一个密钥,密钥要么附加到现有作业,要么将新作业添加到队列中。
我一直在玩node.js几个星期,我很惊讶我没有找到显示这种用例的例子。所以我想知道这是否是一种可接受的解决方案,或者更好的方案?