前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务-数据聚合CQRS

微服务-数据聚合CQRS

作者头像
用户2825413
发布2020-09-18 14:43:46
1.3K0
发布2020-09-18 14:43:46
举报

微服务思考

微服务经常是按业务维度划分多个服务(当然还有其他各种考虑维度), 划分为多个维度后, 好处自然很多, 其中也会有一些问题, 比如我们讲的数据依赖问题

比如前端要展示一个商品详情页面, 不仅依赖商品服务、还需要依赖库存服务、评分服务等等, 那么谁来对接这套服务呢?

在我们划分众多微服务的同时, 在这些微服务的上层肯定要有一层专门提供给前端聚合数据, 我们通常称为 BFF(Back-end For Front-end), 服务于前端的后端服务, BFF功能是根据业务需求经常变化调整的

数据 JOIN 问题

普通的用户按这种方式是没有问题的, 每个服务独占一个数据资源, 之间互不影响, 举例如果为运营后台数据查询聚合的时候, 这种在数据资源独立的情况下, 需求实现起来是非常困难的.

通常我们采用数据分发预聚合方式来满足此类需求, 将资源聚合到 mysql、mongo、redis、es提供查询。其实这也是我们常说的 CQRS 模式

我们看下面两种预聚合的方式:

1.事务性发件箱

此模式对业务是有一定的侵入性的, 上图是在插入业务表后, 同时将对应事件记录插入到发件箱表中, Relay任务会定时读取 发件箱表, 推送给对应消费者, 存入对应仓库。

2.变更事件捕获 ( CDC )

是指捕获mysql binlog或mongo oplog等日志变更记录, 此方式对业务没有侵入, 但是业务运维难度较高.

Command Query Responsibility Segregation ( CQRS )

上面我们提到了一下 CQRS, 简单描述的话可以理解为资源的读写分离, 其实在工作中这种模式是非常常见的.

通过各个服务写入->数据聚合到ES、REDIS等->数据中心读取

这种方式写入和读取拆分成了两种数据资源, 带来的好处是更容易和更灵活满足业务需求, 降低对原服务的影响. 当然也扩大了数据不一致性的时间窗口, 需要从上层用户体验设计上去配合支持这种系统(比如异步通知等)

资料分享

https://martinfowler.com/bliki/CQRS.html

本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-14,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 呆呆熊的技术路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务思考
  • 数据 JOIN 问题
    • 1.事务性发件箱
      • 2.变更事件捕获 ( CDC )
      • Command Query Responsibility Segregation ( CQRS )
      • 资料分享
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com