CQRS布道
为什么要引入CQRS?
DDD实践中的现状及问题
模型耦合问题
- 职责不清晰
- 领域模型臃肿
- 维护成本高
- 复用率低
性能问题
- 吞吐量低
- 响应时间长
- 性能优化难
CQRS能解决什么问题?
模型解耦
- 清晰定义读/写模型职能/边界
- 有利于保持读/写模型纯粹性
- 降低开发&维护成本
性能提升
- 提升吞吐量
- 降低响应时间
那CQRS到底是什么?
CQRS全称为命令查询职责分离(Command Query Responsibility Segregation),是一种应用层读写分离的架构模式,提供快速整合不同 数据源的通用技术解决方案,能够充分利用不同数据库的优势,根据不 同业务场景对接不同数据库并建立合适的读模型。关键技术是通过事件 驱动方式进行数据同步,保证读模型和写模型的数据最终一致性。
CQRS有什么技术方向?
OUTBOX:基于事件消息表的消息队列方案,适合DDD模型,对研发设 计习惯侵入性低; EventStore:基于事件存储的消息队列方案,适合DDD模型,对研发设 计习惯侵入性高(后续研究方向);
OUTBOX发件箱模式是怎样的?
EVENTSTORE事件存储是怎样的?
能否给一个具体的应用例子?
CQRS支持outbox和event sourcing两种模式,我们应该选择哪一个?
outbox模式
event sourcing模式
outbox和event sourcing的区别和选择?(推荐阅读)
Distributed Data for Microservices — Event Sourcing vs. Change Data Capture
直接给结论:推荐使用outbox模式。
那有哪些框架可以选择实施CQRS?
推荐选择Eventuate
能否可以大概介绍一下Eventuate框架
推荐阅读 eventuate的官方文档
eventuate支持CQRS的outbox和event sourcing模式和SAGA。
如果使用outbox模式,选择eventuate tram框架。
如果使用event sourcing模式,选择eventuate local框架。
因此可以选择eventuate tram以便于支持outbox模式的CQRS和SAGA。