CQRS

作者: 奋斗的韭菜汪 | 来源:发表于2022-07-07 15:57 被阅读0次
  1. reference:

a. 微软技术文档
b. Axon框架指南
c. AxonFramework github地址

  1. CQRS是什么?

CQRS 代表 Command and Query Responsibility Segregation,一种将数据存储的读取和更新操作分开的模式。在您的应用程序中实施 CQRS 可以最大限度地提高其性能、可伸缩性和安全性。迁移到 CQRS 所产生的灵活性允许系统随着时间的推移更好地发展,并防止更新命令导致域级别的合并冲突。

总之:模块化、降低耦合、提高可伸缩性。
  1. 何时使用 CQRS 模式?

  • 许多用户并行访问相同数据的协作域。CQRS 允许您定义具有足够粒度的命令,以最大限度地减少域级别的合并冲突,并且可以通过命令合并确实出现的冲突。

  • 基于任务的用户界面,用户可以通过一系列步骤或复杂的域模型来引导用户完成复杂的过程。写入模型具有完整的命令处理堆栈,包括业务逻辑、输入验证和业务验证。写入模型可以将一组关联对象视为数据更改的单个单元(聚合,在 DDD 术语中),并确保这些对象始终处于一致状态。读取模型没有业务逻辑或验证堆栈,只返回一个 DTO 以在视图模型中使用。读模型最终与写模型一致。

  • 数据读取性能必须与数据写入性能分开微调的场景,尤其是在读取次数远大于写入次数时。在这种情况下,您可以扩展读取模型,但仅在少数实例上运行写入模型。少量的写入模型实例也有助于最大限度地减少合并冲突的发生。

  • 一个开发团队可以专注于作为写入模型一部分的复杂域模型,而另一个团队可以专注于读取模型和用户界面的场景。

  • 预计系统会随着时间的推移而发展并可能包含模型的多个版本,或者业务规则定期更改的场景。

  • 与其他系统集成,尤其是与事件溯源相结合,其中一个子系统的临时故障不应影响其他子系统的可用性。

在以下情况下不建议使用此模式:

  • 域或业务规则很简单。

  • 一个简单的 CRUD 风格的用户界面和数据访问操作就足够了。

  1. CQRS的优缺点?

  • 独立缩放。CQRS 允许读取和写入工作负载独立扩展,并可能导致更少的锁争用。
  • 优化的数据模式。读取端可以使用针对查询优化的模式,而写入端使用针对更新优化的模式。
  • 安全。更容易确保只有正确的域实体对数据执行写入操作。
  • 关注点分离。分离读写端可以使模型更易于维护和灵活。大多数复杂的业务逻辑都进入了写入模型。读取模型可以相对简单。
  • 更简单的查询。通过在读取数据库中存储物化视图,应用程序可以在查询时避免复杂的连接。
  1. CQRS如何落地?

  2. CQRS参考项目?

相关文章

  • 初识 - DDD-CQRS

    CQRS是什么? CQRS(Command and Query Responsibility Segregatio...

  • 团队开发框架实战—CQRS架构

    团队开发框架实战—CQRS架构 CQRS架构图 什么是CQRS? 这里只通过Udi Dahan的《Clarifie...

  • CQRS

    2018.04.22 command query responsibility segregation,命令查询责...

  • CQRS

    查询 (Query) 上图中,可以看到Query不是通过DB来查询,而是通过一个专门用于查询的Read DB(上图...

  • CQRS

    reference: a. 微软技术文档[https://docs.microsoft.com/en-us/azu...

  • CQRS没有成功的

    CQRS是一种架构风格。架构是一个系统的顶层结构那么出现这种情况是适合CQRS的:

  • CQRS模式应用Spring Boot+Scala框架集成开发

    今天的topic 比较难,Peter 老师一一道来。 1. 什么是CQRS CQRS最早来自于Betrand Me...

  • Sagas中的saga

    这个微软官方cqrs系列中讲saga的文章,个人觉得不错,分享给大家。 澄清术语 saga这个术语通常在CQRS中...

  • 软件架构模式

    CQRS架构 微服务架构 微核架构

  • 如何撸一个GO版本的基于CQRS的事件驱动框架

    CQRS架构和事件驱动思想用的越来越广泛,Java开发的同学在实践CQRS架构时,应该基本都用过axon-fram...

网友评论

      本文标题:CQRS

      本文链接:https://www.haomeiwen.com/subject/tgkdbrtx.html