我应该在哪里过滤微服务架构模式中的MS级外部服务响应?

问题描述 投票:0回答:3

我在微服务之前使用API​​网关(BFF)来处理UI需求。

例如,我有一个调用外部服务的微服务。

在UI中,我不需要(现在)外部服务提供的所有信息。我的MS应该只将当前需要的数据传递给BFF,还是传递整个响应,并且应该在BFF中“过滤” MS响应?

例如:

basic diagram

c# .net-core architecture microservices api-gateway
3个回答
0
投票

从单一责任原则的角度来看,最好返回仅相关数据,更多信息意味着对一个方法或动作承担多个责任。因为您不是系统中的唯一用户。当其他用户调用时,这会使他们感到困惑getUsers方法,但接收与用户无关的信息。


0
投票

取决于您要如何使用外部用户服务。

如果您认为该服务将服务于不同类型的请求,并且最好返回所有信息,则该服务应返回所有内容。然后,您的BFF将过滤以仅返回所需的数据。

如果您仅出于此目的使用此外部用户服务,则它应仅返回所需的服务。

总之,您需要具有良好的域设计,以决定服务的大小,要传输的数据量,要消耗该服务的其他组件的数量。


0
投票

问题的答案取决于速度因子

如果需要真正快速服务,则需要使用最少的数据传输操作(包括BFF层)来建立执行路径。

如果外部服务层仅具有一个执行路径和一个需要您的API,则只需在微服务端过滤额外的数据。这减少了MS与前端层之间的数据传输量。

或者您可以将外部用户服务结果缓存在MS或BFF层上,以大大提高应用程序的速度。当然,如果可能并有道理。

如果快速因素不那么重要怎么办?通常,提高速度和/或提高性能可以使您编写更多的代码,例如单独的执行路径或其他内容。如果速度因素不是很重要,则可以减少代码量,并重复使用正常请求和已过滤请求之间的相同执行路径,并在前端进行过滤结果。

© www.soinside.com 2019 - 2024. All rights reserved.