觀點:實現CQRS分離不如實現一致性分離 - @jroper

banq發表於2019-01-16

我開始認為CQRS分離方向是錯誤的,我們不應該在命令和查詢之間分離責任,而是在業務需要強烈一致的操作和可能弱一致的操作之間。
這意味著如果業務需要讀取您自己的寫入,那麼您不必向後彎曲以實現它,您只需在強一致性方面執行該讀取操作。
它還允許更靈活的寫入,因為您可以在業務允許的弱一致性方面進行編寫。這種方法的一個實現可能是使用CRDT,強一致性方面是單個可定址的持久複製品。
在一天結束時,企業真的關心某件事是命令還是查詢?事實並非如此,企業關心的是一致性和順序(banq注:資料的準確性 資料的完整性),或者更具體地說,它關心的是什麼時候保證,什麼時候不保證。
透過命令和查詢進行隔離並不能完全對映到業務所關注的內容,而是透過強弱一致性級別進行隔離。
因此,或許我們應該做出強烈一致的弱一致責任隔離:SWRS。在大多數情況下,它看起來與CQRS非常相似,只是功能更強大,更適合業務需求。
當然,實際實現這是有挑戰的: 命令和查詢是客觀分類的,一致性要求可能是非常主觀的(儘管技術上可行,例如跨實體連線,確實使分類有時是客觀的)。

banq注:CQRS其實是技術架構上分離,也就是讀寫分離,而一致性是業務關注點,實際上DDD聚合是高一致性的設計結果,因此CQRS一般必須加上DDD,這樣DDD幫助你實現一致性分離,哪些得到保證?聚合裡的資料更新會得到高一致性保證,哪些不能得到保證,跨聚合操作等,這些是弱一致性,甚至可以透過流程來保證。

相關文章