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 不直接管理基础设施,而是通过统一抽象层(软件目录、权限框架、通知系统)将底层工具的能力暴露给开发者,从而避免平台与具体工具强绑定。
Backstage 平台三层架构 前端层(Frontend) React SPA · 插件 UI · 软件目录视图 · 模板表单 · 审批面板 路由分发 · 统一主题 · 权限前端拦截 后端层(Backend) 插件后端 · 鉴权与授权 · 事件总线 · 任务调度 软件目录处理 · 模板引擎 · 审批流程引擎 数据与基础设施层(Data & Infrastructure) PostgreSQL · 外部系统(GitHub / Jenkins / K8s / ArgoCD) 搜索索引 · 缓存 · 对象存储 核心设计:前端只关心展示,后端负责聚合与编排,基础设施层保持可替换性

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 配置、环境部署等步骤。

一个模板由三部分组成:

  1. 模板定义(template.yaml):声明模板的元数据、输入参数(steps)和输出动作。
  2. 动作(Actions):内置或自定义的步骤,如 fetch:template、publish:github、catalog:register。
  3. 步骤编排:支持条件判断、循环、错误处理,可嵌入审批节点。
审批集成点: 在模板的步骤编排中,可以插入 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 中扮演门户与编排层的角色,不直接管理基础设施,而是通过抽象层与插件实现能力集成。