gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:21:49 26 4
gpt4 key购买 nike

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

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

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

例如:

basic diagram

最佳答案

BFF 模式的全部要点首先是为前端提供一个专门构建的接口(interface),并且它们可以自由地从包含它们的服务中收集数据。我建议:

  1. 如果 Microservice 微服务(在您的图表中)在返回数据之前以某种方式操作数据,则在写入数据时操作它们(如果可以的话,可能通过观察外部系统中的某些事件)并存储处理后的结果(可能是本地副本)。
  2. 如果您不需要在数据发送到 BFF 时对其进行操作,那么您正在做的任何处理(理论上)都可以异步完成,并且在请求的上下文之外,而不是在-线,并且如果它失败,则有不必要的不​​可用风险(这称为时间耦合)。

如果以上两种情况之一可行,我非常强烈建议您避免菊花链式同步网络请求,因为这会大大降低您的可用性(如果每个服务的可用性都达到 95%,则两个加起来有 90% 可用,而不是 95%,这很快就会变坏)。延迟是一个问题(正如@picolino 正确提到的那样),但根据我的经验,延迟比可用性更受关注的情况要少得多。无论如何,扁平化调用堆栈将大大减少处理请求所花费的时间。

从职责分配的角度来看,上述两种选择也都不错;一个服务将拥有客户数据,而其他数据不需要拥有传递,BFF 可以异步通知它执行它需要的任何横切关注点。

当且仅当以上都不可行时,我建议您在做出决定之前稍微考虑一下您正在开发的服务的契约(Contract)及其所需的数据。盲目地传递完整的数据集可能是也可能不是一个好主意,这取决于您那里的 微服务 服务的职责性质。

关于c# - 我应该在哪里过滤微服务架构模式中的 MS 级外部服务响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60381734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com