为什么要实践 A+ES & CQRS ?
Wow : 基于 DDD & EventSourcing 的現代響應式 CQRS 架構微服務開發框架
中文文檔
領域驅動 | 事件驅動 | 測試驅動 | 聲明式設計 | 響應式編程 | 命令查詢職責分離 | 事件溯源
簡介
Wow 是一個基于領域驅動設計和事件溯源的現代響應式 CQRS 微服務開發框架,歷經多年生產環境驗證。
旨在幫助開發者構建現代化的、高性能且易于維護的微服務應用程序,充分發揮領域驅動設計和事件溯源等模式優勢的同時降低應用的復雜性以及實踐成本。
值得一提的是,領域驅動設計和事件溯源并非微服務架構的專屬,Wow 框架不僅適用于微服務開發,同樣也可用于構建基于領域驅動設計的單體應用程序。
快速開始
使用 Wow 項目模板快速創建基于 Wow 框架的 DDD 項目
特性概覽
架構圖
背景
隨著業務的發展和復雜性的增加,傳統的架構和開發方式逐漸顯露出瓶頸。領域驅動設計和事件溯源等理念在提高系統設計的靈活性和可維護性方面表現出色,但在實踐中常常需要面對復雜性和學習曲線的挑戰。
Wow 框架的目標是以簡單易用的方式將領域驅動設計和事件溯源等理念融入到微服務應用開發中,降低開發者的學習成本,提高開發效率。
通過提供現代響應式的 CQRS 架構和相關組件,Wow 框架旨在讓開發者更專注于業務邏輯的實現,而不必過多關心底層技術細節。
經過多年的實踐和不斷的演進,Wow 框架在生產環境中得到了驗證,積累了豐富的經驗。這些經驗和反饋不僅豐富了框架的功能和性能,也為持續的改進和優化提供了寶貴的指導。
對于開發者而言,Wow 框架意味著什么?
我曾告誡我的團隊:如果我們過于依賴數據驅動設計而忽視領域驅動設計,我們最終將淪為CRUD工程師。
CRUD工程師的競爭力和可替代性可想而知,這或許是為何會有 35 歲效應,企業顯然更傾向于招募沒有太多生活羈絆、更加廉價的 25 歲CRUD工程師。
業務價值
軟件系統的核心價值體現在業務價值上,研發人員不應只關注技術實現上,而是應該更多地關注業務價值的實現。
這其中的好處顯而易見,當你開發完一個業務系統之后,你將變成一個業務專家,甚至比跟你合作的領域專家還要專業,因為你需要洞察業務細節。
使用 Wow 框架,意味著你將關注點放在圍繞領域模型設計上,與業務專家一起探索業務領域,而不是關注于技術實現上。
你僅需編寫領域模型,即可完成服務開發,Wow 框架自動為你準備好 OpenAPI 接口。
在《實現領域驅動設計》一書中,作者 Vaughn Vernon 提到:核心域才值得投入精力進行領域驅動設計,
但如果你使用 Wow 框架,你將發現,因為低廉開發成本、快速的開發效率,即使是次要的支撐子域也值得 DDD。
性能與伸縮性
隨著業務的發展,你需要開始思考系統的性能和伸縮性問題。
在傳統架構中,這牽扯到數據庫關系模式、分片規則等復雜問題,同時你還需要處理因數據庫分片導致的跨分片事務問題。
這時,你不得不修改你的業務代碼,以適應水平拆分后的數據庫架構。
然而,如果你選擇使用 Wow 框架,你將不再需要過多關注數據庫關系模式、分片規則等問題。你的業務代碼無需變更,系統能夠輕松實現水平伸縮。
你可以在這里了解更多關于 Wow 框架的性能。
讀寫分離與同步延遲
讀寫分離是一種極為普遍的性能優化架構模式。
然而,同步延遲問題常伴隨而來,事務執行成功后寫庫落庫成功,但讀庫同步延遲,用戶刷新頁面后無法獲取最新數據,從而對用戶的體驗產生影響。例如:
- 用戶發起下單事務,寫庫執行成功,但由于某種原因,讀庫同步延遲,用戶刷新頁面后發現訂單未成功創建。
- 商家編輯完商品后,同步到 Elasticsearch 索引庫,但由于某種原因,同步延遲,導致商家刷新頁面后搜索不到該商品。
通常,大家采用最簡便的方法,等待1秒后刷新頁面。
雖然這種方式能解決大多數數據同步延遲的問題,但效率不夠高。
因為大多數情況下,同步在100毫秒內就已完成,剩余的900毫秒成了浪費。
然而,有時1秒無法完成同步,這就導致用戶獲取的數據變得無效。
使用 Wow 框架,你可以通過等待 PROJECTED 信號完成,然后再將結果返回給用戶,以更為優雅和高效的方式處理數據同步延遲的問題。
工程質量
單元測試是確保代碼質量且符合預期業務需求的重要手段,但在傳統架構中,單元測試往往是一項相當困難的任務,因為你需要考慮數據庫連接、事務管理、數據清理等問題。
使用 Wow 框架,你將會發現基于 Given->When->Expect 模式的測試套件,使得單元測試變得異常簡單。
你只需關注領域模型是否符合預期,而無需為數據庫連接等問題煩惱。
在實際應用中,我們將領域模型的單元測試覆蓋率下限閾值設置為 85%,也是可以輕松實現的。
在沒有刻意要求的情況下,開發人員甚至自覺地將覆蓋率提升至 95%。
因此,每次提交代碼都變得輕松自在,因為你確信你的代碼經過了充分的測試,并且真正意義上從單元測試中獲得了收益。
在研發同級別的項目中,我們的測試團隊在系統 API 測試中發現,基于 Wow 框架的項目,其 BUG 數僅為傳統架構項目的 1/3。
你可以在這里了解更多關于 Wow 單元測試套件。
對于企業而言,Wow 框架意味著什么?
商業智能
商業智能是企業決策的關鍵支持,而數據則是商業智能的分析原料。業務數據越為豐富有價值,商業智能的分析結果越準確,決策也就更加可靠。
與傳統架構有著顯著差異,Wow 提供了實時聚合根狀態事件(StateEvent)和聚合命令(Command)作為數據分析的數據源,同時極大降低了實時 ETL(Extract, Transform, Load)的難度。
在傳統架構中,實現實時 ETL 通常需要經過繁瑣的流程,包括 DB->CDC->Process->DB,而在 Wow 框架中,僅需一段簡單的 SQL 腳本即可完成這一過程。
另外,在傳統架構中,使用 CDC(MySql Binlog)數據僅記錄數據的變化,缺乏明確的業務語義。進行業務分析時,需要基于數據狀態的變化推斷出業務語義,這往往需要進行大量的數據處理。
相較之下,Wow 框架直接提供了聚合根狀態事件和聚合命令作為數據分析的數據源,極大降低了數據處理的難度。
Wow 提供的實時同步機制將數據實時同步至數據倉庫(ClickHouse),為實時數據分析提供了極大的便利。這種方法為商業智能提供了強有力的支持,構建了一個實時數據分析系統,使決策制定能夠基于及時而準確的信息。
你可以在這里了解更多關于 Wow 商業智能。
操作審計
操作審計是企業中保障安全性和合規性的重要組成部分,同時也是對系統操作進行監控和追蹤的關鍵手段。Wow 框架在這方面為企業帶來了顯著的優勢。
通過記錄聚合命令(Command)作為操作審計的數據源,Wow 框架能夠詳細追蹤系統中的各種操作。
這些記錄不僅包含了操作本身的內容,還涵蓋了操作觸發的副作用(領域事件),為審計提供了更為全面和準確的數據基礎。
相較于傳統審計方法,Wow 框架的操作審計的數據源具備更加明確的業務語義,以及操作后產生的明確領域事件。
此外,Wow 框架提供的實時數據同步機制也為操作審計帶來了便利,確保了審計數據的及時性和一致性。
了解更多關于 Wow 操作審計。
總結
以上是生活随笔為你收集整理的为什么要实践 A+ES & CQRS ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小鸡宝宝考考你::“北京中轴线”是一条真
- 下一篇: (数据科学学习手札156)地图可视化神器