如何理解微服务体系结构中的 CQRS

本文翻译自 How To Understand CQRS In Microservices Architecture,原作者 OLEKSII。

问题描述

在典型的软件应用程序中,有一个负责写入和读取操作的数据存储。通常,应用程序实现一些 CRUD 操作,并且非常简单。你存储了一些东西并读取了相同的结果。

然而,在复杂的应用程序中,情况并不是那么简单。每个操作都需要很多操作和约束。

例如:

  • :数据库是以规范化的方式构造的,以消除数据重复并强制约束。:复杂的读取查询需要大量对性能产生负面影响的联接(joins)/联合(unions)/聚合(aggregations)。

  • :优化查询需要索引。:每次操作都会更新索引。

  • 读/写表示可能不同,这可能是附加逻辑的原因。

  • 在对同一数据进行并行操作期间,可能会发生数据争用。

  • 由于数据库的负载,性能可能很差。


CQRS

上述问题的解决方案是 CQRS(Command Query Responsibility Segregation)。

让我们回顾一下上面的图片。它包含两个服务:旅馆管理服务旅馆预订服务(实际上,如果需要的话,可以有多个不同的预定服务及其各自的数据库)。这些服务之间的数据应该同步。为此,通常使用一些消息代理(例如 Kafka。这些服务的数据格式不同。

旅馆管理服务负责创建/更新/删除操作,每个操作都被描述为一个命令:

  • 生成/批准/拒绝一个酒店创建请求。

  • 添加/更新酒店房间到系统。

  • 更改酒店房间的价格。

  • 预订特定时间段的酒店房间。

  • 请求其他服务。

  • 生成请求留下/批准/拒绝评论。

  • 取消预订。

旅馆预订服务仅负责向用户显示酒店/房间列表:

  • 列出一个城市中所有/可用的酒店房间。

  • 在地图上显示所有酒店(按地理位置过滤)。

  • 向用户显示可用的过滤选项。

  • 通过指定的过滤器过滤酒店房间(例如,显示两个酒店房间,而不是一个多人房间)。

正如你所见,服务提供的责任是不同的。此外,指定服务的性能约束也不同。用户在预订之前通常会经过许多预订选项。因此,在这个系统中,操作的数量远远高于操作的数量。因此,这些服务的缩放将有所不同。

因此,一些 RDBMS 可以用作旅馆管理服务的数据存储,例如 MySQL或 PosgreSQL。RDBMS 将为保持数据安全提供它的所有好处。

旅馆预订服务可以基于一些 NoSQL 解决方案,如 MongoDB或 Elasticsearch。这背后的原因是执行高效搜索查询的能力:反规范化、地理位置搜索支持、索引、水平缩放等。

CQRS 优势

  • 关注点分离。

  • 单个读写服务缩放。

  • 适合读写操作的数据存储及其模式(schema)。

  • 简单高效的查询。

CQRS 劣势

  • 复杂性。

  • 最终一致性。


总结

在本文中,我们回顾了 CQRS 模式。值得一提的是,这种模式的必要性可能发生在复杂的系统中。因此,应谨慎选择,以免给系统带来不必要的复杂性。

文章转载自:阿呜的边城

原文链接:https://www.cnblogs.com/dev2007/p/17874290.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/219338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Python核对文件夹内的文件

说明:日常工作中,我们经常会遇到这样的场景:核对A、B文件夹中文件的差异,找出A、B文件夹中不同部分的文件; 本文介绍如何使用Python来实现; 第一步:获取文件清单 首先,我们要获取…

Mysql date类型设置默认值curdate失败解决

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

【华为数据之道学习笔记】1-2华为数字化转型与数据治理

传统企业通过制造先进的机器来提升生产效率,但是未来,如何结构性地提升服务和运营效率,如何用更低的成本获取更好的产品,成了时代性的问题。数字化转型归根结底就是要解决企业的两大问题:成本和效率,并围绕…

AcWing.93.递归实现组合型枚举(Java版)

//递归实现组合型枚举,从n个数中选出不重复的m个. //按字典顺序输出,从小到大每次找三个 //可以用for循环,i 从 start开始, 每次深搜都修改搜索起始点 //数据量较大,用BufferedWriter输出import java.io.*; import java.util.*; public class Main {static int n,m;…

自建网站:零基础手把手教学,非IT技术也能写啦!!!

自建网站 服务器域名WordPress网页美感设计收款系统 服务器 腾讯云链接:https://cloud.tencent.com/act/pro/bestselling?fromSourcegwzcw.7788594.7788594.7788594&utm_mediumcpc&utm_idgwzcw.7788594.7788594.7788594&qz_gdtcthg4zieaaamhubo75ja …

飞行汽车开发原理(上)

前言 小节的安排是由浅入深,要按顺序读;有电路知识基础的同学可跳到“计算机电路”一节开始。因为知识点之间有网状依赖,没办法按分类来讲。 为了避免过于深入、越讲越懵,很多描述仅为方便理解、不求严谨。 半导体特性 导体&a…

机器视觉中的图像增强与对比度调整技术

在机器视觉中,图像增强与对比度调整技术是常用的方法,旨在改善图像的质量和视觉效果,或将图像转换成更适合人眼观察或机器分析识别的形式。 图像增强技术可以针对给定图像的应用场合,有目的地强调图像的整体或局部特性&#xff0…

Vue实现简单用户登录页面

📑前言 本文主要是【Vue】——Vue实现简单用户登录页面的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日…

这个工具真好用!一个网站轻松搞定电子书

相信很多朋友在寻找电子书资源的时候都会遇到一些困难,比如下载慢、格式不兼容等等。小边最近找到了这款制作电子书工具,无需下载,格式也很齐全,几乎可以满足所有人的需求。 想要电子书制作工具的可以在评论区踢我,现…

助力智慧高速建设,多条高速公路再次见证光路科技工业交换机科技力量!吉林蒲烟高速通车,四川绵九高速、宁攀高速正在调试

近日,光路科技(Fiberroad)的技术人员配合完成了吉林蒲烟高速的项目验收工作。同时,四川绵九高速、四川宁攀高速项目目前正处于调试阶段,光路科技的技术人员正积极参与其中,确保工业以太网交换机在项目中的顺…

CentOS安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

MySQL数据误删除恢复

1.1 问题简述 开发反馈误删除了部分业务数据,需要恢复数据。 这里采用binlog2sql工具进行数据回滚。 1.2 环境 CentOS Linux release 7.4.1708 (Core) mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL) 1.3 数据库开启binlog 因为数据库serve…

