3. 服务目录概念:服务目录的定义、服务目录在平台工程中的作用、服务目录与开发者门户的关系

3.1 服务目录的定义

服务目录(Service Catalog)是平台工程中一个结构化的、可搜索的、经过治理的“菜单”,它列出了平台团队向开发者提供的所有标准化服务、基础设施组件和运行环境。每个服务条目都包含明确的元数据、版本信息、依赖关系、SLA 以及自助式部署入口。

在 CI/CD 服务目录环境部署的上下文中,服务目录不仅仅是静态的列表,而是一个可执行的资产库。开发者可以通过服务目录发现、请求、配置和部署经过平台团队预审和治理的服务,而无需理解底层基础设施的复杂性。

核心特征:
  • 标准化:所有服务遵循统一的定义模板和版本规范。
  • 可发现:提供搜索、过滤和分类能力,帮助开发者快速找到所需服务。
  • 可执行:支持“一键部署”或“API 触发部署”,直接对接底层 CI/CD 管道。
  • 治理化:包含审批流、配额管理、合规检查和成本标签。

3.2 服务目录在平台工程中的作用

服务目录是平台工程从“构建平台”转向“运营平台”的关键桥梁。它解决了平台团队与开发者之间的信息不对称和协作摩擦。

作用维度 具体说明 平台工程价值
抽象复杂性 将 Kubernetes 集群、数据库、消息队列等底层资源封装为“服务” 降低开发者认知负荷,提升交付速度
治理与合规 内置安全基线、成本标签、环境隔离策略 确保所有部署符合组织规范,减少安全风险
复用与标准化 提供经过验证的服务模板,避免重复造轮子 减少碎片化,提升运维一致性
自助服务 开发者可自行选择服务、配置参数并触发部署 消除等待平台团队手动配置的瓶颈
成本与资源可视化 每个服务条目关联成本估算和资源配额 帮助团队做预算规划和资源优化
实践建议:在构建服务目录初期,优先纳入“黄金路径”服务(如标准化的 Spring Boot 应用、Node.js 微服务、PostgreSQL 实例),而不是试图覆盖所有可能的服务类型。这有助于快速验证服务目录对开发者效率的提升效果。

3.3 服务目录与开发者门户的关系

服务目录与开发者门户(Developer Portal)是平台工程中两个紧密关联但职责不同的概念。开发者门户是面向开发者的统一入口和用户体验层,而服务目录是门户背后的核心数据模型和业务逻辑层。

下图展示了服务目录与开发者门户在平台工程架构中的位置关系:

服务目录与开发者门户的关系架构 开发者门户(Developer Portal) 用户体验层:搜索、浏览、请求、部署、监控 提供 API 文档、服务详情、部署日志、成本估算 服务目录(Service Catalog) 数据与逻辑层:服务定义、版本管理、依赖关系、治理规则 存储服务元数据、配额策略、审批流程、成本标签 CI/CD 管道 & 基础设施 Kubernetes、Terraform、ArgoCD、Jenkins、云服务商 API 开发者直接交互 门户调用目录 API

从架构上看,两者的关系可以总结为以下关键点:

  • 门户是前端,目录是后端:开发者门户负责展示和交互,服务目录负责存储和逻辑。门户通过 API 调用服务目录获取服务列表、详情和部署配置。
  • 目录驱动门户的内容:门户上展示的“服务卡片”、“部署按钮”、“版本选择器”等 UI 元素,其数据源均来自服务目录。目录中定义的治理规则(如“生产环境需要二级审批”)会直接影响门户上的操作流程。
  • 目录是治理核心,门户是体验窗口:平台团队在服务目录中配置策略(如配额、合规标签、成本上限),开发者通过门户感知这些策略(如部署时看到成本估算、配额不足时收到提示)。
  • 双向反馈闭环:开发者通过门户提交的服务请求、部署反馈、评分数据,可以回流到服务目录,帮助平台团队优化服务定义和治理策略。
常见误区:不要将服务目录与开发者门户混为一谈。如果只建设门户而没有服务目录,门户将沦为静态文档站,无法实现自助部署和治理自动化。反之,如果只建设服务目录而没有门户,开发者将被迫通过命令行或 API 直接操作目录,体验差且难以推广。

3.4 服务目录的核心元数据模型

一个标准化的服务目录条目通常包含以下元数据字段。这些字段在平台工程中用于自动化部署、成本核算和合规审计。

元数据类别 字段示例 用途
标识信息 service_id, name, version, owner_team 唯一标识服务,支持版本管理和团队归属
部署配置 runtime, cpu_request, memory_limit, replicas 定义服务运行时的资源需求和扩缩容策略
依赖关系 dependencies: [db_id, cache_id, queue_id] 声明服务依赖的其他服务或基础设施
治理策略 approval_required, cost_center, compliance_tags 控制部署审批、成本归属和合规检查
CI/CD 集成 pipeline_id, git_repo, deploy_trigger 关联具体的 CI/CD 管道和代码仓库
环境映射 environments: [dev, staging, prod] 定义服务可部署的目标环境列表及环境差异

以下是一个简化的服务目录条目示例(YAML 格式):

apiVersion: catalog.platform.io/v1
kind: Service
metadata:
  name: user-service
  version: 2.1.0
  owner: team-identity
spec:
  runtime: spring-boot:3.2
  resources:
    cpu: 1
    memory: 2Gi
  dependencies:
    - postgresql:14
    - redis:7
  environments:
    - name: dev
      replicas: 1
      approval: false
    - name: prod
      replicas: 3
      approval: required
  pipeline:
    repo: https://git.company.com/identity/user-service
    trigger: push-to-main
  cost:
    center: eng-identity
    estimated_monthly: 120.00
关键设计原则:服务目录的元数据模型应保持“够用但不过度”。初期建议只包含标识信息、部署配置和 CI/CD 集成三个核心类别,随着平台成熟度提升再逐步加入治理策略和成本模型。过度设计会导致平台团队维护负担过重,降低目录的采纳率。