4. 服务目录概念:服务目录的定义、核心要素与平台工程角色

服务目录是平台工程中连接“基础设施能力”与“业务应用”的核心元数据层。它并非简单的服务列表,而是一个可查询、可关联、可审计的运行时知识库,记录了每个服务的身份、归属、依赖与承诺。在 DORA 度量体系中,服务目录是计算变更失败率、部署频率、前置时间和恢复时间的实体锚点——没有准确的服务目录,所有度量都将失去归属对象。

4.1 服务目录的定义

服务目录(Service Catalog)是一个集中式、权威且持续更新的注册中心,用于记录组织内所有生产服务的元数据。它区别于 CMDB(配置管理数据库)的关键在于:服务目录聚焦于服务级抽象,而非底层 CI(配置项);它强调所有者责任与服务等级承诺,而非单纯的资产盘点。

核心定义:服务目录 = 服务身份 + 所有权 + 依赖拓扑 + 运行承诺(SLA/SLO/SLI)。它是平台工程中“黄金路径”的起点,也是 DORA 度量的数据底座。

4.2 核心要素

一个生产级服务目录至少包含以下四个核心要素。缺少任何一项,目录都将退化为“僵尸清单”,无法支撑效能评估与故障回溯。

核心要素 字段示例 在 DORA 度量中的作用
服务名称 payment-gateway、user-auth 作为度量标签(label)关联部署事件、告警事件与变更记录
所有者 团队名(如 team-payment)、PagerDuty 调度 确定变更审批人、故障恢复负责人,计算 MTTR 归属
依赖关系 上游依赖:user-db;下游消费者:order-svc 评估变更影响范围,计算“变更失败率”的波及面
SLA / SLO / SLI SLO:99.95% 可用性;SLI:P99 延迟 < 200ms 作为效能目标基线,判断部署频率是否过快导致 SLA 违约
实践建议:在服务目录中为每个服务至少维护一个 slo.yaml 文件,与代码仓库同源管理。这样 DORA 度量工具可以直接从目录中读取 SLO 目标,自动对比实际 SLI 表现,生成“效能-质量”平衡报告。

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

在平台工程拓扑中,服务目录处于开发者门户与基础设施控制面之间的枢纽位置。它向下对接 Kubernetes 集群、数据库、消息队列等资源,向上暴露给 Backstage、Kratix 等开发者门户,作为服务创建、变更、退役的唯一入口。

具体角色可归纳为以下四点:

  1. 黄金路径的导航器:开发者通过服务目录发现“我应该使用哪个数据库模板”“这个服务的 CI/CD 模板在哪里”。目录中的 template 字段直接链接到平台工程定义的黄金路径。
  2. 变更风险的评估器:当某个底层基础设施(如 Redis 集群)计划升级时,服务目录的依赖关系图可以快速列出所有受影响的服务及其所有者,从而计算变更的“爆炸半径”。
  3. DORA 度量的实体锚点:所有部署事件、告警事件、故障事件都必须关联到服务目录中的唯一服务 ID。没有目录,度量将退化为“按团队聚合”的粗粒度统计,无法定位到具体服务。
  4. 治理与合规的审计点:服务目录记录每个服务的 生命周期状态(active / deprecated / retired)、数据分类(PII / non-PII)、合规标签(PCI / HIPAA)。平台工程团队可以据此实施自动化门禁,例如:禁止未标记 PII 的服务写入生产数据库。
服务目录核心要素关系图 服务目录 服务名称 所有者 依赖关系 SLA / SLO / SLI 四个要素缺一不可,共同构成 DORA 度量的实体锚点

4.4 服务目录的典型数据结构

以下是一个 YAML 格式的服务目录条目示例,展示了核心要素在实际平台中的表达方式。该结构可直接被 Backstage、Kratix 或自研门户解析。

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-gateway
  annotations:
    github.com/project-slug: org/payment-gateway
    pagerduty.com/service-id: "P12345"
spec:
  type: service
  lifecycle: production
  owner: team-payment
  system: payment-platform
  dependsOn:
    - component:user-db
    - resource:redis-cluster
  providesApis:
    - payment-api
  slo:
    - name: availability
      target: 99.95
      sli: http_request_success_rate
    - name: latency
      target: 200
      sli: p99_latency_ms
      unit: ms
常见陷阱:很多团队在初期只维护“服务名称”和“所有者”,忽略了“依赖关系”和“SLO”。这会导致两个后果:一是变更影响分析完全靠人工记忆,二是 DORA 度量无法区分“服务本身故障”还是“上游依赖故障”,MTTR 计算失真。

4.5 服务目录在平台工程中的位置

从平台工程的分层架构来看,服务目录位于开发者体验层与资源编排层之间。它不直接管理基础设施,而是为上层门户提供“服务上下文”,为下层编排提供“配置参数”。

服务目录在平台工程分层架构中的位置 开发者门户(Backstage / 自研门户) 服务目录 元数据注册 · 依赖拓扑 · SLO 管理 基础设施控制面(K8s / Terraform / Crossplane) 服务目录的桥梁作用 向上:为开发者提供“我的服务有哪些依赖?SLO 是否达标?”的上下文 向下:为基础设施控制面提供“这个服务应该部署在哪个集群?需要哪些资源?”的配置

4.6 服务目录与 DORA 度量的映射

服务目录中的每个字段都直接或间接支撑 DORA 四大指标的采集与计算。下表展示了映射关系:

DORA 指标 所需服务目录字段 计算逻辑
部署频率 name、owner、lifecycle 按服务名称聚合 CI/CD 部署事件,排除 lifecycle: deprecated 的服务
变更前置时间 name、dependsOn 从代码提交到生产部署的时间,依赖关系用于判断是否因等待上游而延迟
变更失败率 name、dependsOn、slo 部署后 SLO 违约次数 / 总部署次数;依赖关系用于区分“自身失败”与“上游牵连”
故障恢复时间 name、owner、pagerduty.com/service-id 从告警触发到 SLO 恢复的时间,所有者字段直接关联值班调度
落地检查清单:在引入服务目录之前,请确认以下三点:
1. 每个生产服务是否有一个全局唯一的 name?
2. 是否有一个团队(而非个人)被明确标记为 owner?
3. 是否至少定义了一个 slo 目标(哪怕只是 99.9% 可用性)?
如果以上三点都未满足,建议先完成“最小可行服务目录”再推进 DORA 度量。