4. 整体架构概览:IDP 自助门户的四层架构
IDP 自助门户并非单一单体应用,而是一个分层清晰的云原生架构。其核心设计遵循“关注点分离”原则,将用户交互、业务编排、资源抽象与底层基础设施解耦。本章定义的四层架构——接入层、服务层、资源抽象层、基础设施层——是后续所有资源模型映射与门户功能设计的骨架。
4.1 四层架构总览
下图展示了 IDP 自助门户的完整分层结构及各层之间的核心交互关系。流量自上而下流动,每一层只与相邻层通信,确保架构的整洁与可替换性。
4.2 各层职责与关键组件
每一层都承载着明确的职责边界。下表详细列出了各层的核心组件、技术选型倾向以及典型交付物。
| 架构层 | 核心职责 | 关键组件 / 技术 | 典型交付物 |
|---|---|---|---|
| 接入层 | 用户身份认证、请求路由、协议转换、多端适配 | API Gateway (Kong/APISIX)、OAuth2/OIDC、WebSocket、gRPC-Web、Backstage 前端 | 统一入口域名、SSO 集成、开发者门户 UI |
| 服务层 | 业务逻辑编排、工作流驱动、策略执行、数据聚合 | 微服务 (Go/Java)、Argo Workflows、审批引擎、Catalog 服务、成本计算服务 | 自助创建流程、环境生命周期管理、资源申请审批 |
| 资源抽象层 | 资源模型定义、资源映射、状态同步、差异调和 | Crossplane / Terraform Operator、资源 CRD、资源映射引擎、状态存储 (etcd/Redis) | 统一资源模型 (URM)、资源目录、Provider 适配器 |
| 基础设施层 | 提供实际计算、存储、网络能力,执行资源变更 | Kubernetes 集群、VMware vSphere、AWS/GCP/Azure、数据库实例、对象存储 | 集群节点、虚拟机、RDS 实例、S3 存储桶 |
4.3 层间交互关系详解
四层架构的交互并非简单的“调用-返回”,而是包含同步 API、异步事件、状态回调与配置下发等多种模式。理解这些交互是设计资源模型映射的前提。
4.3.1 接入层 → 服务层
- 交互模式:RESTful API / gRPC,同步为主。
- 核心流程:用户通过 UI 或 CLI 发起“创建开发环境”请求,接入层完成认证与鉴权后,将请求转发至服务层的环境管理服务。
- 关键点:接入层不处理任何业务逻辑,仅做协议转换与安全校验。
4.3.2 服务层 → 资源抽象层
- 交互模式:声明式 API + 异步状态回调。
- 核心流程:服务层构造一个“期望状态”的资源请求(例如:一个包含 4 核 8G 内存的 Kubernetes 命名空间),通过资源抽象层的统一 API 提交。资源抽象层返回一个资源实例 ID,后续通过 Webhook 或轮询机制同步状态。
- 关键点:服务层不关心底层是 K8s 还是虚拟机,只与抽象模型交互。
4.3.3 资源抽象层 → 基础设施层
- 交互模式:Provider 插件模式 + 驱动适配。
- 核心流程:资源抽象层将统一资源模型转换为特定基础设施的 API 调用(例如:将“Namespace”资源映射为
kubectl apply或 Terraform 的kubernetes_namespace资源)。 - 关键点:资源抽象层维护着“当前状态”与“期望状态”的差异调和循环(Reconciliation Loop)。
架构设计要点: 资源抽象层是 IDP 的“中枢神经系统”。它向下屏蔽了多云、多基础设施的差异性;向上为服务层提供了稳定、统一的资源操作接口。没有这一层,服务层将直接与基础设施耦合,导致门户难以扩展和维护。
4.4 层间交互的典型时序
以下是一个“开发者自助创建测试数据库”的完整交互时序,展示了四层如何协同工作。
4.5 架构设计原则与避坑
最佳实践: 在实施四层架构时,应优先定义资源抽象层的统一模型(URM),再设计服务层的业务编排。避免先开发服务层再“倒推”抽象层,否则容易导致抽象层泄漏基础设施细节。
常见陷阱: 服务层直接调用基础设施 API(例如:在服务代码中硬编码 kubectl 命令)。这会破坏分层架构,导致后续每增加一种基础设施类型,都需要修改服务层代码。正确的做法是:所有基础设施操作必须通过资源抽象层进行。
4.6 架构与资源模型的关系
四层架构是资源模型映射的物理载体。资源模型(Resource Model)在架构中的位置决定了它的抽象程度与生命周期:
- 接入层:展示资源模型的“视图”(View),例如:表单字段、列表列定义。
- 服务层:编排资源模型的“生命周期”(Lifecycle),例如:创建、更新、删除、克隆。
- 资源抽象层:定义资源模型的“结构”(Schema)与“映射规则”(Mapping Rules)。
- 基础设施层:承载资源模型的“实例”(Instance),例如:一个实际的 RDS 实例。