将 Apollo Federation 与微服务一起使用真的有意义吗?

Does using Apollo Federation with microservices actually make any sense?

我们最近将我们的技术堆栈从多个完全封装的微服务切换到 Apollo Federation。每个微服务都被转换为子图,超图由网关联合。

但最近感觉我们已经失去了使用微服务的一些主要优势——解耦部署、异步服务间通信、大量额外布线和花费时间协调开发以保持超图跨多个稳定环境。

感觉我们已经倒退到更加单一的工作方式,但拥有独立的团队和服务。

由于 Apollo 已经有一段时间没有出现了,并且是根据 GraphQL 规范开发的,该规范最初旨在加快 Facebook 在单体应用时的延迟问题,我不禁想知道它是否只是还没有完全支持微服务架构。我有时想知道同时做 Apollo Federation 和微服务是否有点过头了。

长话短说:

将 Apollo Federation 与微服务结合使用只是一种前沿的喧嚣尝试,可以减少 returns 投资,还是有实际意义?

有哪些(我想是少数)这样做有意义的用例?

我们如何保留在联合范式中使用纯微服务的好处(即,不同步协调大量服务之间的小变化)?

How do we retain benefits of working with pure microservices (namely, not coordinating small changes across tons of services in lockstep) in a Federation paradigm?

我认为 Apollo Federation 之所以有用,主要是因为关注点分离的原则。有了这个,您就不需要协调一致地跨大量服务进行小的更改。例如,假设您有一个 Reviews 子图和一个 Users 子图。只要两个子图知道另一个实体的密钥,它们就可以使用它而无需协调它们之间的更改。如果团队 A 实施仅与他们关注相关的事情,理想情况下,他们应该永远不必与另一个团队协调变更。

Is using Apollo Federation with microservices just a bleeding-edge buzzy endeavor with diminishing returns on investment or does it make actual sense?

如果您已经拥有彼此完全独立的微服务,那么使用 Apollo Federation 可能不是您想要使用的理想工具。还有其他开源解决方案可以帮助您将微服务组合在一个网关下(例如 GraphQL-mesh、Stepzen 等)——并且这些解决方案不需要您的微服务支持联合。话虽这么说,但仍有一些团队仍然坚持使用 Apollo Federation,因为它天生就有能力通过关注点所有权分离的概念以相对干净的方式帮助分离子图。因此,肯定存在使用 Apollo Federation 会产生影响的用例(即,当一个子图必须使用另一个子图拥有的实体时)。