命令查詢責任分離/事件採購體系結構非常適合我開始的一個項目,該項目每年將涉及與人們的健康保險保險有關的每年約10億筆金融交易。主要優勢包括審計歷史記錄,可擴展性,跨多個團隊實施異步兼容的UI,從讀取數據庫中分離這些事務,通過事件隊列緩解向間歇性連接的現場辦公室傳輸狀態,並應對顯着的業務邏輯變化整個系統的生命週期。CQRS體系結構優化和變化
然而,有些地方CQRS/ES將會出現問題,例如爲1億人分配數字ID,最終一致性不可接受的用戶安全性。該系統還有一些CRUD性質的區域,不受CQRS/ES的好處。最後,我們將在不同的團隊和公司中擁有大量開發人員,並且最好能有不需要CQRS/ES能力的領域。是否有可能採用混合方法,其中一些區域不是事件源?我們是否可以同時讀取和寫入兩邊的相關表?
CQRS架構的聚合實體是否簡化了快照緩存失效?任何更新可能被緩存的集合實體的事件都可能被invalidator監聽,並且給定的集合實體比關係實體更粗糙,我們可以區分寫入事件,這個問題是否可以解決?
我期待着每年有大約十億次的活動,需要跟蹤大約四年的歷史。我們可以快照並存檔較早的事件嗎?
是否有度事件採購?例如,一個在線商店系統AddLineItem
事件可能包含每個單元的訂單項價格,但依賴於讀取面來在發票上拉取和渲染產品名稱。另一個在線商店可能會在事件數據中包含該名稱。你如何選擇在活動中包含什麼?在健康保險方面,它可能會限制「如果」分析可以運行 - 如果我們沒有包括被保險人的年齡,我們就不可能模擬需要的政策嗎?
有沒有一種有趣的方式來模擬事件的事件?例如,管理員進入系統後,產品的價格將在某個日期發生變化。我想快照將是一個價格時間表。我們可以添加一個後期的ProductPriceChanged事件嗎?運行「假設」情景時,我們是否可以僞造這些事件? (爲了避免版本號和併發檢測問題,這樣的聚合將不得不很少改變。)通常聲稱CQRS/ES使系統更容易適應未來的業務流程變化。我理解這樣的觀點:命令以無所不在的語言列出事件使得討論和重新配置它們變得更容易,事件採購消除了RDBMS模型的一些僵化。但內會不會發生任何變化,將會打破事件的重播?隨着系統的變化,你會不會得到許多版本化的事件?例如,在網上商店通過更改標準來評估客戶是否爲金卡持有人?你可以拍攝一切嗎?你將如何對這些變化進行後期處理?同樣,你必須小心依賴注入,注入的所有依賴都不會影響業務邏輯,否則你會破壞重放?
任何想法爲什麼它與.NET世界相關聯,在行業的其他領域較少受歡迎程度?
巨大即使只是閱讀也要感謝。
'這聽起來像個壞主意' - 你會如何建議我堅持非ES聚合實體? 「無論如何,」說得好! 「將任何生命即將結束的聚合體的歷史歸檔 - 就不夠了,因爲對於我們來說,在某人死後有4年的生命結束。 「國家需要...保持業務不變」 - 我可能會想念這個問題如何回答這個問題 - 如果業務不變是訂單項,那麼這包括產品名稱還是價格? – Chris
錯誤拼寫 - 我故意將事件從PriceChangeScheduled更改爲**後期** PriceChanged,僅在達到該日期後纔會用於重播。 「由系統做出的決定是由事件記錄的 - 」你在我的理解中填補了一個空白,我的意思是如果一個聚合的業務邏輯改變了,但過去的事件仍然需要以舊的方式處理。我會重新閱讀你的答案(再次)並閱讀楊的書。非常感謝,非常感謝。 – Chris