## 概述 GraphQL Federation通过实体与子图实现横向扩展与自治演进。网关基于路由计划将查询拆分与合并,保证跨子图的正确性与性能。需要对子图健康与超时进行治理。 ## 关键实践与参数 - 实体键:`@key(fields: "id")` 用于跨子图引用 - 路由计划:网关根据字段所属子图拆分与拼接 - 超时与重试:为子图调用设置超时与重试策略 - 观测:记录每子图延迟与错误率,分析瓶颈 ## 示例/配置/实现 ```graphql # 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]! } ``` ```js 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 - 对热点字段进行缓存与数据加载优化

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.967619s