【微服务理论】CQRS的实际应用

分层

所谓架构就是一层加一层。

当我们一层过于冗余的时候,就加一层。
当我们两层之间耦合太严重的时候,加一层。
当我们不希望每个人都做这个事情的时候,就加一层帮我们做。

CQRS

CQS(Command Query Separation,命令查询分离)

很多时候,我们希望访问的更快,减少查询对接口的影响,而这个数据是定期刷新的。怎么办?

命令和查询分离。用一个命令定期生成数据到缓存,然后查询直接查询这个缓存。

异步队列也是一样的逻辑。

将立即要做的事情完成了就返回接口,然后将不重要的事情丢到队列慢慢处理。

例子1:活动

活动是持续进行的,而活动数据又比较大,那么查询比较耗时,避免不了第一个人卡的问题(后面的人会读到缓存)。

那么在后台用一个命令一分钟算一次,更新数据,读的时候第一个人卡的问题就不存在了。

例子2:稿件和审核:

稿件是一个数据量很庞大、字段很多的数据。
而审核有后台的权限、审核时间、执行人等等字段。

两者相关的属性只有一个:是否显示

那么,我们是否需要让他们互相关注对方的所有字段?不需要!

所以采用一个队列,将我们要的属性抽成一个新表,然后做后台逻辑即可。

在这里插入图片描述

例子3:还是活动

如果一个活动,我们要获取这段时间内,收到某几种礼物的排行。

最简单的是直接查礼物记录总表。

但是我们只用关心几种礼物,也可以将礼物记录抽出一部分,专门做活动排行。则计算的会更快,也更灵活。

比如:每个时间段同一个礼物加的活动分值不一样,则这个方法就很好用了。

优缺点

优点:

  • 加快了访问速度。
  • 简化了逻辑。写的只用写,读的只用读。
    缺点:
  • 如果没有人访问也会有消耗。
  • 有些场景具有延时性,毕竟异步了。

总结

将不重要的事情剥离。

这个不重要的事情可以是:

  • 不重要的数据—抽离数据。
  • 不重要的处理—走异步队列。

猜你喜欢

转载自blog.csdn.net/happy_teemo/article/details/113140525