?
本周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
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/511869.html
標籤:.NET技术
