【问题标题】:Data Dependency Among Microservices微服务之间的数据依赖
【发布时间】:2022-01-27 05:36:37
【问题描述】:

在我的微服务架构中,我有一堆服务 A、B、C、D 等。

例如:服务 A 负责管理学生。服务 B 负责管理学生参加的评估。

服务 B 将studentid 存储在表中以供参考。但是,当我必须查询在给定时间段内进行的所有评估时,服务 B 必须调用服务 A 以获取学生姓名。因为客户端应用程序需要名称。不是身份证。

因此,我看到很多服务之间的网络调用。所以我认为服务 A 可以在新学生注册时引发事件。服务 B 将使用该事件并将学生信息存储在其数据库中。 (学生姓名更新也是如此)。

问题:

这是一种不好的做法吗?这种方法的优缺点是什么?

随意提出任何替代方案。

【问题讨论】:

    标签: microservices event-driven-design


    【解决方案1】:

    发布事件并将数据复制到每个服务的数据库中是一种完全合理的方法,可以最大限度地减少网络调用。我想您可能会发现我对类似问题的回答也很有帮助(选项 1 与您描述的相同):

    https://stackoverflow.com/a/57791951/1563240

    【讨论】:

      【解决方案2】:

      允许跨服务进行一些数据复制是很好的,您可以通过许多不同的方式来做到这一点。

      一种选择是让服务 A 在新学生注册时发布事件。

      另一种选择(这可能更简单)是,当您针对 Service B 创建新评估时,您可以在 CreateAssessment 命令中提供用户名。这样,当创建新用户时,您无需在两个服务之间发布任何事件。

      【讨论】:

      • 替代建议有一个可能性,即如果名称被更新,服务 b 永远不会知道。但我明白了。
      • 但同时,这很重要吗?例如,如果您创建发票,它始终反映当时的客户,如果您以后更改地址,则不应更改旧发票。也许您可以对评估进行同样的推理?如果学生姓名发生变化,那么这不会影响旧的评估吗?
      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 2015-09-03
      • 2021-01-11
      • 1970-01-01
      • 2016-10-29
      • 2020-05-21
      • 2022-01-08
      • 2021-05-12
      相关资源
      最近更新 更多