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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值