问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从单体架构转向CQRS

发布网友 发布时间:2024-10-02 12:18

我来回答

1个回答

热心网友 时间:2024-10-18 19:37

软件设计是不断发展与进化的过程。系统从简单到复杂,每一次进阶都伴随着对技术的选择与考量。作为架构师或高级工程师,我们需要在开发进度、技术堆栈、团队水平等多种因素间找到平衡,以确保解决方案的可行性和合理性。


本文旨在介绍CQRS(Command Query Responsibility Segmentation)的核心概念及其解决的问题。我们将通过一个从单体架构到CQRS的演进过程,探讨每一步背后的原因和方法。



传统的单体架构



传统单体架构是最常见的系统设计模式。它由API服务器和数据库组成,使用RESTful API进行通信。数据传输通过数据传输对象DTO进行,客户端与后端协商传输格式。在写操作中,客户端将DTO发送给后端进行CRUD操作,后端将DTO转化为领域对象存储。读操作则直接通过API获取DTO。



实现Read/Write Splitting



为了解决性能优化问题,引入了读/写拆分策略。写路径专注于数据持久化,读路径专注于数据查询。在写路径中,客户端向后端发送DTO进行CRUD操作,后端通过响应(成功或失败)反馈给客户端。读路径则简单地通过API获取DTO。在客户端,DTO表示在屏幕上呈现的所有数据,如社交媒体个人资料中的姓名、活动等信息。



为何需要读/写拆分



读/写拆分是必要的,因为它允许我们针对读和写操作优化系统。在写路径上,我们可以进行缓存操作以减少响应时间;在读路径上,可以使用只读缓存减少数据获取时间。同时,通过异步处理写操作,可以使用消息队列和Worker处理大量写入数据。此外,不同数据库可以同时用于写入和读取,以实现更好的性能和扩展性。



单体架构的局限性



虽然传统单体架构提供了基本的系统功能,但存在两个主要问题:缺乏领域概念和可扩展性*。引入域概念后,消息代替了DTO,使得系统能够更有效地处理特定领域的操作。但读路径仍然需要DTO,以处理需要显示在屏幕上的信息。这导致了在读取路径上进行大量处理以获取DTO,从而增加了系统复杂性。



CQS(命令查询分段)的引入



CQS旨在解决读/写拆分带来的痛点。在读取路径中,应用服务负责生成预先构建的DTO,以简化客户端请求和数据库查询。生成这些DTO的责任在写路径,它需要持久化领域对象和DTO。这样,读取路径应用服务变得更加简单,专注于分页、排序等工作。



数据生命周期与最终一致性



在CQRS架构中,数据从客户端开始,以命令格式进入系统。通过业务逻辑,将命令转化为领域对象存储。领域对象转换成各种读取视图,并存储在不同的数据库中。最后,客户端通过DTO形式获取这些读取视图。



CQRS的局限与实现最终一致性



虽然CQRS解决了领域和性能问题,但也带来了数据一致性挑战。实现最终一致性的方法包括事件溯源和混合方法。事件溯源通过顺序存储消息来构建读取视图,而混合方法结合了状态和事件的保留,根据实际情况选择数据源。



系统设计与决策



系统设计没有万能方案,每次进阶都是为了解决特定问题。CQRS似乎解决了提到的局限性,但同时也引入了新的挑战。技术选择总是伴随着取舍,关键在于充分了解每个选项的风险与收益,从而做出相对合理的决策。



CQRS的简化与DDD的融合



CQRS相对简单,它提供了一种从系统演化过程出发,理解系统设计与问题解决方式的方法。通过本文的分析,你可以看到,DDD概念并不复杂,而是旨在封装业务逻辑,方便扩展功能需求。CQRS则是一个技术决策的过程,它简化了系统设计,有助于解决实际问题。

从单体架构转向CQRS

数据生命周期与最终一致性在CQRS架构中,数据从客户端开始,以命令格式进入系统。通过业务逻辑,将命令转化为领域对象存储。领域对象转换成各种读取视图,并存储在不同的数据库中。最后,客户端通过DTO形式获取这些读取视图。CQRS的局限与实现最终一致性虽然CQRS解决了领域和性能问题,但也带来了数据一致性挑战。

后端开发实践系列之四——简单可用的CQRS编码实践

网上许多关于CQRS的文章都将CQRS与Event Sourcing(事件溯源)结合起来使用,但这并非必须。CQRS的本质是“读写模型的分离”,并未要求使用Event Sourcing。读写模型的分离并不一定意味着数据存储的分离,但在实际应用中,数据存储分离是一种常见的CQRS实践模式。无论是单体还是微服务,所读数据的唯一正确来源...

