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 等开发者门户,作为服务创建、变更、退役的唯一入口。
具体角色可归纳为以下四点:
- 黄金路径的导航器:开发者通过服务目录发现“我应该使用哪个数据库模板”“这个服务的 CI/CD 模板在哪里”。目录中的
template字段直接链接到平台工程定义的黄金路径。 - 变更风险的评估器:当某个底层基础设施(如 Redis 集群)计划升级时,服务目录的依赖关系图可以快速列出所有受影响的服务及其所有者,从而计算变更的“爆炸半径”。
- DORA 度量的实体锚点:所有部署事件、告警事件、故障事件都必须关联到服务目录中的唯一服务 ID。没有目录,度量将退化为“按团队聚合”的粗粒度统计,无法定位到具体服务。
- 治理与合规的审计点:服务目录记录每个服务的 生命周期状态(active / deprecated / retired)、数据分类(PII / non-PII)、合规标签(PCI / HIPAA)。平台工程团队可以据此实施自动化门禁,例如:禁止未标记 PII 的服务写入生产数据库。
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 服务目录在平台工程中的位置
从平台工程的分层架构来看,服务目录位于开发者体验层与资源编排层之间。它不直接管理基础设施,而是为上层门户提供“服务上下文”,为下层编排提供“配置参数”。
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. 每个生产服务是否有一个全局唯一的
2. 是否有一个团队(而非个人)被明确标记为
3. 是否至少定义了一个
如果以上三点都未满足,建议先完成“最小可行服务目录”再推进 DORA 度量。
1. 每个生产服务是否有一个全局唯一的
name?2. 是否有一个团队(而非个人)被明确标记为
owner?3. 是否至少定义了一个
slo 目标(哪怕只是 99.9% 可用性)?如果以上三点都未满足,建议先完成“最小可行服务目录”再推进 DORA 度量。