6. 子图规划
4m

概览

我们已经进入迁移计划的最后一步:开始将分成小块!这一步实际上非常重要,我们可以进一步将其细分为多个步骤。在本课中,我们将 :

  • 决定哪些 将成为我们的一部分
  • 还将使用一个模板设置另一个

规划和准备

确定从何处开始拆分 会让人不知所措。如果您有一个大型复杂图表,有多个团队参与,并且客户端依赖于它的持续,尤其如此。我们建议牢记联合的核心原则:逐步采用。我们将一次按一个问题解决单片子图的功能。

为了帮助我们进行规划,我们将把它分解成几个步骤

  1. 识别实体
  2. 识别s
  3. 决定首先迁移哪些实体

1. 识别实体

一个实体是一个分布在多个中。它是我们联合图的构建块。每个子图仅负责解析它为贡献的字段,并且每个实体实例都通过主键字段唯一标识。

花点时间阅读这篇文章monolith/schema.graphql文件并识别哪些应标记为实体。

下列哪种类型应在模式中标记为实体?

当您准备就绪时,请查看下面的部分,将您的列表与我们的列表进行比较!

查看实体
- Host
- Guest
- Listing
- Booking
- Review

您全部拿到了吗?

其他 呢?例如, 便利设施,但它没有包含在我们的列表中,即使它可以唯一标识(每个 便利设施 拥有自己的 ID )。 便利设施 类型更像一个附加到 列表 的属性,而且它很可能不会在 中分解开任何

用户 界面呢?我们可以将其变成 ,但 用户 界面中都与唯一的用户相关。如果它有额外的 ,我们可以分解到其他 中,我们可能考虑将其变成 (我们未来仍然可以做到!)。

此外,我们无法将以下类型标记为实体:枚举(如 便利设施类别),输入(如 搜索列表输入)和 响应(如 创建列表响应)。

2. 识别子图

我们现在应该更清楚我们将创建哪些 来管理不同的域职责。我们还可以考虑我们组织团队的结构、目前存在的服务或 以及我们要构建的未来功能。

再次,花点时间考虑你可能如何为 Airlock 设计。准备就绪后,查看下面的章节,将你的清单与我们的进行比较!

查看子图
- accounts
- listings
- bookings
- reviews
- payments

对于 Airlock,我们决定创建 5 。在第一课中,我们了解了账户团队和清单团队,他们各自分工负责,所以给他们各自的子图是有道理的。我们可以将所有预订功能合并到 listings 中;评论也是一样。但它们都感觉像是独立的大型域,也可以在它们自己的子图中进行处理。付款通常由第三方服务处理,因此为其提供自己的子图也合乎情理。

如果你的清单略有不同,那也没关系!没有单一的正确方式来设计模式。你可能会选择不同的名称,或者有更细化的范围。只要你能够表达你的决策背后的原因,那么你就可以进行下去了!记住,你总可以演化和迭代你的模式。

当所有迁移完成时,理想的 Airlock 联合架构将如下所示

A diagram showing the router at the top. The router splits off into five different subgraphs: accounts, listings, bookings, reviews and payments. Each subgraph is connected to its corresponding service API.

我们一次处理一个 ,将其从当前的单体子图中剥离出来。

3. 确定先迁移哪些实体

首先选择哪个 取决于你的产品和你的团队。在采用联合体时,我们建议你确定现有 实现中一个意义不大且有价值的部分,将其隔离为第一个子图。

注意:有关示例场景,包括你可能提出的帮助做出此决策的类型的问题,请查阅 Apollo 技术说明中有关 “从 GraphQL 单体迁移至 Apollo 联合”

那么我们应该在哪里开始?对于 Airlock,我们将从剥离 accounts 开始。此子图将负责与帐户和用户、登录详情和用户个人资料相关的所有事项。

在此课程中,我们仅介绍剥离 accounts 。其余的子图将留给您练习!

要点

  • 一开始就为体系结构制定最终目标的计划,有助于了解从哪里开始。
  • 记住联合的关键原则是渐进式采用。我们将从一个开始,一次采取小的操作步骤。

接下来

我们的计划已经制定好,现在让我们开始实施!

上一步

分享您对本课程的问题和评论

您的反馈有助于我们改进!如果您遇到困难或感到困惑,请告诉我们,我们会帮助您。所有评论都是公开的,并且必须遵循 Apollo 行为准则。请注意,已经解决或处理的评论可能会被删除。

您需要一个 GitHub 帐户才能发布以下内容。没有吗? 转而发布在我们的 Odyssey 论坛中。