領域驅動設計DDD和CQRS架構模式落地實踐
阿新 • • 發佈:2021-08-01
在領域驅動架構中,通常會將查詢和命令操作分開,我們稱之為CQRS(命令查詢職責分離Command Query Responsibility Segregation)。這張圖是來自Martin Fowler大師的文章CQRS(https://www.martinfowler.com/bliki/CQRS.html)。
上圖中讀模組Query Model和寫模組Command Model只是邏輯分離,物理層面還是使用了同一個資料庫。我們可以進一步將資料庫改成讀庫和寫庫做到物理分離,這時候就需要同步讀寫庫。
在領域驅動架構中,通常會將查詢和命令操作分開,我們稱之為CQRS(命令查詢職責分離Command Query Responsibility Segregation)。這張圖是來自Martin Fowler大師的文章CQRS(https://www.martinfowler.com/bliki/CQRS.html)。
上圖中讀模組Query Model和寫模組Command Model只是邏輯分離,物理層面還是使用了同一個資料庫。我們可以進一步將資料庫改成讀庫和寫庫做到物理分離,這時候就需要同步讀寫庫。
如果資料量不大,可以採用簡單的處理方式,物理層面還是使用一個數據庫,查詢的時候部分資料直接從資料庫讀取,部分資料使用到了Elasticsearch,資料同步可以採用兩種方案:
- 當資料庫發生更改時,主動傳送領域事件(Domain Event)通知Elasticsearch進行更新,可以參考《COLA 4.x架構入門和專案實踐》技術專欄中的領域事件入門實踐部分的內容。
- 直接監聽MySQL的binlog更新Elasticsearch。關於Elasticsearch的詳細使用,可以參考《Elasticsearch 7.x從入門到精通》技術專欄。