我想知道什麼是設計這樣一個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幾個星期,我很驚訝我沒有找到顯示這種用例的例子。所以我想知道這是否是一種可接受的解決方案,或者更好的方案?