微服务想搞好,消息中间件不能少,Kafka基础入门介绍

现在微服务流行,很多公司起项目都是分布式微服务,但是你想过没有,不是把一个单体拆开了,用域名去相互调就叫微服务。好的微服务架构设计模式里要求每个服务的自治性,这样服务拆分成微服务后才能稳定。怎么才能让每个服务尽量达到自治性呢?这就需要领域事件、事件溯源、CQRS、Saga这些设计模式,不好意思一...

2022年软件开发的十五种趋势 - geekculture

电子商务网站的加载时间减少了一半,每天发布多次而不是每月一次,由于阿迪达斯转向 云原生 ,开发人员拥有更多的自主权。 4. 当涉及到软件架构时,我们应该分而治之 大规模的单体在某种程度上是一个昨天的故事。它们长期困扰着开发者,不过现在已经不是了。将巨大的单一代码库分割成较小规模的应用程序是新的做事方式。...

单体架构和分布式架构 单体架构和微服务架构 单体架构横向 单体架构 单体架构缺点 单体架构的优缺点 单体应用架构有哪些优点 单体应用的架构风格 单体架构配置中心
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
内存卡有A1和A2之分吗? 为什么系统会说0x045421a2指令引用的内存0*0000000a不能为written或者... ...经济师考试科目及考试方式是什么?-中级经济师考试方式? 贵州2021中级经济师考试时间-全国中级经济师考试时间-中级经济师考试时 ... 贵州中级经济师的考试时间 马油的正确使用方法有哪些 你知道廊坊管道局中学怎么样吗? 廊坊管道局中学好不好啊!? 廊坊一中好还是管道局中学好? 公司确实无财产清偿债务如何办 DAO相关信息 进阶面试的必看的ORM架构之 ORM简介 一篇文章带你搞懂Controller、Service等各层的功能与作用 “整洁架构”和商家前端的重构之路 笔记本上的"USB连接器",和"有源USB连接器"有什么不同吗? 我的笔记本电脑只有一个USB2.0的接口,但是鼠标键盘都是2.0的。有什么办... ...的理想和愿望 例句:我不是挺立在高山峻岭中的巨松,也不 ...我不是挺立在高山峻岭中的巨松,而是辽阔草原上的一棵小草,为壮丽的... ...我不是挺立在高山峻岭中的巨松,而是辽阔草原上的一棵小草---为壮 ... ...我不是挺立在高山峻岭中的巨松,而是辽阔草原上的一棵小草——为壮 ... 我不是挺立在高山峻岭中的巨松,而是辽阔草原上的一棵小草---为壮丽的... 股票什么原因会带上sT 什么情况成为st 5173怎么样?这公司最垃圾,5173的工作人员都很垃圾,交易打钱之后有问题... 我问你们整个5173网页公司的员工一个问题 垃圾5173客服别骗不处理 请问大家捕鼠器要去哪里卖~比如专门卖什么的地方~!!! 5173是我见过最垃圾的网站 收费贵 服务差 要是用5173就去死把 骗了劳 ... 5173臭垃圾 5173客服就是个大 SB ! 垃圾啊,垃圾!什么服务质量! 新手到租车行租车不小心闯红灯了 扣租车行的分还是驾驶员的分?_百度... 灰机鹦鹉是国家保护动物吗? ...了word2007后,打开的软件还是RTF的功能,没有word的强大功能?我要用... 安阳市国三蓝牌货车可以迁出吗 ...知道,和"国际刑警","我和春天有个约会","火玫瑰"同时期的电视剧? 高危职业意外险赔付医院有要求吗 考一级建筑师要什么条件 高危职业意外险有立即生效的吗 说一说东北雪乡的特点是什么 win7开机配置windowsupdate35进不去界面 “丽句如云不胜收,风流才调叹无俦。吴中仕女争相见,不道搴帷见鬼头... 求电视剧,最好是校园,搞笑,男主角是富二代,不是也行,求推荐 分手后两个月,女生忽然清空微博,头像也变空白,这是为什么? ...把头像也弄成黑白的了,,是怎么回事?女生怎么这样?好讨厌啊 种子粉可以代替主食吗? 小奶猫能不能吃黄瓜籽 骨折吃黄瓜籽好吗 淘宝营业额多少要办营业执照?营业执照多少钱? 提前真香还是再等等?华硕天选4值不值得买看完媒体评测再决定_百度知 ... 如何领取支付宝的扫码红包?