IDP 核心架构:平台工程四层模型与故障域定义

内部开发者平台(IDP)的架构设计遵循平台工程四层模型,该模型将平台能力从底层基础设施到顶层开发者体验进行分层抽象。每一层都有明确的职责边界和独立的故障域,这是实现故障域隔离演练与资源变更模板一致性复核的基础。

平台工程四层模型

四层模型自下而上依次为:基础设施层、编排层、服务层和开发者门户层。每一层只通过定义良好的 API 与相邻层交互,形成严格的依赖倒置结构。

层级 核心职责 典型组件 故障域边界
开发者门户层 开发者自助服务、文档、API 目录、模板市场 Backstage、Kratix 门户、自定义 UI 门户服务集群、前端 CDN、用户会话
服务层 中间件服务、可观测性、安全策略、成本管理 Prometheus、Grafana、OPA、Kyverno 服务网格、监控集群、策略引擎
编排层 资源编排、工作流引擎、GitOps 控制器、模板引擎 Crossplane、ArgoCD、Terraform Operator 控制平面、API Server、etcd 集群
基础设施层 计算、存储、网络、身份与访问管理 Kubernetes 集群、AWS/Azure/GCP、vSphere 物理/虚拟节点、网络分区、云区域
关键设计原则:每一层故障域必须独立,上层故障不应导致下层级联崩溃。例如,开发者门户层宕机不应影响编排层正在执行的资源变更;编排层控制平面故障不应导致基础设施层已运行的业务 Pod 被驱逐。

各层故障域定义

故障域是系统内可能同时失效的一组组件。在 IDP 中,每一层都对应一个或多个故障域,演练时需要针对这些域设计隔离策略。

1. 基础设施层故障域

  • 计算故障域:Kubernetes 节点池、虚拟机可用区、物理机架。
  • 存储故障域:持久卷后端(如 Ceph RBD、AWS EBS)、对象存储桶区域。
  • 网络故障域:VPC、子网、负载均衡器、DNS 解析器。
  • 云区域故障域:单个云提供商区域(Region)或本地数据中心机房。

2. 编排层故障域

  • 控制平面故障域:Kubernetes API Server、etcd 集群、Crossplane 管理集群。
  • GitOps 故障域:ArgoCD 实例、Git 仓库连接、Webhook 接收器。
  • 模板引擎故障域:资源定义(XRD)、组合(Composition)的运行时。

3. 服务层故障域

  • 可观测性故障域:Prometheus 实例、Grafana 仪表盘、告警管理器。
  • 策略故障域:OPA 决策引擎、Kyverno 准入控制器。
  • 中间件故障域:消息队列、数据库代理、缓存集群。

4. 开发者门户层故障域

  • 门户服务故障域:Backstage 应用实例、插件后端、身份认证提供商。
  • 模板市场故障域:软件模板存储、脚手架引擎、文档站点。
  • 用户交互故障域:前端静态资源 CDN、API 网关、会话存储。
故障域隔离演练要点:在资源变更模板一致性复核中,必须验证每个故障域内的模板版本是否与全局基线一致。例如,编排层故障域中的 Composition 模板若与基础设施层故障域中的 ProviderConfig 模板版本不匹配,将导致资源变更失败。

四层模型与故障域关系图

下图展示了四层模型的结构以及各层对应的故障域边界。箭头表示层间 API 依赖方向,虚线框表示故障域隔离边界。

IDP 四层模型与故障域边界 开发者门户层 Backstage · 模板市场 · API 目录 · 文档站点 故障域:门户集群 · CDN · 身份认证 · 用户会话 服务层 可观测性 · 策略引擎 · 中间件 · 成本管理 故障域:监控集群 · OPA 决策 · 消息队列 · 缓存 编排层 Crossplane · ArgoCD · Terraform Operator · 工作流引擎 故障域:控制平面 · etcd · GitOps 实例 · 模板引擎 基础设施层 Kubernetes 集群 · 计算 · 存储 · 网络 · IAM 故障域:节点池 · 可用区 · VPC · 云区域 · 物理机房 故障域隔离边界 故障域隔离原则 每层故障域独立失效,上层故障不向下层级联;模板一致性复核需跨层验证版本对齐

故障域隔离与模板一致性的关联

在资源变更模板一致性复核中,故障域隔离直接决定了模板的版本管理粒度:

  • 跨层模板依赖:编排层的 Composition 模板引用了基础设施层的 ProviderConfig 模板,两个模板必须属于同一基线版本。若编排层故障域与基础设施层故障域隔离不当,可能导致模板版本漂移。
  • 同层模板冗余:服务层故障域内的多个 Prometheus 实例可能使用不同的告警规则模板,故障域隔离要求这些模板在域内保持一致,但允许跨域存在差异。
  • 演练验证点:在故障注入演练中,需要验证隔离后的故障域是否仍能获取到正确的模板版本。例如,切断编排层与基础设施层之间的网络后,编排层应使用本地缓存的模板继续工作,且缓存模板必须与全局基线一致。
常见风险:如果故障域隔离边界定义过粗(例如将整个编排层视为单一故障域),则编排层内某个组件的模板变更可能影响所有编排组件,导致故障半径扩大。建议将每个控制平面实例、每个 GitOps 实例都定义为独立的故障域。

故障域隔离策略对比

隔离策略 适用层级 优点 缺点
物理隔离 基础设施层 故障完全独立,无资源争抢 成本高,资源利用率低
逻辑隔离 编排层、服务层 资源复用,灵活调整边界 存在潜在资源争抢,需配额管理
租户隔离 开发者门户层 按团队/项目隔离,权限清晰 租户数量多时管理复杂
时间隔离 所有层(演练场景) 临时隔离,适合演练验证 不适用于生产长期运行