1

计划使用 Apollo Federation 将我的 PHP API 迁移到 Graphql。经过一番研究,我发现它是通过以下方式完成的:

在此处输入图像描述

我的问题是:

  1. 有没有更好的方法来创建联合服务,所以它不是一个单独的层(每个 REST API 1 个)?可能类似于之前的模式拼接方法,所有模式都可以放在一个地方并在最后拼接在一起(而不是每个服务的特定联合层)。

  2. 如果这是推荐的方式,我该如何部署此基础架构?从图中,这是否意味着我有 5 个实例正在运行以涵盖所有服务?

  3. 是否建议在一个实例中运行网关和联合服务(从图表 - 在一个实例中运行 3 个服务器)?

4

1 回答 1

1

让我知道它是否有帮助。

  1. 当您想要打破 apollo 服务器的非联合实现的整体结构时,联合服务非常有用。它可以通过结合微服务最佳实践来设计。您可以根据服务应该负责的功能来拥有联合服务,而不是盲目地为每个休息端点提供一个联合服务。一项服务可以调用多个休息端点。这将使您能够更好地控制基础架构级别的扩展、保护和管理服务。一个例子可以像亚马逊一样简单,其中项目浏览命中将远远超过购买交易。在这种情况下,您可以拥有一个提供浏览数据的联合服务,而另一个可以管理事务。

2 & 3. 是的,您需要分别部署所有组件。我建议将所有服务都放在同一个 VPC 集群中,这样您就不必担心网络层的安全性。如果服务部署在多个集群中,它将为每个请求添加处理防火墙和 https/tls,这将由于网络调用而导致不必要的延迟。虽然它会以毫秒为单位,但可以很容易地避免。

于 2021-01-28T15:04:30.670 回答