tnblog
首页
视频
资源
登录
昔我往矣,杨柳依依。今我来思,雨雪霏霏
排名
13
文章
64
粉丝
20
评论
30
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

CQRS介绍

5964人阅读 2020/6/20 18:21 总访问:126183 评论:0 收藏:0 手机
分类: 架构

CRUD系统

我们平常最熟悉的就是三层架构,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体。然后通过业务层来处理业务逻辑,将处理结果封装成DTO对象返回给控制层,再通过前端渲染。反之亦然。

这里基本上是围绕关系数据库构建而成的“创建、读取、更新、删除”系统(即CRUD系统),此类系统在一些业务逻辑简单的项目中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题。

我们经常用到的解决方案就是对数据库进行读写分离。让主数据库处理事务性的增、删、改操作,让从数据库处理查询操作,然后主从数据库之间进行同步。但是这只是从DB角度处理了读写分离,从业务或者系统层面上来说,读和写的逻辑仍然是存放在一起的,他们都是操作同一个实体对象。

这时候,CQRS 就该登场了。


CQRS系统

简单的说,CQRS(Command Query Responsibility Segration)就是一个系统,从架构上把 CRUD 系统拆分为两部分:命令(Command)处理和查询(Query)处理。其中命令处理包括增、删、改。

然后命令与查询两边可以用不同的架构实现,以实现CQ两端(即Command Side,简称C端;Query Side,简称Q端)的分别优化。两边所涉及到的实体对象也可以不同,从而继续演变成下面这样。

当然了,CQRS 作为一个读写分离思想的架构,在数据存储方面也没有做过多的约束。所以 CQRS可以有不同层次的实现。

CQRS 实现方式

CQRS 可以有两种实现方式。

1 、CQ 两端数据库共享,只是在上层代码上分离。这样做的好处是可以让我们的代码读写分离,更容易维护,而且不存在 CQ 两端的数据一致性问题,因为是共享一个数据库的。这种架构是非常实用的(也就是我上面画的那种)。

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

评价

CQRS架构简介

CQRS架构简介前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海...

.netcore 3.1 MediatR:轻松实现命令查询职责分离模式(CQRS

.netcore 3.1 MediatR:轻松实现命令查询职责分离模式(CQRS)[TOC] 中介者模式 用一个中介对象封装一系列的对象交...

Python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

泛型简单介绍。。

说到了泛型,就介绍下泛型泛型不是特指具体类型,是一种可变类型,可以把他看做一个类型占位符,根据传入的类型 延迟声明具...

c使用unity实现依赖注入一:依赖注入介绍

依赖注入的简单介绍直接关联是这样滴,耦合性超高的。这里有一个设计原则:依赖于抽象,而不是具体的实现试想一下如果做了...

消息队列rabbitmq介绍

消息队列的一般作用 异步调用,延迟处理 应用解耦 流量消峰,处理高并发,秒杀等 说白了,消息队列就是一方生产消息,一方...

使用AppCan开发app之开发流程介绍

目前 App的开发主要包含三种方式:原生开发、H5开发、混合开发大概列举一下3种模式优缺点:原生:原生应用由于利用的是官方...

json介绍与基本用法

json介绍:Javascript object natationjs对象记号,用来标识对象格式就是一个键值对的形式作用:主要作为数据传输,也可以...

03--VueJs 的简单的介绍和基本的代码

Vue.js(官网地址:https://cn.vuejs.org/index.html)Vue.js 是目前最火的一个前端框架,除了开发网站,还可以开发手机App,...

.net web api介绍

MVC,可以使用WebAPI的功能,但是MVC主要是针对和页面viewWEBAPI不包含页面的功能,只专注提供数据,效率优于MVCWebApi其实...

svn介绍

SVN版本控制作用:用于多人开发项目(文件)的时候,控制项目,不需要拷贝把项目给svn管理,然后用户都可以进行上传和下载...

gRPC 四种服务类型介绍

gRPC 有四种服务类型分别是:简单 RPC(Unary RPC)、服务端流式 RPC (Server streaming RPC)、客户端流式 RPC (Client ...

webservice和wcf和web.api简单介绍

在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API。在.net平台下,你有很多的选择...

ddd介绍

领域服务(Domain Services)领域中的一些概念不太适合建模为对象,即归类到实体对象或值对象,因为它们本质上就是一些操作,...

abp框架的介绍和基用法

一、什么是ABP框架? ABP框架全称为“ASP.NETBoilerplateProject”,中文翻译为“ASP.NET样板项目”,诞生的主要目的就是...