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 依赖方向,虚线框表示故障域隔离边界。
故障域隔离与模板一致性的关联
在资源变更模板一致性复核中,故障域隔离直接决定了模板的版本管理粒度:
- 跨层模板依赖:编排层的 Composition 模板引用了基础设施层的 ProviderConfig 模板,两个模板必须属于同一基线版本。若编排层故障域与基础设施层故障域隔离不当,可能导致模板版本漂移。
- 同层模板冗余:服务层故障域内的多个 Prometheus 实例可能使用不同的告警规则模板,故障域隔离要求这些模板在域内保持一致,但允许跨域存在差异。
- 演练验证点:在故障注入演练中,需要验证隔离后的故障域是否仍能获取到正确的模板版本。例如,切断编排层与基础设施层之间的网络后,编排层应使用本地缓存的模板继续工作,且缓存模板必须与全局基线一致。
常见风险:如果故障域隔离边界定义过粗(例如将整个编排层视为单一故障域),则编排层内某个组件的模板变更可能影响所有编排组件,导致故障半径扩大。建议将每个控制平面实例、每个 GitOps 实例都定义为独立的故障域。
故障域隔离策略对比
| 隔离策略 | 适用层级 | 优点 | 缺点 |
|---|---|---|---|
| 物理隔离 | 基础设施层 | 故障完全独立,无资源争抢 | 成本高,资源利用率低 |
| 逻辑隔离 | 编排层、服务层 | 资源复用,灵活调整边界 | 存在潜在资源争抢,需配额管理 |
| 租户隔离 | 开发者门户层 | 按团队/项目隔离,权限清晰 | 租户数量多时管理复杂 |
| 时间隔离 | 所有层(演练场景) | 临时隔离,适合演练验证 | 不适用于生产长期运行 |