2. Backstage 平台基础:架构、核心组件及在IDP中的角色
Backstage 是由 Spotify 开源并捐赠给 CNCF 的内部开发者门户框架。它并非一个开箱即用的 IDP,而是提供了构建 IDP 所需的核心抽象层与插件化架构。理解 Backstage 的底层架构与核心组件,是设计签名链路与审批记录系统的前提。
2.1 整体架构:分层与解耦
Backstage 采用前后端分离、插件驱动的分层架构。整个平台由三个主要层次构成:
- 前端层(Frontend Layer):基于 React 构建的单页应用,负责 UI 渲染、路由分发与插件加载。
- 后端层(Backend Layer):基于 Node.js 的插件后端服务,提供数据聚合、鉴权、事件处理与代理能力。
- 数据与基础设施层(Data & Infrastructure Layer):包括 PostgreSQL 数据库、外部系统(如 GitHub、Jenkins、Kubernetes)以及可选的搜索索引(Elasticsearch)。
架构要点: Backstage 不直接管理基础设施,而是通过统一抽象层(软件目录、权限框架、通知系统)将底层工具的能力暴露给开发者,从而避免平台与具体工具强绑定。
2.2 核心组件详解
Backstage 的 IDP 能力由三大核心组件支撑:软件目录(Software Catalog)、插件系统(Plugin System)和模板(Scaffolder Templates)。三者共同构成了开发者自助服务的基石。
2.2.1 软件目录(Software Catalog)
软件目录是 Backstage 的数据中枢,以统一的数据模型(Entity Model)描述组织内的所有软件实体,包括服务、API、文档、资源、用户和团队。每个实体通过 catalog-info.yaml 文件定义。
| 实体类型(Kind) | 描述 | 典型用途 |
|---|---|---|
| Component | 软件组件(服务、库、CLI 工具) | 注册微服务、前端应用、数据管道 |
| API | API 定义(OpenAPI、gRPC、GraphQL) | 服务间依赖关系发现与文档 |
| Resource | 基础设施资源(数据库、Topic、Bucket) | 资源归属与生命周期管理 |
| System | 系统边界(多个 Component 的集合) | 业务域划分与架构视图 |
| Domain | 业务域(多个 System 的集合) | 组织级架构分层 |
| User / Group | 用户与团队 | 权限、所有权与审批人匹配 |
签名链路关联: 审批记录中的 Owner、审批人、系统归属 等字段,均直接映射到软件目录中的 User、Group 和 System 实体。目录的完整性直接影响审批流程的准确性。
2.2.2 插件系统(Plugin System)
Backstage 的插件分为前端插件和后端插件。前端插件提供 UI 页面与组件,后端插件提供 API 与数据处理能力。插件之间通过 Service-to-Service 通信和事件总线协作。
- 前端插件:注册路由、侧边栏项、Tab 页。例如
@backstage/plugin-scaffolder提供模板创建界面。 - 后端插件:提供 REST API、事件处理器、任务调度。例如
@backstage/plugin-catalog-backend处理实体注册与搜索。 - 权限框架:通过
PermissionPolicy控制插件资源的访问,是审批签名链路的基础设施。
2.2.3 模板(Scaffolder Templates)
模板是 Backstage 实现开发者自助服务的核心工具。它允许平台工程师定义标准化的项目创建流程,包括代码生成、仓库创建、CI/CD 配置、环境部署等步骤。
一个模板由三部分组成:
- 模板定义(template.yaml):声明模板的元数据、输入参数(steps)和输出动作。
- 动作(Actions):内置或自定义的步骤,如
fetch:template、publish:github、catalog:register。 - 步骤编排:支持条件判断、循环、错误处理,可嵌入审批节点。
审批集成点: 在模板的步骤编排中,可以插入 Custom Action 来触发审批流程(例如调用外部审批系统或 Backstage 内置的审批插件)。签名链路中的“发起审批”动作通常发生在模板执行的中段。
2.3 Backstage 在 IDP 中的角色
在 IDP 的完整能力模型中,Backstage 承担了开发者门户与编排层的双重角色。它不是 IDP 的全部,但它是开发者与底层基础设施之间的统一交互界面。
| IDP 能力维度 | Backstage 承担的角色 | 对应组件 |
|---|---|---|
| 服务发现与可视化 | 提供统一的软件目录视图,展示所有服务、API、资源及其依赖关系 | Software Catalog |
| 开发者自助服务 | 通过模板引擎提供标准化的项目创建、代码生成、环境配置流程 | Scaffolder + Templates |
| 权限与合规 | 提供权限框架(Permission Framework)控制资源访问,支持自定义审批策略 | Permission Plugin + Catalog |
| 技术文档与知识管理 | 集成 TechDocs 插件,将文档与代码仓库绑定,实现文档即代码 | TechDocs Plugin |
| 可观测性与事件响应 | 聚合监控、告警、日志数据,提供统一的事件视图 | Plugins(Datadog / Grafana / PagerDuty) |
| 审批与签名链路 | 作为审批流程的触发与展示层,记录审批状态与签名信息 | Custom Actions + Permission Framework |
关键认知: Backstage 的插件化架构使得审批签名链路可以以插件组合的方式实现——软件目录提供实体关系,模板提供流程编排,权限框架提供审批策略,三者共同构成可追溯的审批记录系统。
2.4 本章小结
- Backstage 采用前端-后端-基础设施三层架构,插件是功能扩展的基本单元。
- 软件目录是 IDP 的数据核心,所有审批记录中的实体信息均来源于此。
- 模板是自助服务的执行引擎,审批节点可嵌入模板流程中,形成签名链路的关键环节。
- Backstage 在 IDP 中扮演门户与编排层的角色,不直接管理基础设施,而是通过抽象层与插件实现能力集成。