Apollo Federation 相对于 GraphQL Modules 这样的本地模块化库有什么好处?

What are the benefits of Apollo Federation over a local modularization library like GraphQL Modules?

在实施 GraphQL 解决方案时,将图的各个方面模块化以简化对完整图的理解、实施和测试通常是有利的。 Apollo, a popular GraphQL solution vender, provides Apollo Federation as a solution to this problem, deprecating "stitching" solutions. Other solutions, such as GraphQL Modules, implement this sort of behavior on a local server level. GraphQL Modules even integrates with Apollo Federation,而且它们不一定互斥。

如果有一些指南可以说明为什么需要在多个服务器上联合 GraphQL 实现,那将非常有帮助。它增加了很多复杂性。 Apollo Federation 在什么时候比像 GraphQL Modules 这样的本地模块解决方案有意义。您为什么会考虑同时使用两者?

它们都允许将 GraphQL 模式划分为不同的较小模式,然后再将它们组合起来。但主要区别之一是 GraphQL 模块只能在单个服务器上工作,而 Apollo Federation 可以跨不同服务器工作。

所以,假设您将一个架构分为 3 个模块(用户、产品和评论),如下所示:

GraphQL Module 只允许所有模块在同一台服务器上实现。它提供了一种固执己见的方法来指导您将每个模块配置(例如其模式和解析器)分离到它们自己的代码包中。

另一方面,Apollo Federation 允许这 3 个模块在单独的 servers/microservices 上实现,并允许您以声明方式将它们组合为单个 GraphQL 服务器。

这实际上是两个不相关的概念。

模式模块化是一种模式,旨在让您的代码井井有条且可读。可以使用 graphql-modules 或 merge-graphql-schemas, but it can also be implemented using the existing type extension syntax.

等库来完成

A​​pollo Federation 是一种类似于微服务架构的分布式架构,允许您实施多个服务,每个服务公开一个单独的模式并由一个网关聚合。我们可以将每个单独的服务视为网关公开的模式的 "module" —— 但这种模块化是 偶然的 并且 不是 使用联邦的重点。 关键是通过实施这种架构可以获得额外的可扩展性。

所以这真的归结为 。如果您有一个大型团队在开发单体应用程序,那么您获得的可扩展性可能会超过增加的复杂性和基础架构成本。否则,您应该仔细考虑联合是否对您的应用程序有意义。