-
reference:
a. 微软技术文档
b. Axon框架指南
c. AxonFramework github地址
-
CQRS是什么?
CQRS 代表 Command and Query Responsibility Segregation,一种将数据存储的读取和更新操作分开的模式。在您的应用程序中实施 CQRS 可以最大限度地提高其性能、可伸缩性和安全性。迁移到 CQRS 所产生的灵活性允许系统随着时间的推移更好地发展,并防止更新命令导致域级别的合并冲突。
总之:模块化、降低耦合、提高可伸缩性。
-
何时使用 CQRS 模式?
-
许多用户并行访问相同数据的协作域。CQRS 允许您定义具有足够粒度的命令,以最大限度地减少域级别的合并冲突,并且可以通过命令合并确实出现的冲突。
-
基于任务的用户界面,用户可以通过一系列步骤或复杂的域模型来引导用户完成复杂的过程。写入模型具有完整的命令处理堆栈,包括业务逻辑、输入验证和业务验证。写入模型可以将一组关联对象视为数据更改的单个单元(聚合,在 DDD 术语中),并确保这些对象始终处于一致状态。读取模型没有业务逻辑或验证堆栈,只返回一个 DTO 以在视图模型中使用。读模型最终与写模型一致。
-
数据读取性能必须与数据写入性能分开微调的场景,尤其是在读取次数远大于写入次数时。在这种情况下,您可以扩展读取模型,但仅在少数实例上运行写入模型。少量的写入模型实例也有助于最大限度地减少合并冲突的发生。
-
一个开发团队可以专注于作为写入模型一部分的复杂域模型,而另一个团队可以专注于读取模型和用户界面的场景。
-
预计系统会随着时间的推移而发展并可能包含模型的多个版本,或者业务规则定期更改的场景。
-
与其他系统集成,尤其是与事件溯源相结合,其中一个子系统的临时故障不应影响其他子系统的可用性。
在以下情况下不建议使用此模式:
-
域或业务规则很简单。
-
一个简单的 CRUD 风格的用户界面和数据访问操作就足够了。
-
CQRS的优缺点?
- 独立缩放。CQRS 允许读取和写入工作负载独立扩展,并可能导致更少的锁争用。
- 优化的数据模式。读取端可以使用针对查询优化的模式,而写入端使用针对更新优化的模式。
- 安全。更容易确保只有正确的域实体对数据执行写入操作。
- 关注点分离。分离读写端可以使模型更易于维护和灵活。大多数复杂的业务逻辑都进入了写入模型。读取模型可以相对简单。
- 更简单的查询。通过在读取数据库中存储物化视图,应用程序可以在查询时避免复杂的连接。
-
CQRS如何落地?
-
CQRS参考项目?
网友评论