夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
架构师词条:CQRS 架构设计

CQRS 概念

CQRS(Command Query Responsibility Segration)系统,从架构上把系统拆分为两部分:命令(Command)处理和查询(Query)处理,是一个读写分离思想的架构。其中命令处理包括增、删、改。聊 CQRS 前先来了解下 CRUD 系统。

我们最熟悉的三层架构,通常都是通过数据访问层修改或查询数据,通过业务层处理业务逻辑,将结果封装成DTO对象返回给前端渲染,这样的系统我们称之为 CRUD 系统,此类系统适合小型,业务逻辑较为简单的系统。

在复杂大型的项目中,随着用户量和数据的增多,一般会采用数据库读写分离的方式解决性能问题,让主数据库处理事务性的增、删、改操作,让从数据库处理查询操作,然后主从数据库之间进行同步。从DB角度解决了读写分离,但从业务和代码结构角度读写逻辑仍然是在一起的,要解决此问题,就需要 CQRS。

CQRS 实现方式

  1. CQ 两端数据库共享,只是在上层代码上分离。这样做的好处是可以让我们的代码读写分离,更容易维护,而且不存在 CQ 两端的数据一致性问题,因为是共享一个数据库的。

  2. CQ 两端不仅代码分离,数据库也分离,然后Q端数据由C端同步过来。同步方式有两种:同步或异步,如果需要 CQ 两端的强一致性,则需要用同步;如果能接受 CQ 两端数据最终一致性,则可以使用异步。C端可以采用Event Sourcing(简称ES)模式,所有C端的最新数据全部用 Domain Event 表达即可而要查询显示用的数据,则从Q端的 ReadDB(关系型数据库)查询即可。


参考资料

CRUD玩的这么溜,你知道CQRS吗?

领域驱动设计DDD和CQRS落地

什么是CQRS?

CQRS架构

数据库(七),读写分离到CQRS

从壹开始微服务 [ DDD ] 之七 ║项目第一次实现 & CQRS初探

作者:暗夜余晖

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

0

支持

0

反对

posted @2020-5-7  拜读(143)

评论列表

评论内容:



喜欢请打赏

支付宝 微信

请放心支付