当前位置: 首页 > news >正文

CQRS模型解析

简介

CQRS中文意思为命令于查询职责分离,我们可以将其了解成读写分离的思想。分为两个部分 业务侧和数据侧,业务侧主要执行的就是数据的写操作,而数据侧主要执行的就是数据的读操作。当然两侧的数据库可以是不同的。目前最为常用的CQRS思想方式为事件驱动。CQRS模型也是未来微服务形态的一个趋势。

模型解析

执行流程为下:

(业务侧)

1.客户端发送Command指令。

2.服务找到处理Command对应的处理器。

3. 将事件加入到事件总线中

4.将对应的事件数据持久化到数据库。

(数据侧)

1.从事件总线中获取对应更改的事件。

2.和读数据库中的数据实体进行比较,然后更新数据库信息。

解决方案

目前比较成熟的方案为:kafka + flink + axon 来实现CQRS。

方案流程:

业务侧:
在前端调用接口后,业务侧完成对应的业务操作,发送事件消息到kafka中,并将事件消息通过axon持久化到数据库中,为此业务侧的任务就完成了。(事件消息就是写操作)

数据侧:

1.flink监听kafka中的事件消息,在监听到对应的事件消息后会到数据库中查询对应的事件数据。 

2.执行数据清洗:

  • 将事件中的数据填到主题模型中,也就是将脏数据转换为对应指定的数据。
  • 将主题模型的数据转换为持久化模型。
  • 将持久化模型sink到数据库中。

为什么要使用axon将事件数据进行持久化?

