当前位置: 首页 > 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.事件溯源,系统的状态不是直接存储的,而是通过一系列不可变的事件来重建。这为审计、回滚和调试提供了强大的工具

http://www.lryc.cn/news/443839.html

相关文章:

  • qt-C++笔记之作用等同的宏和关键字
  • java(3)数组的定义与使用
  • Integer 源码记录
  • 【RocketMQ】一、基本概念
  • 笔记9.18
  • 时间序列8个基准Baseline模型及其详细解读
  • 将相机深度图转接为点云的ROS2功能包
  • 计算机毕业设计选题推荐-共享图书管理系统-小程序/App
  • 架构师:在 Spring Cloud 中实现全局异常处理的技术指南
  • es由一个集群迁移到另外一个集群es的数据迁移
  • java项目之常规应急物资管理系统(源码+文档)
  • text2sql方法:RESDSQL和DAIL-SQL
  • Stable Diffusion 优秀博客转载
  • 探索IT行业的无限潜力:技术、发展与职业前景
  • ESP32配网接入Wifi
  • 前端-js例子:收钱转账
  • 2024 BaseCTF repwn 部分wp
  • 每日学习一个数据结构-倒排表
  • 828华为云征文|部署在线文件管理器 Spacedrive
  • Alluxio EnterpriseAI on K8s 部署教程
  • 鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发
  • Leetcode42. 接雨水
  • dbt snapshot命令及应用示例
  • JavaEE: 深入探索TCP网络编程的奇妙世界(四)
  • 面试金典题2.3
  • React 知识框架
  • DeepCross模型实现推荐算法
  • 【力扣】2376. 统计特殊整数
  • MySQL面试题——第一篇
  • 零停机部署的“秘密武器”:为什么 Kamal Proxy 能成为你架构中的不二之选?