Full-RNS BGV/BFV

参考文献: [BV11] Brakerski Z, Vaikuntanathan V. Fully homomorphic encryption from ring-LWE and security for key dependent messages[C]//Annual cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2011: 505-524.[GHS12] Gentry C,…

QThread之moveToThread用法

简介 使用moveToThread函数的流程如下: 1、创建一个类继承自QObject类或其子类,并在其中定义所要执行的多个任务,执行多个任务就要定义相应的信号。 2、任务通过moveToThread指定所要执行的线程。 3、线程通过start启动 4、通过信号与槽机制…

Linux基础命令(测试相关)

软件测试相关linux基础命令笔记 操作系统 常见Linux: Redhat系列:RHSL、Centos、FedoraDebian系列:Debian、Ubuntu以上操作系统都是在原生Linux系统上,增加了一些软件或功能。linux的文件及路径特点 Linux没有盘符的概念&#xf…

11.12每日一题(根式差型求极限:有理化、拉格朗日中值定理)

解决同一极限在两点函数值差时,拉格朗日中值定理常用,也非常有效!

如何做好仓库管理工作?好的仓库管理的流程是什么?

本文将为大家讲解:如何做好仓库管理工作?好的仓库管理的流程是什么? ——“怎么样才能做好仓库管理工作?” ——“建议软硬兼施!” “软”即仓库管理系统,“硬”即仓库管理制度。系统和制度不是孤立存在…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉! 10月份,打印机市场整体销售下滑。鲸参谋数据显示,今年10月份,京东平台打印机的销量将近60万,环比降低约2%,同比降低约5%;销售额为4.4亿&a…

mapbox实现框选要素

成果图 参考博客 https://blog.csdn.net/ScapeD/article/details/89158755 原理与源码 利用mapbox的queryRenderedFeatures方法可以获取范围内的要素,但是这个只能是点和矩形和范围内的全屏要素,并不支持多边形,所以实现这个的思路就是画完框…

C/S医学检验LIS信息管理系统源码 检验科LIS系统源码

LIS系统又称实验室信息管理系统是专门为医院检验科而设计的一套实验室信息管理系统。 LIS通过将所有仪器自身提供的端口与科室LIS系统中的工作站点连接,通过LIS实现与医院HIS系统的联网。是一套符合医院检验科实际需要的管理系统,实现检验业务全流程的计…