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