多執行緒下聚合的一致性問題
最近遇到點瓶頸,大概描述一下。
架構採用的CQRS,當服務端接收到客戶的命令後,命令處理器處理該命令,在命令處理器中從倉儲中夾在聚合,執行業務,產生事件,然後業務執行完畢,更新到倉儲,這一過程比較標準,沒有任何問題,問題在於:當生成事件之後,有其它多個業務都需要監聽該事件,然後會開啟新的執行緒來非同步處理相應的業務,這時候問題就來了,這幾個非同步的業務也是需要傳送新命令到命令匯流排,然後透過命令處理器進行處理,但同時都會在在各自的執行緒中載入同一個聚合,然後進行修改,執行完成之後更新聚合到倉儲中,當T1執行緒執行完成更新到倉儲之後,T2再一次更新了聚合到倉儲中,T2執行緒的改變就會覆蓋T1的改變,導致T1的業務資料丟失,資料就此不一致了,如果對倉儲加上Lock的話會鎖住整個倉儲,效能上肯定有問題,因為我只想鎖住當前這幾個執行緒操作的聚合,而不是鎖住整個倉儲。說得有點囉嗦,畫個圖就是這樣的:
架構採用的CQRS,當服務端接收到客戶的命令後,命令處理器處理該命令,在命令處理器中從倉儲中夾在聚合,執行業務,產生事件,然後業務執行完畢,更新到倉儲,這一過程比較標準,沒有任何問題,問題在於:當生成事件之後,有其它多個業務都需要監聽該事件,然後會開啟新的執行緒來非同步處理相應的業務,這時候問題就來了,這幾個非同步的業務也是需要傳送新命令到命令匯流排,然後透過命令處理器進行處理,但同時都會在在各自的執行緒中載入同一個聚合,然後進行修改,執行完成之後更新聚合到倉儲中,當T1執行緒執行完成更新到倉儲之後,T2再一次更新了聚合到倉儲中,T2執行緒的改變就會覆蓋T1的改變,導致T1的業務資料丟失,資料就此不一致了,如果對倉儲加上Lock的話會鎖住整個倉儲,效能上肯定有問題,因為我只想鎖住當前這幾個執行緒操作的聚合,而不是鎖住整個倉儲。說得有點囉嗦,畫個圖就是這樣的:
[img index=1]
希望大家給點意見
[該貼被wilsonp於2014-11-16 22:01修改過]
[該貼被wilsonp於2014-11-16 22:42修改過]
相關文章
- 多執行緒問題執行緒
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒
- java多執行緒執行問題Java執行緒
- 多執行緒鎖的問題執行緒
- 多執行緒下HashMap的死迴圈問題執行緒HashMap
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 多執行緒問題解釋執行緒
- 多執行緒相關問題執行緒
- Hibernate 多執行緒問題!執行緒
- 多執行緒-多執行緒常見的面試題執行緒面試題
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 多執行緒引起的效能問題分析執行緒
- seam中使用多執行緒的問題執行緒
- 一個多執行緒的PushbackInputStream問題執行緒
- java多執行緒問題 多核cpu遇上java多執行緒,求解釋Java執行緒
- 多執行緒之8鎖問題執行緒
- 05.java多執行緒問題Java執行緒
- Java多執行緒:資料一致性問題及解決方案Java執行緒
- 【java 多執行緒】多執行緒併發同步問題及解決方法Java執行緒
- 多執行緒下的list執行緒
- BATJ都愛問的多執行緒面試題BAT執行緒面試題
- 多執行緒的安全性問題(三)執行緒
- objective-c 多執行緒注意的問題Object執行緒
- 請教一個多執行緒的問題執行緒
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- HashMap多執行緒併發問題分析HashMap執行緒
- 多執行緒併發常見問題執行緒
- Java 多執行緒面試問題彙總Java執行緒面試
- 小小問題―關於java多執行緒Java執行緒
- 多執行緒下的下載原理執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- 多執行緒面試題執行緒面試題
- 執行緒問題執行緒
- 多執行緒 日誌 和截圖的問題執行緒
- 多執行緒的安全問題及解決方案執行緒
- Spring中多執行緒的使用及問題Spring執行緒