微服务间的数据依赖
Data Dependency Among Microservices
在我的微服务架构中,我有一堆服务 A、B、C、D 等
例如:服务A负责管理学生。服务B负责管理评估,学生拿。
服务 B 将 studentid
存储在表中以供参考。但是,当我必须查询在给定时间段内进行的所有评估时,服务 B 必须调用服务 A 以获取学生姓名。因为客户端应用程序需要名称。不是id。
因此,我看到服务之间有很多网络调用。所以我在想服务 A 可以在新学生注册时引发事件。服务 B 将使用该事件并将学生信息存储在其数据库中。 (同样适用于学生姓名更新)。
问题:
这是一种不好的做法吗?这种方法的优缺点是什么?
欢迎提出任何替代方案。
发布事件并将数据复制到每个服务的数据库中是减少网络调用的一种完全合理的方法。我想您可能会发现我对类似问题的回答也很有帮助(选项 1 与您描述的相同):
允许跨服务进行一些数据复制是件好事,您可以通过许多不同的方式来实现。
一种选择是在新学生注册时让服务 A 发布事件。
一种替代方法(可能更简单)是当您针对 服务 B 创建新评估时,您将提供用户名作为 CreateAssessment 的一部分 命令。这样你就不需要在创建新用户时在两个服务之间发布任何事件。
在我的微服务架构中,我有一堆服务 A、B、C、D 等
例如:服务A负责管理学生。服务B负责管理评估,学生拿。
服务 B 将 studentid
存储在表中以供参考。但是,当我必须查询在给定时间段内进行的所有评估时,服务 B 必须调用服务 A 以获取学生姓名。因为客户端应用程序需要名称。不是id。
因此,我看到服务之间有很多网络调用。所以我在想服务 A 可以在新学生注册时引发事件。服务 B 将使用该事件并将学生信息存储在其数据库中。 (同样适用于学生姓名更新)。
问题:
这是一种不好的做法吗?这种方法的优缺点是什么?
欢迎提出任何替代方案。
发布事件并将数据复制到每个服务的数据库中是减少网络调用的一种完全合理的方法。我想您可能会发现我对类似问题的回答也很有帮助(选项 1 与您描述的相同):
允许跨服务进行一些数据复制是件好事,您可以通过许多不同的方式来实现。
一种选择是在新学生注册时让服务 A 发布事件。
一种替代方法(可能更简单)是当您针对 服务 B 创建新评估时,您将提供用户名作为 CreateAssessment 的一部分 命令。这样你就不需要在创建新用户时在两个服务之间发布任何事件。