4. 整体架构概览:IDP 自助门户的四层架构

IDP 自助门户并非单一单体应用,而是一个分层清晰的云原生架构。其核心设计遵循“关注点分离”原则,将用户交互、业务编排、资源抽象与底层基础设施解耦。本章定义的四层架构——接入层、服务层、资源抽象层、基础设施层——是后续所有资源模型映射与门户功能设计的骨架。

4.1 四层架构总览

下图展示了 IDP 自助门户的完整分层结构及各层之间的核心交互关系。流量自上而下流动,每一层只与相邻层通信,确保架构的整洁与可替换性。

IDP 自助门户四层架构总览 IDP 自助门户四层架构总览 接入层 (Access Layer) Web UI · CLI · API Gateway · ChatOps · SSO 认证 服务层 (Service Layer) 开发者门户 · 模板引擎 · 审批工作流 · 观测与审计 CI/CD 编排 · 环境管理 · 成本展示 资源抽象层 (Resource Abstraction Layer) 统一资源模型 · 资源目录 · 资源映射引擎 · 状态同步 基础设施层 (Infrastructure Layer) Kubernetes · 虚拟机 · 数据库 · 对象存储 · 网络 · 中间件 交互原则:上层依赖下层接口,下层对上层屏蔽实现细节;资源抽象层是核心枢纽

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 层间交互的典型时序

以下是一个“开发者自助创建测试数据库”的完整交互时序,展示了四层如何协同工作。

创建数据库实例的层间交互时序 创建数据库实例的层间交互时序 接入层 服务层 资源抽象层 基础设施层 1. POST /db-instance 2. 创建资源请求 (期望状态) 3. Provider API 调用 4. 资源 ID + 状态 5. 状态回调 (Ready) 6. 返回连接信息 时序要点 步骤 2-5 是异步的:服务层提交后即返回,资源抽象层通过调和循环驱动状态变化。 步骤 6 只有在资源状态变为 Ready 后才会触发,用户无需等待同步过程。

4.5 架构设计原则与避坑

最佳实践: 在实施四层架构时,应优先定义资源抽象层的统一模型(URM),再设计服务层的业务编排。避免先开发服务层再“倒推”抽象层,否则容易导致抽象层泄漏基础设施细节。

常见陷阱: 服务层直接调用基础设施 API(例如:在服务代码中硬编码 kubectl 命令)。这会破坏分层架构,导致后续每增加一种基础设施类型,都需要修改服务层代码。正确的做法是:所有基础设施操作必须通过资源抽象层进行。

4.6 架构与资源模型的关系

四层架构是资源模型映射的物理载体。资源模型(Resource Model)在架构中的位置决定了它的抽象程度与生命周期:

  • 接入层:展示资源模型的“视图”(View),例如:表单字段、列表列定义。
  • 服务层:编排资源模型的“生命周期”(Lifecycle),例如:创建、更新、删除、克隆。
  • 资源抽象层:定义资源模型的“结构”(Schema)与“映射规则”(Mapping Rules)。
  • 基础设施层:承载资源模型的“实例”(Instance),例如:一个实际的 RDS 实例。