2. 自助目录概念
2.1 什么是自助服务目录
自助服务目录(Self-Service Catalog)是平台工程中面向开发者的统一入口,它将底层基础设施、中间件、运行时环境、安全策略等平台能力封装为“产品化”的服务项,开发者无需理解底层实现细节,即可通过图形化界面或 API 按需申请、配置和使用平台资源。
从本质上讲,自助目录是平台团队与开发者之间的契约层:平台团队定义“能提供什么”,开发者选择“需要什么”,整个过程由平台引擎自动编排交付。
核心特征: 服务目录 ≠ 资源列表。资源列表只展示“有什么”,服务目录还包含申请流程、参数模板、配额校验、自动交付和生命周期治理。
2.2 自助目录在平台工程中的定位
在平台工程的四层架构中,自助目录位于用户体验层与编排层之间,是连接开发者与平台能力的桥梁。下表展示了各层职责与目录的定位:
| 架构层 | 职责 | 与自助目录的关系 |
|---|---|---|
| 用户体验层 | 提供开发者门户、CLI、API | 目录是门户的核心内容载体 |
| 自助目录层 | 服务定义、参数模板、审批流 | 本层——平台能力的“产品化”封装 |
| 编排引擎层 | Terraform/Crossplane/Helm 执行 | 目录触发编排流水线 |
| 基础设施层 | 计算、网络、存储、K8s | 目录交付的目标环境 |
平台工程强调“开发者体验优先”,自助目录正是这一理念的落地载体——它将平台能力从“文档驱动”转变为“目录驱动”,开发者只需在目录中搜索、选择、填写参数,即可获得标准化的服务实例。
2.3 自助目录的核心能力
一个成熟的自助目录需要覆盖四个关键阶段:发现 → 请求 → 交付 → 治理。这四个阶段构成了服务从“可见”到“可用”再到“可管”的完整闭环。
| 阶段 | 核心能力 | 关键产出 |
|---|---|---|
| 发现 | 服务分类、全文搜索、标签过滤、服务详情预览 | 开发者快速找到所需服务 |
| 请求 | 参数表单、配额校验、审批流、依赖选择 | 标准化的服务申请单 |
| 交付 | 自动编排、环境创建、配置注入、状态通知 | 可用的服务实例 |
| 治理 | 成本归属、生命周期管理、版本升级、回收 | 可审计的服务台账 |
2.3.1 发现——让服务“找得到”
发现能力是自助目录的入口。开发者需要像逛应用商店一样浏览和搜索服务。平台团队应提供:
- 分类体系: 按用途(数据库、消息队列、CI/CD)、按环境(开发、测试、生产)、按团队(前端、后端、数据)等多维度组织。
- 全文搜索: 支持服务名称、描述、标签的模糊匹配。
- 服务详情: 每个服务项包含描述、版本、SLA、费用归属、使用文档链接。
最佳实践: 在目录中为每个服务添加“使用热度”或“推荐”标签,帮助开发者快速识别常用服务,减少选择成本。
2.3.2 请求——让申请“填得对”
请求阶段将开发者的需求转化为结构化的参数。平台团队需要设计:
- 参数模板: 使用 JSON Schema 或 OpenAPI 规范定义每个服务的输入参数,包括必填项、默认值、取值范围。
- 配额校验: 在提交前检查开发者是否还有剩余配额(如 CPU 核数、存储容量、数据库实例数)。
- 审批流: 支持自动审批(配额内)、人工审批(超配额或生产环境)、多级审批(涉及安全合规)。
// 参数模板示例(JSON Schema)
{
"service": "postgresql-14",
"parameters": {
"instance_name": { "type": "string", "minLength": 3, "maxLength": 32 },
"cpu": { "type": "integer", "enum": [1, 2, 4, 8], "default": 2 },
"memory_gb": { "type": "integer", "enum": [2, 4, 8, 16], "default": 4 },
"storage_gb": { "type": "integer", "minimum": 10, "maximum": 500, "default": 50 },
"environment": { "type": "string", "enum": ["dev", "staging", "prod"] }
}
}
2.3.3 交付——让服务“开得快”
交付是自助目录的价值兑现环节。平台引擎接收到请求后,自动执行编排流水线:
- 基础设施即代码: 调用 Terraform/Crossplane 模块创建云资源或 K8s 命名空间。
- 配置注入: 自动生成连接字符串、密钥、环境变量,并注入到开发者的项目空间。
- 状态通知: 通过 Webhook、邮件或即时通讯工具通知开发者服务已就绪。
常见陷阱: 交付阶段最容易出现“部分成功”状态(如网络创建成功但数据库初始化失败)。目录必须支持幂等重试和回滚机制,确保最终一致性。
2.3.4 治理——让资产“管得住”
治理能力决定了自助目录能否长期健康运行。平台团队需要关注:
- 成本归属: 每个服务实例关联到项目/团队/成本中心,支持按月度生成账单。
- 生命周期管理: 自动检测闲置资源,发送回收提醒;支持开发者自助销毁或延期。
- 版本升级: 当服务模板更新时,目录应提示现有实例是否可原地升级,并提供升级窗口。
2.4 自助目录的成熟度模型
不同组织的平台工程实践阶段不同,自助目录的成熟度也呈现阶梯式演进:
| 成熟度等级 | 发现 | 请求 | 交付 | 治理 |
|---|---|---|---|---|
| L1:静态目录 | Wiki 页面列表 | 邮件或工单申请 | 手动创建 | 无 |
| L2:半自动化 | 门户展示服务 | 表单 + 自动审批 | 脚本半自动 | 手动记账 |
| L3:全自动化 | 搜索 + 标签 + 推荐 | 参数校验 + 配额检查 | IaC 全自动交付 | 成本自动归集 |
| L4:智能目录 | AI 推荐 + 使用分析 | 智能默认值 + 预审批 | 自适应编排 + 金丝雀 | 生命周期自动管理 |
建议: 大多数团队应从 L2 起步,优先实现“请求→交付”的自动化闭环,再逐步完善发现和治理能力。不要试图一次性达到 L4,那会导致平台团队负担过重。