使用 Cosmo 运行 Federation:无 Glue Code,无意外

发布: (2026年3月10日 GMT+8 02:57)
4 分钟阅读
原文: Dev.to

Source: Dev.to

如果你已经阅读了第 1 部分,我们已经用美食广场的比喻走过了 Federation。这一次,我们来深入了解 Cosmo 实际上做了什么。

这并不是魔法。Cosmo 使用 schema 本身来验证、路由和协调你的 GraphQL 子图,从而让 bug 更少、意外更少,也不需要维护胶水代码。

🧠 Schema Composition:在上线前捕获问题

每个早晨(或 CI 运行时),每个团队都会把自己的子图 schema 提交给 Cosmo。Cosmo 将它们组合成一个 supergraph 并检查:

  • 重复的类型或字段名
  • 所有权冲突
  • 另一个子图所需的缺失类型或字段

如果有任何问题,组合会失败并把 schema 返还给团队审查。你会看到到底是哪个服务导致了问题以及原因——在它破坏你的 API 之前。

📦 Query Planning:基于所有权的路由

一旦所有内容都组合完成,Cosmo 使用 supergraph 来规划查询的解析方式。每个字段都会映射到拥有它的子图。

示例客户端查询:

query OrderSummary {
  sides { name }
  drinks { type }
}

Cosmo 构建的查询计划如下:

1. Send `sides` query to Fry Truck subgraph
2. Send `drinks` query to Smoothie Truck subgraph
3. Stitch together response and return to client

所有这些都由 schema 元数据驱动——没有手写的路由规则,也没有猜测。

⚠️ 当出现故障时:Cosmo 处理回退

如果服务宕机或字段出错,Cosmo 不会让整个响应崩溃。相反它会:

  • 按已定义的回退规则处理
  • 如有配置则重试
  • 在需要时返回部分数据并抑制内部错误

回退行为在路由层中定义,而不是在运行时随意猜测。

📡 实时订阅:子图 + Pub/Sub + Cosmo

订阅在 federation 中非常困难。Cosmo 通过 EDFS(事件驱动的联邦订阅)解决了这个问题。每个子图将事件发送到 NATS 或 Kafka 等 pub/sub 系统。Cosmo 监听这些流,使用组合好的 schema 和路由元数据将事件映射到正确的 GraphQL 订阅,并过滤掉客户端未请求的内容。

  • 无轮询
  • 无全局广播
  • 无手动接线

Cosmo 通过你已经用于查询的同一套感知 schema 的路由层处理所有工作。

🧰 你专注于功能,Cosmo 负责 Federation

你不必从头构建编排逻辑。Cosmo 负责:

  • Schema 组合
  • 查询规划
  • 运行时路由
  • 错误屏蔽与回退
  • 联邦订阅

它可以连接你的 GitHub 仓库,通过 CLI 部署,并让你在 Studio 中跟踪所有内容。Cosmo 不仅仅是搬运数据——它是让你的联邦平台在大规模下保持可靠的关键。

接下来: Schema 合约以及 Cosmo 如何在问题出现之前强制执行它们。

0 浏览
Back to Blog

相关文章

阅读更多 »

介绍 Attune.js

封面图片:Introducing Attune.js https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads....