3. 服务目录概念:服务目录的定义、在平台工程中的角色、服务目录与 CMDB 的区别

3.1 服务目录的定义

在平台工程语境下,服务目录(Service Catalog)是一个经过治理的、可搜索的、面向开发者的服务清单。它不仅仅是“服务列表”,而是将平台能力(如 CI/CD 流水线、数据库实例、消息队列、监控告警、安全扫描等)封装为标准化、可自助申请的产品单元。

服务目录的核心要素包括:

  • 服务定义:服务的名称、版本、描述、SLA、所属团队。
  • 接口契约:API 端点、SDK 版本、配置参数 Schema。
  • 依赖关系:运行时依赖(如数据库、缓存)、编译时依赖(如基础镜像)。
  • 生命周期:创建、更新、废弃、退役的状态机。
  • 自助入口:开发者可通过 UI 或 CLI 一键申请,无需提工单。
关键认知:服务目录是平台团队与业务团队之间的“产品货架”。开发者是“消费者”,平台团队是“产品经理”。服务目录的质量直接决定了开发者自助上线的效率。

3.2 服务目录在平台工程中的角色

服务目录在平台工程中扮演着能力抽象层和治理边界的双重角色。它解决了平台团队与业务团队之间的三个核心矛盾:

  1. 标准化 vs 灵活性:服务目录提供“黄金路径”模板,同时允许通过参数化配置保留必要的灵活性。
  2. 可见性 vs 混乱:所有可用的平台能力都集中在目录中,避免开发者“不知道平台有什么”或“重复造轮子”。
  3. 自助 vs 管控:开发者可以自助申请,但平台团队通过目录中的策略(如配额、审批流、合规检查)实施治理。

下图展示了服务目录在平台工程架构中的核心位置:

服务目录在平台工程中的角色 开发者 / 业务团队 服务目录(Service Catalog) 标准化 · 可搜索 · 自助申请 · 策略治理 平台能力层(Platform Capabilities) CI/CD 流水线 数据库实例 消息队列 监控告警 服务目录是开发者与平台能力之间的“中间层” 屏蔽底层复杂性,提供统一的自助体验

3.3 服务目录与 CMDB 的区别

很多团队容易将服务目录与传统的配置管理数据库(CMDB)混淆。虽然两者都涉及“服务”和“配置”,但它们的定位、受众和核心功能有本质区别。

对比维度 服务目录(Service Catalog) CMDB(配置管理数据库)
核心定位 面向开发者的自助服务“产品货架” 面向运维/ITIL 的配置项“资产台账”
目标用户 业务开发者、SRE、平台消费者 运维工程师、变更经理、合规审计
数据粒度 服务单元(如流水线模板、数据库规格) 配置项 CI(如服务器 IP、中间件版本、网络端口)
操作模式 自助申请、一键部署、生命周期管理 发现、记录、关联、变更审批
变更驱动 开发者需求驱动(Pull 模式) 运维事件/变更驱动(Push 模式)
核心价值 提升开发者效率,降低平台使用门槛 保障配置准确性,支撑故障定位与合规
典型工具 Backstage、Port、Humanitec、Kratix ServiceNow CMDB、BMC Atrium、iTop
实践建议:在平台工程落地初期,不要试图用 CMDB 替代服务目录,也不要用服务目录管理所有配置项。两者应互补共存:服务目录负责“开发者体验”,CMDB 负责“运维资产底账”。通过 API 将服务目录的实例化结果同步到 CMDB,实现“申请即记录”。

下图直观对比了服务目录与 CMDB 在平台工程中的不同作用域:

服务目录 vs CMDB:作用域对比 服务目录(开发者视角) 自助申请流水线模板 一键创建数据库实例 配置环境变量与密钥 查看服务健康状态 CMDB(运维视角) 记录服务器 IP 与规格 关联应用与中间件版本 追踪变更历史与依赖 支撑故障定位与合规审计 API 同步 服务目录负责“体验”,CMDB 负责“底账”,两者通过 API 联动

3.4 服务目录的典型构成

一个生产级的服务目录通常包含以下组成部分:

  • 元数据层:服务名称、版本、所有者、标签、描述。
  • 模板层:Terraform 模块、Helm Chart、Pipeline 定义、Docker Compose 文件。
  • 策略层:配额限制、审批流程、合规规则、成本预算。
  • 接口层:REST API、CLI 工具、Web UI、Backstage 插件。
  • 观测层:服务使用统计、申请成功率、平均交付时间、错误率。
常见误区:不要将服务目录做成“静态文档”。如果目录中的服务无法通过 API 或 GitOps 方式实际创建,它只是一个“愿望清单”,而不是真正的服务目录。服务目录必须与底层基础设施即代码(IaC)引擎深度集成。