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

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

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

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

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

我们的CQRS实现

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

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

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

写入服务

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

读取服务

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

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

为什么我们失败了?

1. 异步性

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

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

2.工作量大

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

3.对所有服务使用 CQRS

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

4.较小的微服务

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

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

总结

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

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

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

上一篇: 管理 Spring 微服务中的分布式会话

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

标签:
  • 热门焦点
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    7月28日,全球数字娱乐领域最具知名度与影响力的年度盛会中国国际数码互动娱乐展览会(简称ChinaJoy)在上海新国际博览中心盛大开幕。作为全球领先的科
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
Top