觀點:實現CQRS分離不如實現一致性分離 - @jroper
我開始認為CQRS分離方向是錯誤的,我們不應該在命令和查詢之間分離責任,而是在業務需要強烈一致的操作和可能弱一致的操作之間。
這意味著如果業務需要讀取您自己的寫入,那麼您不必向後彎曲以實現它,您只需在強一致性方面執行該讀取操作。
它還允許更靈活的寫入,因為您可以在業務允許的弱一致性方面進行編寫。這種方法的一個實現可能是使用CRDT,強一致性方面是單個可定址的持久複製品。
在一天結束時,企業真的關心某件事是命令還是查詢?事實並非如此,企業關心的是一致性和順序(banq注:資料的準確性 資料的完整性),或者更具體地說,它關心的是什麼時候保證,什麼時候不保證。
透過命令和查詢進行隔離並不能完全對映到業務所關注的內容,而是透過強弱一致性級別進行隔離。
因此,或許我們應該做出強烈一致的弱一致責任隔離:SWRS。在大多數情況下,它看起來與CQRS非常相似,只是功能更強大,更適合業務需求。
當然,實際實現這是有挑戰的: 命令和查詢是客觀分類的,一致性要求可能是非常主觀的(儘管技術上可行,例如跨實體連線,確實使分類有時是客觀的)。
banq注:CQRS其實是技術架構上分離,也就是讀寫分離,而一致性是業務關注點,實際上DDD聚合是高一致性的設計結果,因此CQRS一般必須加上DDD,這樣DDD幫助你實現一致性分離,哪些得到保證?聚合裡的資料更新會得到高一致性保證,哪些不能得到保證,跨聚合操作等,這些是弱一致性,甚至可以透過流程來保證。
相關文章
- CQRS如何實現讀寫分離
- MySQL主從分離實現MySql
- Nginx實現動靜分離Nginx
- Amoeba實現讀寫分離
- CQRS命令查詢分離架構的多種形式實現 - Kapil架構API
- ProxySQL實現MySQL讀寫分離MySql
- vue 實現 js css html分離VueJSCSSHTML
- haproxy + varnish 實現動靜分離
- Amoeba 實現 MySQL 讀寫分離MySql
- Docker實現Mariadb分庫分表、讀寫分離Docker
- 14-宣告和實現的分離
- 實現前後端分離的心得後端
- Amoeba+Mysql 實現讀寫分離MySql
- 【Mongo】Mongo讀寫分離的實現Go
- springboot實現讀寫分離Spring Boot
- mysql-proxy實現讀寫分離MySql
- clash 實現訂閱節點與規則的分離
- PostgreSQL+Pgpool實現HA讀寫分離SQL
- Nginx+Tomcat實現動靜分離NginxTomcat
- docker+atlas+mysql實現讀寫分離DockerMySql
- 搭建基於springmvc,ibatis的工程實現讀寫分離,配置分離SpringMVCBAT
- 命令查詢職責分離 - CQRS
- 基於Sharding-Jdbc 實現的讀寫分離實現JDBC
- 搭建MySQL主從實現Django讀寫分離MySqlDjango
- MHA+ProxySQL實現讀寫分離高可用SQL
- 豐田的“人機分離”是如何實現的?
- ProxySQL實現Mysql讀寫分離 - 部署手冊MySql
- MySQL 中介軟體Atlas 實現讀寫分離MySql
- Spring實現資料庫讀寫分離Spring資料庫
- 位元組面試:什麼是讀寫分離?讀寫分離的底層如何實現?面試
- ShardingSphere(七) 讀寫分離配置,實現分庫讀寫操作
- 分庫分表(6)--- SpringBoot+ShardingSphere實現分表+ 讀寫分離Spring Boot
- centos7.9 配置nginx實現前後端分離CentOSNginx後端
- Nginx 動靜分離與負載均衡的實現Nginx負載
- NCF 如何通過WebApi實現前後端分離WebAPI後端
- redis客戶端實現高可用讀寫分離Redis客戶端
- Spring Aop實現資料庫讀寫分離Spring資料庫
- Mycat實現mysql的負載均衡讀寫分離MySql負載