CQRS 架构

CQRS 架构CQRS 是一个读写分离的架构思想 全称是 CommandQuery 即命令查询职责分离 表示在架构层面 将一个系统分为写入 命令 和查询两部分 一个命令表示一种意图 表示命令系统做什么修改 命令的执行结果通常不需要返回 一个查询表示向系统查询数据并返回 读写两边可以用不同的架构实现 方便实现 CQ 两端的分别优化 CQRS 架构里通常读

CQRS 是一个读写分离的架构思想,全称是:Command Query Responsibility Segregation,即命令查询职责分离,表示在架构层面,将一个系统分为写入(命令)和查询两部分。一个命令表示一种意图,表示命令系统做什么修改,命令的执行结果通常不需要返回;一个查询表示向系统查询数据并返回。读写两边可以用不同的架构实现,方便实现 CQ 两端的分别优化。

CQRS 架构

CQRS 架构里通常读、写操作的是不同的存储系统,两个存储系统之间通过事件消息来进行同步。因为同步有一定延迟,所以 CQRS 的一致性模型是最终一致性。CQRS 架构适用于什么场景呢?

  1. 应用的读模型和写模型差别比较大。
  2. 单一的存储模型无法同时满足高性能的读和写需求。

在机票搜索业务中,因为机票报价数据量特别大,因此需要做数据库的分库分表。站在机票代理商角度看,应该以代理商维度分库,因为代理商操作报价的时候只修改自己的报价,代理商侧有读也有写,写操作(修改报价) QPS 不高,但每次操作的数据量很大。而站在用户角度看,应该以航线维度分库,因为用户关注的是搜索的航线的全部代理商报价。

针对这样两种完全不同的读写需求,非常适合使用 CQRS 架构来解决,采用两套 DB 来存储报价数据:一套以代理商维度分库,一套以航线维度分库。两者之间的数据同步,可以采用应用层发变更消息解决,也可以通过 Canal 监听 binlog 进行同步。变更消息一般发送到分布式消息队列里(比如 RocketMQ、Kafka),支持流量削峰,方便扩展。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222200.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:20
下一篇 2026年3月17日 下午4:21


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号