在kafka中的消息的数据是不能进行修改的,如果此时业务侧因为网络问题导致事件数据有误,在数据侧就会获取错误的数据,这明显是不合适的。所以在数据侧我们获取事件数据的最终来源为数据库,kafka中的事件消息最为驱动。(kafka主要的作用就是解耦合

在flink中为什么要将主题模型转换为持久化模型?

因为持久化的数据库可能有多个,对应的数据库字段类型有所不同,所以需要在做一个持久化模型。

*相比于MVC,CQRS框架的优势在哪里?

1. 通过将读取和写入操作分开,可以针对每种类型的操作优化数据存储。

2.由于读取和写入操作是分离的,因此可以根据需要灵活地改变任一端的数据模型或实现,而不会直接影响到另一端。

3.事件溯源,系统的状态不是直接存储的,而是通过一系列不可变的事件来重建。这为审计、回滚和调试提供了强大的工具

相关文章:

CQRS模型解析

简介 CQRS中文意思为命令于查询职责分离,我们可以将其了解成读写分离的思想。分为两个部分 业务侧和数据侧,业务侧主要执行的就是数据的写操作,而数据侧主要执行的就是数据的读操作。当然两侧的数据库可以是不同的。目前最为常用的CQRS思想方…...

qt-C++笔记之作用等同的宏和关键字

qt-C笔记之作用等同的宏和关键字 code review! Q_SLOT 和 slots: Q_SLOT是slots的替代宏,用于声明槽函数。 Q_SIGNAL 和 signals: Q_SIGNAL类似于signals,用于声明信号。 Q_EMIT 和 emit: Q_EMIT 是 Qt 中用于发射…...

java(3)数组的定义与使用

目录 1.前言 2.正文 2.1数组的概念 2.2数组的创建与初始化 2.2.1数组的创建 2.2.1数组的静态初始化 2.2.2数组的动态初始化 2.3数组是引用类型 2.3.1引用类型与基本类型区别 2.3.2认识NULL 2.4二维数组 2.5数组的基本运用 2.5.1数组的遍历 2.5.2数组转字符串 2.…...

Integer 源码记录

Integer 公共方法结构 注意: 通过构造函数创建一个Integer对象,每次都会返回一个新的对象,如果使用 进行对象的比较,那么结果是false。 public Integer(int value) {this.value value;}与之对应的是,valueOf 方法…...

【RocketMQ】一、基本概念

文章目录 1、举例2、MQ异步通信3、背景4、Rocket MQ 角色概述4.1 主题4.2 队列4.3 消息4.4 生产者4.5 消费者分组4.6 消费者4.7 订阅关系 5、消息传输模型5.1 点对点模型5.2 发布订阅模型 1、举例 以坐火车类比MQ: 安检大厅就像是一个系统的门面,接受来…...

笔记9.18

线程之间的通信是指在多线程程序中,不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式: 共享内存: 这是最直接的方式,多个线程通过读写同一块内存区域&#xff0…...

时间序列8个基准Baseline模型及其详细解读

我是从去年11月份开始,选定时间序列预测这个方向,准备在工作之余继续独立进行一些科学研究。选定这个方向是因为我对金融量化一直挺感兴趣,希望能把时间序列中的深度学习算法模型,用到金融数据。现在看来,我太过于理想…...

将相机深度图转接为点云的ROS2功能包

depth_image_proc 是一个 ROS(Robot Operating System)包,它包含了一系列节点,用于处理来自深度相机的图像数据,并将其转换为点云。以下是 depth_image_proc 包中各个节点的作用: convert_metric_node&…...

计算机毕业设计选题推荐-共享图书管理系统-小程序/App

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

架构师:在 Spring Cloud 中实现全局异常处理的技术指南

1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…...

es由一个集群迁移到另外一个集群es的数据迁移

迁移es的数据 改下index的索引 就可以了。 查询 用curl -u就可以查询了...

java项目之常规应急物资管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 基于SpringBootVue的…...

text2sql方法:RESDSQL和DAIL-SQL

之前介绍了text2sql的综述,但是对一些方法的描述不够详细,所以将一些感兴趣的方法思路也整理一下。 RESDSQL RESDSQL出自2023年2月的论文《RESDSQL: Decoupling Schema Linking and Skeleton Parsing for Text-to-SQL》(github)。它使用seq2seq PLM(pr…...

Stable Diffusion 优秀博客转载

初版论文地址:https://arxiv.org/pdf/2112.10752 主要流程图: Latent Diffusion Models(LDMs) DDPM是"Denoising Diffusion Probabilistic Models"的缩写, 去噪扩散概率模型 博客: 【论文阅读…...

探索IT行业的无限潜力:技术、发展与职业前景

探索IT行业的无限潜力:技术、发展与职业前景 1. 引言 信息技术(IT)已经彻底改变了我们的生活方式,从智能手机到云计算,IT无处不在。无论是公司管理系统、社交媒体,还是大数据分析平台,IT推动了…...

ESP32配网接入Wifi

1 ESP32的两种模式 AP模式:ESP32可以作为热点,手机和电脑等设备接入使用。 STA模式:ESP32可以作为作为客户端接入其他网络中。 2 流程 step1: ESP32上电后进入STA模式,尝试看能够接入网络 step2: 如何连接成功,则正常运行。如何连接超时,则自动进入AP模式,设置AP热点…...

前端-js例子:收钱转账

支付宝转账 在这里用到周期定时器setInterval(function,time),设置达到目标钱数时停止定时器。 点击转账按钮时,开始函数显示。 同时要确定输入框里输入的是数字。(有一定容错) window.onloadfunction(){var btn document.que…...

2024 BaseCTF repwn 部分wp

You are good at IDA 附件拖入ida。比较简单 UPX mini upx壳,无魔改,直接脱。脱完拖入ida。比较简单 Ez Xor 附件拖入ida 比较简单。脚本 ez_maze 附件拖入ida 一个宽为15的迷宫 BasePlus 附件拖入ida。变表base64再异或0xE 签个到吧 nc连上即得 echo nc…...

每日学习一个数据结构-倒排表

文章目录 示意图倒排表的基本概念倒排表的数据结构示例 倒排表的优点应用场景 倒排表(Inverted Index),也称为反向索引或倒排文件,在信息检索系统中是一种重要的数据结构。它主要用于快速搜索文档中的关键词,并找到包含…...

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…...

如何高效使用小红书下载工具:简单实用的完整教程

如何高效使用小红书下载工具:简单实用的完整教程 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&#xff…...

3分钟实现GitHub界面汉化:浏览器插件让GitHub说中文

3分钟实现GitHub界面汉化:浏览器插件让GitHub说中文 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾因GitHub的英…...

CRMEB 让您的在线商城更智能:最新商品模块更新亮点一览!

为了让广大电商商家更好地管理商品、提升用户的购物体验和满意度,近日,CRMEB标准版商城系统再度发力,对商品模块进行了全面升级,新增一系列功能,期待帮助企业商家更好地管理商品,提升用户购物体验&#xff…...

Android Method Tracing深度解析:Unity性能瓶颈跨层归因实战

1. 为什么Method Tracing不是“点一下就出报告”的银弹,而是Android性能诊断的听诊器在Unity项目上线前的最后两周,我接手了一个卡顿严重的AR应用——启动后3秒内帧率从60掉到22,用户滑动模型时UI直接冻结。团队里有人立刻打开Profiler&#…...

影刀RPA 从0到1:自动化系统架构收敛与工程化演进总结

影刀RPA 从0到1:自动化系统架构收敛与工程化演进总结 作者:林焱 写到这里。 这个系列其实已经慢慢进入后半段了。 前面聊了很多内容。 包括: 浏览器池 节点集群 Redis 队列 调度系统 容灾恢复 日志监控 性能治理 很多人刚开始接…...

WTEW的操作记录

WTEW的操作记录WTEW事务代码的操作记录WTEW事务代码的操作记录 1、查询贸易合同信息 如果是自己创建可以使用WB21、WB22、WB23事务码,如果是税码更新用WBRP更新价格 2、创建后续单据,采购TC创建采购订单,销售TC创建销售订单,注…...

别再傻傻只用insmod了!Linux驱动加载,用modprobe才是真省心(附依赖问题解决全流程)

别再傻傻只用insmod了!Linux驱动加载,用modprobe才是真省心(附依赖问题解决全流程) 你是否曾在深夜调试Linux驱动时,被insmod报出的"Unknown symbol"错误折磨到崩溃?明明已经编译好了驱动模块&am…...

别再死记硬背公式了!用Matlab Robotics Toolbox玩转机器人姿态(旋转矩阵/欧拉角/四元数互转)

用Matlab Robotics Toolbox解锁机器人姿态转换的实战密码 在机器人学和计算机视觉领域,姿态表示就像工程师的第二语言。但当我们面对旋转矩阵、欧拉角和四元数这三种"方言"时,很多人会陷入公式记忆的泥潭。实际上,理解它们之间的关…...

量子虚时演化算法:原理、实现与应用

1. 量子虚时演化算法概述虚时演化(Imaginary-Time Evolution, ITE)是量子物理模拟中的核心数学工具,其核心思想是将时间变量t替换为虚数-iβ(β为实数)。这种变换将薛定谔方程中的幺正演化算符e^(-iHt)转化为非幺正的e…...

mPDF实战指南:PHP环境下HTML转PDF的高性能解决方案深度解析

mPDF实战指南:PHP环境下HTML转PDF的高性能解决方案深度解析 【免费下载链接】mpdf PHP library generating PDF files from UTF-8 encoded HTML 项目地址: https://gitcode.com/gh_mirrors/mp/mpdf 在当今数字化办公环境中,PDF文档生成已成为企业…...