3. IDP 架构中的故障域模型

3.1 控制平面与数据平面分离

在 IDP 架构设计中,控制平面 (Control Plane) 与 数据平面 (Data Plane) 的分离是构建故障域隔离的基石。这一原则源自网络与云原生基础设施(如 Kubernetes、Service Mesh),在 IDP 中同样适用:控制平面负责决策与编排,数据平面负责执行与运行时负载。

维度 控制平面 (Control Plane) 数据平面 (Data Plane)
核心职责 策略决策、资源编排、权限校验、插件注册 运行时执行、数据存储、CI/CD 流水线运行、服务实例
故障影响范围 影响新任务的调度与配置变更,但不影响已运行的工作负载 影响正在执行的业务操作,但通常可通过副本/重试机制恢复
典型组件 Backstage 后端、Catalog 处理器、权限引擎、插件管理 API Tekton 任务 Pod、ArgoCD ApplicationSet、Runner 节点、数据库
隔离策略 多副本 + 主动健康检查 + 熔断 Cell 化部署 + 资源配额 + 熔断限流
关键原则:控制平面的故障不应导致数据平面正在执行的任务丢失;数据平面的局部故障不应阻塞控制平面的全局调度能力。两者之间通过异步事件总线或消息队列解耦,避免同步阻塞链。
IDP 控制平面与数据平面分离架构 IDP 控制平面与数据平面分离架构 控制平面 (Control Plane) Backstage Backend Catalog 处理器 权限引擎 插件管理 API 故障影响:新任务调度 & 配置变更 已运行工作负载不受影响 隔离策略:多副本 + 熔断 数据平面 (Data Plane) Tekton 任务 Pod ArgoCD 实例 Runner 节点 运行时数据库 故障影响:正在执行的业务操作 可通过副本/重试恢复 隔离策略:Cell 化 + 资源配额 异步事件总线 (消息队列)

3.2 故障域在 IDP 中的映射

故障域 (Failure Domain) 在 IDP 中映射为物理/逻辑边界,用于限制故障的爆炸半径。常见的映射维度包括:

  • 基础设施故障域:Kubernetes 集群、可用区 (AZ)、节点、命名空间。IDP 组件应跨多个 AZ 或集群部署。
  • 业务故障域:团队/项目空间 (Space)、环境 (dev/staging/prod)、插件实例。每个团队的插件实例应独立部署,避免互相影响。
  • 数据故障域:数据库分片、缓存分区、对象存储桶。控制平面与数据平面的数据存储应物理分离。
  • 运行时故障域:CI/CD 流水线执行环境、Runner 池、Sidecar 容器。每个流水线任务应在独立的 Pod 或容器中运行。
故障域类型 IDP 映射对象 隔离粒度 典型故障场景
基础设施 集群 / AZ / 节点 集群级 单集群网络分区,控制平面不可用
业务 团队空间 / 项目 租户级 某团队插件内存泄漏,影响同空间其他插件
数据 数据库分片 / 缓存 分片级 某分片主库宕机,仅影响该分片数据
运行时 流水线 Pod / Runner 任务级 某流水线任务 OOM,不影响其他任务
设计建议:在 Backstage 中,每个团队应拥有独立的 namespace 或 group,插件实例通过 pluginId + namespace 进行资源隔离。控制平面组件(如 Catalog)应部署在独立的命名空间中,与数据平面组件(如 Tekton 任务)物理分离。

3.3 典型 IDP 组件故障域分布

以下表格展示了典型 IDP 组件在控制平面与数据平面中的故障域分布,以及推荐的隔离策略:

组件 所属平面 故障域范围 推荐隔离策略
Backstage Backend 控制平面 集群级 / 多副本 跨 AZ 部署 + 主动健康检查 + 熔断
Catalog 处理器 控制平面 集群级 / 多副本 无状态设计 + 事件驱动 + 重试队列
权限引擎 控制平面 集群级 / 多副本 缓存 + 异步同步 + 降级策略
插件管理 API 控制平面 租户级 每个租户独立 API 实例 + 资源配额
Tekton 任务 Pod 数据平面 任务级 独立 Pod + 资源限制 + 超时控制
ArgoCD ApplicationSet 数据平面 集群级 多集群部署 + 应用集拆分
Runner 节点 数据平面 节点级 自动扩缩容 + 优雅关闭 + 任务迁移
运行时数据库 数据平面 分片级 读写分离 + 分片 + 跨 AZ 主备
典型 IDP 组件故障域分布 典型 IDP 组件故障域分布 控制平面 (集群级故障域) Backstage Backend 跨 AZ 多副本 Catalog 处理器 无状态 + 事件驱动 权限引擎 缓存 + 降级策略 插件管理 API 租户级隔离 故障域范围:集群级 / 多副本 故障影响:新任务调度 & 配置变更 数据平面 (任务级/分片级故障域) Tekton 任务 Pod 独立 Pod + 资源限制 ArgoCD 实例 多集群部署 Runner 节点 自动扩缩容 + 任务迁移 运行时数据库 读写分离 + 分片 故障域范围:任务级 / 分片级 故障影响:正在执行的业务操作 异步 解耦
常见误区:将控制平面与数据平面部署在同一个 Kubernetes 集群的同一个命名空间中,且未设置资源配额与熔断策略。这会导致数据平面的突发流量(如大量流水线并发)直接冲击控制平面的 API 响应,造成全局不可用。正确的做法是:控制平面组件部署在独立的集群或命名空间,并配置严格的资源限制与熔断阈值。