您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

什么是 CQRS?它在微服务中有多重要?

时间:2022-08-14 11:58:26  来源:  作者:小柴学Java

CQRS 是一种 微服务 架构模式 ,它代表命令和查询责任分离。

这种模式背后的基本思想是将写操作与读操作分开。不是使用一个数据存储来执行 CRUD 操作,而是在一个数据存储上执行读取操作,并在不同的数据存储上执行创建/更新。

CQRS 承诺对大规模应用程序的稳定性和可 扩展性 以及显着的性能改进。

CQRS 模式由 Bertrand Meyer 设计,作为开发 Eiffel 编程语言的一部分。Greg Young 创造了“CQRS”一词。

CQRS 在哪里使用?

CQRS 通常在准备就绪的大规模分布式应用程序中是首选。也就是说,如果应用程序中的读取次数远远超过写入操作的次数。

此模式的另一个合适用例是读取操作繁重且数据存储副本可以放置在应用程序接收高流量的地理位置附近,从而提高数据库读取操作的性能。

CQRS 是如何实现的?

到目前为止,我们知道要实现 CQRS ,我们将使用两个数据存储库。

通常,写入操作首选关系数据库,其中可以应用所有数据约束,并使用NoSQL 数据库支持读取操作。这意味着,两种不同的数据模型用于写入和读取操作。

自然,人们会想到的问题是这两个存储库中的数据如何同步?

这就是事件驱动 架构 出现的地方。

考虑一个用户调用POST API的场景,执行一些验证,然后将数据及其约束更新到我们的关系数据库中。

将数据插入数据库后,将调用触发器,该触发器将更新所有事件处理程序(事件驱动架构)以更新读取的数据库。

当另一个用户调用 GET API 时,应用程序将从NoSQL 数据库中检索相关数据并将其发送回用户。用于实现 CQRS 的最流行的基于 JAVA框架是 Axon。

Axon 使用命令和处理程序来调用和处理相应的事件。 你可以在Github 上找到完整的代码。

使用 CQRS 有什么好处?

使用 CQRS 的主要好处包括:

灵活的扩展——读写数据存储可以根据需求独立扩展。 简单查询——由于读取和写入的数据模型是分开的,读取数据模型可以设计成避免复杂查询的方式。 提高性能——通过优化读取操作并将数据存储副本放置在不同的地理位置,读取繁重的操作可以显着提高性能。

使用 CQRS 的缺点是什么?

复杂性——事件驱动的系统构建和维护起来很复杂。尽管有像 Axon 这样的框架可以处理数据库写入、发布事件和通知各种处理程序,但也有读写模型不同步的情况。 一致性——CQRS 和事件驱动架构旨在确保数据在所有涉及的系统中保持一致,但在消息失败的情况下,读取数据库将不同步。

结论

在读取次数远大于写入次数的情况下,CQRS 是一种需要考虑的模式。特别是在读取操作要高度优化并且不需要执行任何业务逻辑或验证的情况下。读取操作就像获取数据、加载 DTO 并将其传递给客户端一样简单。

实现这样一个系统的最大挑战是确保避免数据重复,读取数据库永远不会过时,并且写入数据库的所有条目最终也会在读取数据库中一致地更新。

尽管从概念上讲,这听起来很简单,但 CQRS 并不那么容易实现和调试。



Tags:CQRS   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  Search: CQRS  点击:(12)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合,你觉得呢?
“数据密集型系统”越来越多的应用程序有着各种严格而广泛的要求,单个工具不足以满足所有的数据处理和存储需求。取而代之的是,总体工作被拆分成一系列能被单个工具高效完成的...【详细内容】
2023-11-08  Search: CQRS  点击:(291)  评论:(0)  加入收藏
从CRUD到CQRS:使用Spring微服务转变你的架构策略
微服务的兴起以及现代软件架构对可扩展性、灵活性和可维护性的需求,促使开发者采用各种设计模式。近年来,命令查询责任分离(Command Query Responsibility Segregation,CQRS)模式...【详细内容】
2023-10-16  Search: CQRS  点击:(320)  评论:(0)  加入收藏
直播房间服务基于CQRS的架构演进实践
引言房间系统是直播业务的“基石”,开播和看播两大体系都是围绕房间场景展开。房间系统架构也经历一系列的升级和挑战,从房间读多活、混沌流量治理、热点发现、多级缓存等,支撑...【详细内容】
2023-09-27  Search: CQRS  点击:(278)  评论:(0)  加入收藏
什么是 CQRS?它在微服务中有多重要?
CQRS 是一种 微服务 架构模式 ,它代表命令和查询责任分离。这种模式背后的基本思想是将写操作与读操作分开。不是使用一个数据存储来执行 CRUD 操作,而是在一个数据存储上执行...【详细内容】
2022-08-14  Search: CQRS  点击:(1192)  评论:(0)  加入收藏
领域驱动设计DDD和CQRS架构模式落地实践
在领域驱动架构中,通常会将查询和命令操作分开,我们称之为CQRS(命令查询职责分离Command Query Responsibility Segregation)。这张图是来自Martin Fowler大师的文章CQRS( http...【详细内容】
2021-07-30  Search: CQRS  点击:(515)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(12)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(17)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(118)  评论:(0)  加入收藏
站内最新
站内热门
站内头条