只是審查我正在計劃,看看它是否可以工作。cqrs沒有事件採購和LMAX風格單線程設計審查
我正在使用RDBMS並計劃在沒有事件源的情況下使用CQRS。我認爲事件採購對於第一次嘗試有點高級,我不得不使用RDBMS。
基於任務的UI由許多命令組成,其中大多數命令不需要響應。
架構基本上是
/---- RDBMS (EF)
IO ops \
| \
Single threaded Domains Fascade(DTO) Queries
| /
Event/Command Dispatcher/
\ /
MVC client
單線程域不相互交談,他們通過干擾(基本上環形緩衝器)聊到了外面的世界。
命令調度程序將外部事件和命令複製到磁盤並在崩潰時重新加載它們。完成顯式標記(由IO Ops)。
命令基本上會被持久化(使用命令的事務範圍),IO Ops層將獲取所有事件並處理它們並在1個事務中標記命令完成。 (請注意,該命令通過日誌服務持續存在,而不是域,但它與IO opps進行通信,使其與命令的工作匹配)。如果命令失敗並且其標記持續(不是全部),則可以重播。 (它只在命令有命令並且已收到DoTransation消息時才持續執行命令。)
命令調度程序通過disruptor連接到域。
問題
我應該加載整個域到內存?(約300 - 500 MEG)和該運行顯然域只會數據庫更新後更新。
可以將外部事件重新混合到命令調度程序中(所以它會被單線程處理並處理)。例如事件變成命令。
看起來很簡單的代碼域和用戶代碼(我得到一個很好的豐富的域),至少從我正在工作的原型。是嗎?
當域做IO他們將消息發送到一個破壞者,並可以
- 指定命令GUID和命令被匹配了一個 交易
- 承擔完成(拍攝和祈禱)
- 提供回調命令,將其傳遞給命令調度程序,然後再出現在域中。創建IO消息後,系統可以繼續使用當前命令或完成當前命令並接收下一個命令。
這夠好嗎?
系統運行在一個進程和共享內存中,但域資源只能由自己和1個線程訪問。這個可以嗎?
這是一個實驗性的微米網格。有什麼想法嗎?