1

EDA中事件内容的设计权衡

 1 year ago
source link: https://www.jdon.com/67936.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

EDA中事件内容的设计权衡 - 极道

用例:下订单。
成功下订单后(付款成功并且向餐厅成功下订单后),订单服务会发布一个事件:

  1. 食品配送合作伙伴服务,用于安排送货人员到达餐厅、挑选食物并将订单配送到用户的地址
  2. 将积分记入用户帐户的忠诚度服务
  3. 通知服务通过电子邮件/短信/移动推送向用户发送订单确认通信。
  4. 分析服务,用于准备应用程序的所有与分析相关的仪表板 - 每天/小时、每个位置收到的订单总数等。

在我们最初的实施中,我们采用了非常精益的方法 -

  1. 订单服务发布一个事件,其中仅包含用户成功下达的订单的订单 ID。
  2. 事件的消费者服务对订单服务进行 API 调用,以获取所下订单的更多详细信息,并进一步对其他微服务(如用户服务和餐厅服务)进行其他 API 调用,以获取执行其业务逻辑所需的其他数据。

当被问及为什么采用这种方法时?他回应说——

  1. 嗯,重要的一点是 - 我不必担心事件有效负载的版本控制和合同管理。
  2. 订单服务充当所有所下订单的单一真实记录,并且所有消费者服务在使用订单 ID 请求数据时始终从订单服务获取最新数据。因此,如果订单在下订单后立即被取消,则处理“下订单”事件时的消费者服务将获取表示订单已取消的最新数据,因此不会进行进一步的处理。

这种方法遇到什么问题吗???
系统的可扩展性和性能受到严重打击!

由于事件仅携带订单 ID,因此为了处理订单,所有消费者服务(例如忠诚度服务、交付合作伙伴服务、通知服务、分析服务)开始多次调用订单服务和其他域服务,以获取执行任务所需的数据。业务事务,这导致域服务负载增加,并且作为级联结果,系统的整体性能开始下降。

怎么解决这个问题的?

我们重新查看了发送的事件,并修改了有效负载以携带更多数据 - 它现在包含所有其他消费者服务所需的所有信息,以帮助他们执行业务需求,而无需进行额外的查找。

  1. 对于成功下达的每个订单,订单服务都会调用一次用户服务和餐厅服务以获取其他数据。因此,来自每个消费者服务的多个 API 调用将被针对用户和餐厅服务的单个 API 调用所取代。
  2. 使用每个消费者服务所需的所有数据创建一个事件并发布该事件。

这种修改后的方法的优点是:

  1. 消费者服务和其他领域服务之间的通信量大大减少,消费者服务不再需要多个重复的数据请求来处理单个订单,从而减少了服务数据库的负载,从而提高了整个系统的可扩展性和性能。

这种方法的缺点是:

  1. 现在我们需要管理合同管理和事件负载的版本控制。订单服务现在需要了解每个消费者服务的确切要求,并且必须确保事件中存在所有这些必需的属性。如果添加了需要使用已下订单事件的新服务,或者现有服务需要更多数据,则消费者服务所有者必须联系订单服务团队以获取所需的附加数据和新版本的事件将会被浮动。现在,您需要不断考虑弃用旧版本、保留最后 n 个版本等策略,这会影响订单服务的可维护性软件特性。
  2. 您进入了消息耦合——并非所有消费者服务都会消耗事件的所有属性。忠诚度服务可能只需要用户 ID 和订单金额等属性,而送货合作伙伴服务则需要取餐的餐厅地址以及必须送货的用户地址。交付合作伙伴服务所使用的现有属性的更改(例如属性名称的更改)也可能会影响忠诚度服务读取事件的方式。
  3. 由于事件携带整个有效负载,因此它充当所有消费者服务的记录系统。如果用户立即取消已下订单,则消费者服务仍将处理已下订单事件,然后处理已取消订单事件。

在下面几点权衡:

  • 系统的可扩展性和性能
  • 活动的合同管理和版本管理
  • Stamp 耦合
  • 单一记录系统

我们选择了 "可扩展性 "和 "性能",并增强了我们的系统,以解决上述其他痛点。


Recommend

  • 47

    新浪科技讯 北京时间11月22日早间消息,据路透社报道,美国亨内平县(Hennepin County)当地检方正在权衡考量刘强东被指强奸案的相关证据,寄希望于推动此案摆脱“各说各有理”的困境。路透社获悉,亨内平县&nbs

  • 40

    SD-WAN是目前最热门的网络新技术之一,许多分布式组织纷纷采用SD-WAN解决方案。SD-WAN的吸引力在于,它将多个物理WAN链路组合到一个逻辑网络中,并能够加速部署在内部数据中心和云中的应用程序的性能。 本文介绍IT组织...

  • 64

    技术负债 在技术圈,有一个债务术语叫【技术负债】或者【技术债务】。【技术负载】带来的显性和隐性成本是非常高的。 显性的是技术不给力, 运营/产品/商业团队都很难受,而这种难受实际带来的损失会比想象...

  • 27
    • jiajunhuang.com 4 years ago
    • Cache

    计算机中的权衡(trade-off)

    计算机中一切都是权衡(trade-off)。所谓权衡,即在两个极端中取一个相对中间的位置,不是非黑即白,而是根据实际情况作出取舍, 也许偏向A多一点,从而偏向B少一点,也许是反过来。 A <------------------------> B \...

  • 13

    前言:在构建加密项目时,总会涉及到权衡。因为去中心化往往意味着在项目启动上具有难度,在用户体验很难达到易用,而且成本较高,扩展性有限。在这样的情况下,为了达成最终的目标,如何来平衡中心化和去中心化的程度,如何来迭代?微妙...

  • 11

    周日晚间,“猎户星座”,全家便利店的美式咖啡,酝酿着困倦与新一周的未知,初冬的天气却毫不冷静。“有时你乘起风,有时你沉没,有时午夜有彩虹”。一周前上架了新的 Sketch 组件库,也就是聚焦于社交类产品设计需求的 WireframeKit “Social”,同时也开始...

  • 12
    • www.jinse.com 3 years ago
    • Cache

    各 Rollup 解决方案的权衡研究

    各 Rollup 解决方案的权衡研究 以太坊爱好者 刚刚 随着以太坊生态的发展拉动人们对区块...

  • 4

    聚焦目标,取舍有道 - 关于设计中的权衡与决策 明明是周六,但是怎么都觉得是周日啊,因为明天要上班...眼下看着宰相刘罗锅...上次看还是初一的时候,1996年;故意暴露年龄了噜。短暂...

  • 7

    EDA 事件驱动架构与 EventBridge 二三事 这篇文章很早之前就想写出来了,迫于对时间管理不到位一直被滞后。等真正要上前给人讲东西的时候才开始准备。这里就先当作一...

  • 5

    DDD设计聚合体的权衡过程 | Matt Bentley 解道Jdon ...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK