概述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对热点字段进行缓存与数据加载优化

发表评论 取消回复