2. IDP 自助门户架构概览:前端、后端、控制平面三层架构
内部开发者平台(IDP)的自助门户并非单体应用,而是采用前端、后端、控制平面三层解耦架构。这种设计让开发者通过统一界面自助操作,同时将底层基础设施的复杂性隔离在控制平面内,实现“开发自服务”与“平台安全管控”的平衡。
2.1 三层架构总览
下图展示了 IDP 自助门户的核心分层与组件关系:
架构要点:前端层只负责 UI 渲染与用户交互,不直接操作基础设施;后端层承担业务逻辑编排与安全管控;控制平面层封装所有基础设施操作,是平台能力的真正执行者。
2.2 各层核心组件详解
2.2.1 前端层(Portal UI)
前端层是开发者直接交互的界面,通常基于 React、Vue 或 Angular 构建,通过 API 网关与后端通信。核心组件包括:
- 服务目录:展示平台提供的所有服务(环境创建、数据库申请、CI/CD 流水线等),支持分类搜索与一键申请。
- 环境管理面板:查看已申请环境的运行状态、连接信息、资源使用率,支持启停与扩缩容操作。
- 工单系统:展示审批进度、历史工单、驳回原因,支持重新提交与撤销。
- 成本与用量看板:按项目/团队维度展示资源消耗趋势,辅助预算管理。
- API 文档与 SDK 下载:提供自助门户的 OpenAPI 文档,方便开发者集成自动化脚本。
2.2.2 后端层(API Gateway + 业务服务)
后端层是门户的“大脑”,负责请求路由、身份校验、业务编排与数据聚合。通常采用微服务架构,核心组件包括:
| 组件 | 职责 | 技术选型示例 |
|---|---|---|
| API 网关 | 统一入口、限流熔断、JWT 校验、路由转发 | Kong / APISIX / Envoy |
| 身份认证服务 | OAuth2/OIDC 登录、SSO 集成、RBAC 权限管理 | Keycloak / Auth0 / Dex |
| 工单引擎 | 工单生命周期管理、审批流编排、状态机驱动 | Camunda / Temporal / 自研 |
| 资源配额服务 | 校验项目配额、资源池水位、预算上限 | 自研 + Redis 缓存 |
| 审计日志服务 | 记录所有操作行为,支持追溯与合规审计 | Elasticsearch / ClickHouse |
2.2.3 控制平面层(Control Plane)
控制平面是 IDP 的“执行引擎”,封装所有基础设施操作,对上层暴露统一接口。它是本课程的核心关注点,核心组件包括:
- 环境编排器:负责环境创建、销毁、扩缩容的流程编排,通常基于 Terraform、Crossplane 或 Pulumi 实现声明式资源管理。
- 资源调度器:根据资源池状态与调度策略,将环境分配到合适的 Kubernetes 集群或虚拟机集群。
- 配置管理中心:管理环境变量、数据库连接串、服务发现配置,支持动态推送与版本回滚。
- 密钥管理服务:集成 Vault 或 AWS Secrets Manager,安全存储数据库密码、API 等敏感信息。
- 状态同步器:定期巡检实际资源状态,与后端数据库中的期望状态进行对比,自动修复偏差。
- 事件通知总线:将环境状态变更、工单流转、配额告警等事件推送给后端层或外部系统(如钉钉、Slack)。
控制平面 vs 后端层的关键区别:后端层处理“业务逻辑”(谁可以做什么、流程怎么走),控制平面处理“基础设施逻辑”(资源怎么创建、配置怎么下发)。两者通过明确的 API 契约解耦,后端层不直接调用云厂商 SDK 或 Kubernetes API。
2.3 三层之间的接口调用关系
下图聚焦于三层之间的典型接口调用流程,以“开发者申请测试环境”为例:
常见误区:不要在后端层直接调用 kubectl 或云厂商 SDK 创建资源。所有基础设施操作必须由控制平面统一执行,否则会导致权限分散、审计缺失、状态不一致等问题。
2.4 架构设计原则
| 原则 | 说明 | 违反后果 |
|---|---|---|
| 单向依赖 | 前端只依赖后端,后端只依赖控制平面,禁止跨层调用 | 耦合加剧,变更影响范围不可控 |
| 接口契约化 | 层间通过 OpenAPI / gRPC Proto 定义接口,版本化管理 | 联调成本高,接口变更易引发故障 |
| 异步解耦 | 耗时操作(环境创建)采用异步回调,避免阻塞前端 | 前端超时,用户体验差 |
| 可观测性 | 每层输出结构化日志、指标、链路追踪 | 故障定位困难,SLA 无法保障 |
| 安全隔离 | 控制平面拥有基础设施凭证,后端层仅持有业务 | 凭证泄露导致整个平台被攻陷 |