本周MASA Framework 進行了第四次課程直播,課程主題為類目管理的開發,直播中進行了理論講解和實戰演練(CQRS實踐的演示可直達推文底部觀看直播回放) 開始環節我們圍繞三個點介紹CQRS的原理 首先,我們先對之前的事件流概念進行簡單的回顧 事件風暴回顧 - 事件流 接下來到我們本節課的 ...
本周MASA Framework 進行了第四次課程直播,課程主題為類目管理的開發,直播中進行了理論講解和實戰演練(CQRS實踐的演示可直達推文底部觀看直播回放)
開始環節我們圍繞三個點介紹CQRS的原理
首先,我們先對之前的事件流概念進行簡單的回顧
事件風暴回顧 - 事件流
接下來到我們本節課的主題內容
CQRS
命令查詢職責分離
大白話:讀和寫分開
信息來源:https://docs.microsoft.com/zh-cn/azure/architecture/patterns/cqrs
優勢
1.獨立縮放
2.根據讀寫分別優化數據結構3.更輕鬆地確保僅正確的域實體對數據執行寫入4.關註點分離,讀關註讀取性能,寫關註複雜業務邏輯5.物化視圖的讀模型可有效減少複雜的錶鏈接
什麼時候用
1.源於訪問頻次、數據量或者是數據模型數量等因素導致查詢和更新的需求差距逐漸變大
2.最大限度地提高性能
3.控制細粒度的縮放
4.控制不同應用的安全級別
5.降低多開發者協作衝突,事件的粒度可以足夠細
註意
1.命令應基於任務,而不是數據
2.命令可入隊,使用非同步而非同步
3.查詢不包含修改動作和領域知識
4.事件溯源支持重播,比如用於通知讀模型
事件溯源
只追加存儲來記錄對數據採取的完整系列操作
而不是僅存儲域中數據的當前狀態
優勢
1.事件不可變
2.事件有助於領域專家瞭解過程
3.事件只增不改,不需要考慮併發衝突
4.事件存儲有助於監控數據變化
5.事件重播可輕易的對系統狀態進行還原,調試,測試
6.事件可被不同的應用多次,非同步消費
註意
1.事件驅動是非同步的,讀模型會有一定程度的延遲
2.修改事件的唯一方式只能通過補償事件
3.事件順序至關重要,事件存儲有責任保證事件順序完整性
不管是上面講到的CQRS,還是事件溯源,這些都是為事件驅動做準備
事件驅動
事件驅動的小知識點
事件驅動里有一些值得註意的點
事件不等於 命令
1事件不會告訴訂閱者如何做
2.事件只通知某個事件發生了
3.事件是不可變的
4.事件被執行時,可能會產生新的事件並形成事件流
事件標準化
支持過濾/轉換/查詢等
事件其實是需要標準化的,那有沒有標準呢?
那就是CloudEvents
CloudEvents
包含了事件發生的上下文和相關數據,事件代表了已發生的事實,不包含任何目的地相關信息。消息能夠傳達事件內容,從而將事件數據從源頭傳輸到指定的目的地
1.發送的消息符合規範,那麼它就是一個有效的 CloudEvent
2.支持的雲廠商包括微軟,谷歌,阿裡,甲骨文等
那我們來看事件和訂閱者的關係,事件和訂閱者可以是一對多、一對一、多對一,但事實上事件和訂閱者的關係是多對多
事件驅動的使用場景
微服務解耦,跨集群通信
兼顧遺留,系統對接
游走在雲與非雲中
部分 AOP類場景
流計算
Event Bus
簡單來說,Event Bus主要的功能是接收消息、處理消息、轉發消息,作為發佈者和訂閱者中轉站的角色
發佈訂閱模式
發佈者通過調度中心將消息發送給訂閱者。調度中心解決發佈與訂閱者之間的關係,保證消息可以送達訂閱者手中
最常見的是並行執行和順序執行
MASA 事件處理
MASA 是如何進行事件處理的?
MASA 事件處理主要分為兩部分一個是MASA Dispatcher,另一個是MASA DDD
MASA Dispatcher>>
Event Bus>>進程內事件匯流排
Integration Event Bus>>集成事件匯流排(跨進程)
MASA DDD>>Domain Event Bus>>領域事件匯流排 (自動協調進程內事件和集成事件調度)
通過前面的學習,我們已經瞭解了Event Bus 和MASA 事件處理流程,那MASA Event Bus 是怎麼樣的一個事件流程?
MASA Event Bus
發佈者把事件發佈到Even Bus
▼
關係鏈表支持特性Handler中間件分散式事務UoW更多...
▼
發送到訂閱者
本次課程內容到這裡就全部結束,CQRS實戰演示部分可以點擊下方鏈接,觀看直播回放。
.NET現代化應用開發 - CQRS&類目管理代碼剖析_嗶哩嗶哩_bilibili
如果你對我們MASA感興趣,無論是代碼貢獻、使用、提 Issue,歡迎聯繫我們
- WeChat:MasaStackTechOps
- QQ:7424099