我們從供應商那裏獲得併發回調到我們的Web應用程序,我們懷疑它會導致我們丟失更新,因爲它們在不同的機器上同時處理。如何並行處理大部分作業,然後序列化一個子集?
當且僅當它們影響相同的用戶記錄時,我們需要將這些調用的處理序列化爲。
我的一位同事提出了AWS Kinesis流,我們使用用戶ID作爲分區鍵。這個想法是,相同的分區鍵將記錄放在同一個分片中。每個分片只由一名工作人員處理,並且不會有併發問題。通過設計,將保證屬於同一用戶的記錄不被並行處理。這個解決方案擴展並解決了這個問題,但它會讓我們至少恢復一次衝刺。
我們正在努力尋找可以更快部署的解決方案。
到目前爲止,我們已經討論了其他的解決方案:
- 只需延遲迴調的處理,有可能通過隨機的時間量。在這種情況下,幾個工人同時爲同一個用戶處理工作仍然是可能的(雖然不太可能)。
- 任何排隊系統都有缺陷,我們要麼限制在一個工人身上,要麼冒着並行處理的風險,或者像(1)中所述的那樣。
我們正在使用MySQL的Rails堆棧,並且偏向於AWS解決方案。
有沒有解決這個問題的方法,比切換到Kinesis會產生更快的結果?