backstage~实体的介绍及它们的关系

在Backstage中,这些参数用于定义软件目录中各种实体(如组件、API、资源等)之间的关系。它们总是成对出现的,分别从关系两端的视角来描述同一种连接。

以下是这些参数的概念解释:

1. 所有权关系

  • ownedBy:声明“谁拥有我”。例如,一个“微服务组件”在其YAML定义中通过 ownedBy: [team-a] 来声明它被“team-a”这个团队所拥有。
  • ownerOf:声明“我拥有谁”。这是从所有者(如团队)的角度出发。例如,“team-a”这个Group实体会通过 ownerOf: [component:my-service] 来声明它拥有“my-service”这个组件。

2. API 提供关系

  • providesApis:声明“我提供哪些API”。用于定义组件(通常是后端服务)对外暴露的API接口。例如,component:order-service 在其定义中写明 providesApis: [order-api]
  • apiProvidedBy:声明“我由哪个组件提供”。这是从API实体的角度出发。例如,api:order-api 在其定义中会通过 apiProvidedBy: [component:order-service] 来指明它的提供者。

3. API 消费关系

  • consumesApis:声明“我消费/使用哪些API”。用于定义组件(如前端应用或另一个服务)所依赖的外部API。例如,component:web-frontend 写明 consumesApis: [order-api, user-api]
  • apiConsumedBy:声明“我被哪些组件消费/使用”。这是从API实体的角度反向描述。例如,api:order-api 可以通过 apiConsumedBy: [component:web-frontend, component:mobile-app] 来查看其所有消费者。

4. 依赖关系

  • dependsOn:声明“我依赖于谁”。用于定义组件运行时对另一个组件、API或资源的硬性依赖。例如,component:payment-service 可能依赖于一个数据库资源:dependsOn: [resource:payment-db]。这有助于进行影响分析和故障排查。
  • dependencyOf:声明“谁依赖于我”。这是从被依赖方的角度描述。例如,resource:payment-db 会通过 dependencyOf: [component:payment-service] 来了解哪些组件依赖自己。

5. 层级/父子关系

  • parentOf:声明“谁是我的子级/下级”。通常用于Group(组/团队)或System(系统)实体。例如,一个名为infrastructure的父组可以声明 parentOf: [group:network-team, group:storage-team]
  • childOf:声明“谁是我的父级/上级”。这是从子实体的角度描述。例如,group:network-team 会声明 childOf: [group:infrastructure]

6. 集合与成员关系

  • memberOf:声明“我属于哪个集合/组”。通常用于User(用户)实体。例如,用户Alice的定义中会写明 memberOf: [group:frontend-developers]
  • hasMember:声明“哪些成员属于我”。这是从Group(组)实体的角度描述。例如,group:frontend-developers 会声明 hasMember: [user:alice, user:bob]

7. 整体与部分关系

  • partOf:声明“我是哪个更大整体的一部分”。用于描述一个组件属于某个更大的系统或领域。例如,component:checkout-service 可以声明 partOf: [system:e-commerce-platform]。这有助于构建系统视图。
  • hasPart:声明“我包含哪些部分”。这是从整体(如System)的角度描述。例如,system:e-commerce-platform 会声明 hasPart: [component:checkout-service, component:product-catalog]

核心总结

  • 每一对参数(如 ownedBy / ownerOf)描述的都是同一种关系,只是视角不同。
  • 在实践中,通常只需要在一端(通常是“子”端或被拥有端,如组件、API)定义关系(如 ownedBy, partOf),Backstage 的后台处理器会自动在另一端(如团队、系统)填充对应的反向关系(如 ownerOf, hasPart),从而确保目录中关系图谱的双向一致性和可导航性。
posted @ 2026-04-17 16:34  张占岭  阅读(8)  评论(0)    收藏  举报