多執行緒下聚合的一致性問題

wilsonp發表於2014-11-16
最近遇到點瓶頸,大概描述一下。

架構採用的CQRS,當服務端接收到客戶的命令後,命令處理器處理該命令,在命令處理器中從倉儲中夾在聚合,執行業務,產生事件,然後業務執行完畢,更新到倉儲,這一過程比較標準,沒有任何問題,問題在於:當生成事件之後,有其它多個業務都需要監聽該事件,然後會開啟新的執行緒來非同步處理相應的業務,這時候問題就來了,這幾個非同步的業務也是需要傳送新命令到命令匯流排,然後透過命令處理器進行處理,但同時都會在在各自的執行緒中載入同一個聚合,然後進行修改,執行完成之後更新聚合到倉儲中,當T1執行緒執行完成更新到倉儲之後,T2再一次更新了聚合到倉儲中,T2執行緒的改變就會覆蓋T1的改變,導致T1的業務資料丟失,資料就此不一致了,如果對倉儲加上Lock的話會鎖住整個倉儲,效能上肯定有問題,因為我只想鎖住當前這幾個執行緒操作的聚合,而不是鎖住整個倉儲。說得有點囉嗦,畫個圖就是這樣的:

[img index=1]
希望大家給點意見

[該貼被wilsonp於2014-11-16 22:01修改過]

[該貼被wilsonp於2014-11-16 22:42修改過]

相關文章