---
title: GraphQL Federation 子图治理与路由策略(Apollo Gateway 与验证)
date: 2025-11-26
keywords:
- Federation
- Apollo Gateway
- 子图
- 路由
- @key
description: 使用Apollo Federation治理子图与路由策略,通过实体键与扩展字段实现跨子图聚合查询,并提供容错与性能验证方法。
categories:
- 文章资讯
- 技术教程
---
概述
GraphQL Federation通过实体与子图实现横向扩展与自治演进。网关基于路由计划将查询拆分与合并,保证跨子图的正确性与性能。需要对子图健康与超时进行治理。
关键实践与参数
- 实体键:
@key(fields: "id")用于跨子图引用 - 路由计划:网关根据字段所属子图拆分与拼接
- 超时与重试:为子图调用设置超时与重试策略
- 观测:记录每子图延迟与错误率,分析瓶颈
示例/配置/实现
# products 子图
type Product @key(fields: "id") { id: ID!, name: String }
# reviews 子图
extend type Product @key(fields: "id") { id: ID! }
type Review { id: ID!, productId: ID!, body: String }
type Query { reviews(productId: ID!): [Review]! }
import { ApolloServer } from '@apollo/server'
import { ApolloGateway } from '@apollo/gateway'
const gateway = new ApolloGateway({
serviceList: [
{ name: 'products', url: 'http://products:4001/graphql' },
{ name: 'reviews', url: 'http://reviews:4002/graphql' }
]
})
const server = new ApolloServer({ gateway })
await server.start()
验证
- 跨子图查询:查询
Product { id name }与其reviews,验证路由与聚合返回正确 - 子图故障:下线
reviews,网关返回部分数据并记录错误,验证告警触发 - 性能测试:记录每子图延迟,定位瓶颈并优化
- 计划稳定:变更子图Schema后通过合并与路由计划测试保持兼容
注意事项
- 实体与键需稳定演进,避免跨子图引用断裂
- 为子图设置速率限制与熔断,防止单点瓶颈影响整体
- 构建与部署需自动化生成与校验Supergraph SDL
- 对热点字段进行缓存与数据加载优化

发表评论 取消回复