为什么要在DDD实践中引入CQRS架构模式

CQRS布道

为什么要引入CQRS?

DDD实践中的现状及问题

模型耦合问题

  • 职责不清晰
  • 领域模型臃肿
  • 维护成本高
  • 复用率低

性能问题

  • 吞吐量低
  • 响应时间长
  • 性能优化难
CQRS能解决什么问题?

模型解耦

  • 清晰定义读/写模型职能/边界
  • 有利于保持读/写模型纯粹性
  • 降低开发&维护成本

性能提升

  • 提升吞吐量
  • 降低响应时间
那CQRS到底是什么?

CQRS全称为命令查询职责分离(Command Query Responsibility Segregation),是一种应用层读写分离的架构模式,提供快速整合不同 数据源的通用技术解决方案,能够充分利用不同数据库的优势,根据不 同业务场景对接不同数据库并建立合适的读模型。关键技术是通过事件 驱动方式进行数据同步,保证读模型和写模型的数据最终一致性。

CQRS有什么技术方向?

OUTBOX:基于事件消息表的消息队列方案,适合DDD模型,对研发设 计习惯侵入性低; EventStore:基于事件存储的消息队列方案,适合DDD模型,对研发设 计习惯侵入性高(后续研究方向);

OUTBOX发件箱模式是怎样的?

EVENTSTORE事件存储是怎样的?

能否给一个具体的应用例子?


 

CQRS支持outbox和event sourcing两种模式,我们应该选择哪一个?

outbox模式

Transactional outbox

event sourcing模式

Event sourcing

outbox和event sourcing的区别和选择?(推荐阅读)

Distributed Data for Microservices — Event Sourcing vs. Change Data Capture

直接给结论:推荐使用outbox模式

那有哪些框架可以选择实施CQRS?

推荐选择Eventuate

能否可以大概介绍一下Eventuate框架

推荐阅读 eventuate的官方文档

 Eventuate

eventuate支持CQRS的outbox和event sourcing模式和SAGA。

如果使用outbox模式,选择eventuate tram框架。

如果使用event sourcing模式,选择eventuate local框架。

因此可以选择eventuate tram以便于支持outbox模式的CQRS和SAGA。

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CQRS(Command Query Responsibility Segration)架构,大家应该不会陌生了。简单的说,就是一个系统,从架构上把它拆分为两部分:命令处理(写请求)+查询处理(读请求)。然后读写两边可以用不同的架构实现,以实现CQ两端(即Command Side,简称C端;Query Side,简称Q端)的分别优化。CQRS作为一个读写分离思想的架构,在数据存储方面,没有做过多的约束。所以,我觉得CQRS可以有不同层次的实现,比如: 1.CQ两端数据库共享,CQ两端只是在上层代码上分离;这种做法,带来的好处是可以让我们的代码读写分离,更好维护,且没有CQ两端的数据一致性问题,因为是共享一个数据库的。我个人认为,这种架构很实用,既兼顾了数据的强一致性,又能让代码好维护。 2.CQ两端数据库和上层代码都分离,然后Q的数据由C端同步过来,一般是通过Domain Event进行同步。同步方式有两种,同步或异步,如果需要CQ两端的强一致性,则需要用同步;如果能接受CQ两端数据的最终一致性,则可以使用异步。采用这种方式的架构,个人觉得,C端应该采用Event Sourcing(简称ES)模式才有意义,否则就是自己给自己找麻烦。因为这样做你会发现会出现冗余数据,同样的数据,在C端的db有,而在Q端的db也有。和上面第一种做法相比,我想不到什么好处。而采用ES,则所有C端的最新数据全部用Domain Event表达即可;而要查询显示用的数据,则从Q端的ReadDB(关系型数据库)查询即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值