当前位置:首页 > 科技  > 软件

微服务架构中实施CQRS失败的四个重大原因,引以为戒!

来源: 责编: 时间:2023-11-20 17:10:44 170观看
导读CQRS(命令查询职责分离)是一种在复杂商业应用中非常有用的模式,特别是当读操作和写操作有不同需求时。举个例子,写操作可能想要在关系型数据库中以规范化形式维护一个模型,而读操作则可以将模型表现为文档数据库中的文档。

CQRS(命令查询职责分离)是一种在复杂商业应用中非常有用的模式,特别是当读操作和写操作有不同需求时。举个例子,写操作可能想要在关系型数据库中以规范化形式维护一个模型,而读操作则可以将模型表现为文档数据库中的文档。但是理解CQRS并不容易。它涉及到读操作、写操作、事件、命令、领域驱动设计(DDD)、事件溯源以及最终一致性等概念。实现CQRS的常见方式是创建两个服务,并通过事件进行通信。O2p28资讯网——每日最新资讯28at.com

O2p28资讯网——每日最新资讯28at.com

我们的CQRS实现

为了将CQRS集成到我们的自定义框架中,我们使用了Axon框架。因为Axon是最容易使用的,并且对Spring Boot框架有很好的支持。架构图如下所示:O2p28资讯网——每日最新资讯28at.com

O2p28资讯网——每日最新资讯28at.com

我们为写入和读取创建了两个单独的服务。这两个服务通过 RabbitMQ 连接。O2p28资讯网——每日最新资讯28at.com

写入服务

写入服务处理所有的更新操作。我们并没有试图说服开发人员认为写请求就是真正的命令。控制器负责从请求中创建命令,并通过命令网关发布命令。控制器与命令处理程序之间的通信是异步的。命令处理程序通过加载聚合根,执行业务逻辑,然后将事件发布到RabbitMQ来处理命令。与此同时,事件也被保存到事件存储中。在这个实现中,事件存储充当我们的单一真相来源。O2p28资讯网——每日最新资讯28at.com

读取服务

读取服务处理所有读取请求。这里没有应用任何业务逻辑。通过监听发布到 RabbitMQ 的事件来更新数据。开发人员可以选择任何关系数据库或 MongoDB 作为读取数据库。我们希望开发人员实现的是读取优化的模型。它们可以存储数据而不进行任何规范化以提高读取性能。O2p28资讯网——每日最新资讯28at.com

这是一个非常简单的实现。我们将读取和写入分为两个服务,那么我们为什么失败了呢?O2p28资讯网——每日最新资讯28at.com

为什么我们失败了?

1. 异步性

当我们引入CQRS时,开发人员的主要抱怨是“我们将如何更新UI,我们不知道记录是否成功保存”。这是一个非常合理的问题,它涉及到我们所熟悉的同步通信方式。这种方式很好,也是我们从一开始就习惯使用的编码方式。因为它易于推理。我们可以得到请求的完整流程。O2p28资讯网——每日最新资讯28at.com

那么为什么我们在事件驱动架构(EDA)中使用异步调用呢?很简单,就是为了提高响应能力。EDA 与异步通信无关。我们可以在不使用异步通信的情况下实现 CQRS。O2p28资讯网——每日最新资讯28at.com

2.工作量大

第二个主要抱怨是“完成基于 CQRS 的微服务需要两倍的工作量。“ 开发人员必须创建两项服务:命令服务和读取服务。但这就是我们实施 CQRS 的方式。O2p28资讯网——每日最新资讯28at.com

3.对所有服务使用 CQRS

我们告诉开发人员的是在每个微服务中使用 CQRS。我们认为整个系统应该是一个CQRS系统。其结果是引入了难以管理的复杂性,这是我们在实施 CQRS 时犯的主要错误之一。O2p28资讯网——每日最新资讯28at.com

4.较小的微服务

我们不能说微服务应该有多小,但我们可以确定它的边界。我们可以使用DDD和限界上下文等概念来识别微服务边界。在 CQRS 中,我们使用聚合的概念。聚合是 逻辑上相关的域对象。例如订单和订单项目。我们将订单和订单项目视为一件事。当我们保存订单时,会将其与订单项目一起保存。当我们无法识别聚合时,最终会将其拆分为单独的微服务。这给 CQRS 增加了巨大的复杂性。当收到保存订单的请求时,要如何保存订单项目?O2p28资讯网——每日最新资讯28at.com

更小的微服务意味着更多的微服务。由于我们将 CQRS 应用于所有服务,最终使服务数量增加了一倍。这是无法控制的。O2p28资讯网——每日最新资讯28at.com

总结

这次失败的主要原因是因为错误的实现,并且大多数与 CQRS 无关。我们从中学到的是,必须理解微服务和 CQRS 的关键概念,然后才能将它们整合好。O2p28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-31456-0.html微服务架构中实施CQRS失败的四个重大原因,引以为戒!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 华为“会员中心”和“我的华为”合并升级:成长值 1:1 转化为经验值,12 月 20 日起上线

下一篇: 将 Spring 微服务与 BI 工具集成:最佳实践

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 使用AIGC工具提升安全工作效率

    使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 回归OPPO两年,一加赢了销量,输了品牌

    回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top