与像GraphQL Modules这样的本地模块化库相比,Apollo Federation有什么好处?

时间:2019-12-16 18:27:45

标签: graphql apollo apollo-server federation

在实施GraphQL解决方案时,通常有利于将图形的各个方面模块化以简化对完整图形的理解,实现和测试。 Apollo是流行的GraphQL解决方案供应商,提供Apollo Federation作为此问题的解决方案,不赞成使用“缝合”解决方案。其他解决方案,例如GraphQL Modules,在本地服务器级别上实现了这种行为。 GraphQL模块甚至是integrates with Apollo Federation,而且它们不一定是互斥的。

有一些指导方针来指示为什么需要在多个服务器上联合GraphQL实现非常有帮助。它增加了很多复杂性。在什么时候Apollo Federation对像GraphQL Modules这样的本地模块解决方案有意义。您为什么考虑同时使用两者?

2 个答案:

答案 0 :(得分:1)

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

因此,假设您将模式分为以下三个模块(用户,产品和评论):

enter image description here

GraphQL模块仅允许所有模块在同一服务器上实现。它提供了一种自以为是的方式来指导您将每个模块配置(例如其架构和解析器)分离到各自的代码包中。

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

答案 1 :(得分:1)

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

模式模块化是一种模式,用于保持代码的组织性和可读性。可以使用诸如graphql-modules或merge-graphql-schemas之类的库来完成,但也可以使用现有的type extension syntax来实现。

Apollo Federation是类似于微服务体系结构的分布式体系结构,它允许您实现多个服务,每个服务公开一个单独的模式并由单个网关聚合。我们可以将每个单独的服务视为网关公开的架构的“模块”,但是这种模块化是偶然的,不是使用联合的重点。 重点是通过实现这种架构可获得的额外可伸缩性。

因此,这实际上可以归结为why you would want to implement a microservices infrastructure in the first place。如果您有一个庞大的团队来处理整体应用程序,那么您获得的可伸缩性可能会超过增加的复杂性和基础架构成本。否则,您应该仔细考虑联盟对您的应用程序是否有意义。