如何最好地将多个微服务的搜索服务与 API 网关集成

How best to integrate a search service for multiple microservices with an API gateway

我们有一堆微服务,前面有一个 API 网关。我们已经创建了一个搜索服务,可以跨服务搜索并为客户端应用程序聚合数据。我们有两种解决方法:

  1. 让 API 网关直接联系搜索服务,为其提供有关在哪个微服务中搜索的上下文。
  2. 让 API 网关直接联系每个微服务(我们目前已经在这样做),让每个微服务自己处理联系(或不联系)搜索服务。

我喜欢第二种方法,因为它可以将搜索抽象完全隐藏在 API 网关之外,但是由于每个微服务都负责联系搜索服务,因此可能存在跨服务的搜索处理逻辑重复,我们希望避免这种情况,因为我们拥有的服务数量巨大。

您建议采用哪种更好的模式?我可以利用比这些更好的架构吗?

我不知道搜索服务的确切职责是什么,但如果像我想象的那样是一种聚合其他服务的信息以向用户显示的服务,我会使用其中一个来处理这个问题两种方法:

  1. 搜索服务会定期调用每个微服务,询问所需信息并进行相应处理。

  2. 如果搜索服务不知道何时会生成此信息,并且您想近乎实时地更新它而无需进行密集轮询,我将使用消息代理,其中不同的微服务将生成带有信息的事件,搜索服务将使用它们并相应地更新其信息

无论哪种方式,我都不会使用 API 网关作为协调器来调用不同的微服务,因为 API 网关不应该知道任何业务逻辑,它的责任只是成为外部呼叫的单一入口点,可能还有其他交叉任务,如审计或授权