2. 服务画像基础:服务画像的定义、服务画像的构成要素(元数据、依赖、拓扑)、服务画像与CMDB的关系
2.1 服务画像的定义
服务画像(Service Profiling)是对一个服务在运行态、部署态和设计态的全维度数字化描述。它不仅仅是静态的资产清单,更是一组动态、可查询、可关联的上下文信息集合,用于回答“这个服务是什么、依赖谁、被谁依赖、运行在哪里、关键指标是什么”。
在SRE实践中,服务画像是构建SLO台账、执行质量门禁、进行故障定位和容量评估的基础数据底座。没有准确的服务画像,任何自动化运维和可观测性分析都缺乏可靠的上下文锚点。
核心观点: 服务画像 = 服务元数据 + 依赖关系 + 运行时拓扑 + 质量契约(SLO)。其中前三个要素是本章重点,质量契约将在后续章节展开。
2.2 服务画像的构成要素
服务画像由三个核心要素构成:元数据、依赖关系和运行时拓扑。三者共同形成一个立体的服务视图。
2.2.1 元数据(Metadata)
元数据是服务画像的静态基础,描述服务“是什么”。典型的服务元数据字段如下表所示:
| 分类 | 字段 | 示例值 | 说明 |
|---|---|---|---|
| 基础信息 | 服务名称 | order-service | 全局唯一标识 |
| 基础信息 | 服务ID | svc-0001 | CMDB或注册中心ID |
| 基础信息 | 服务类型 | HTTP / gRPC / 消息队列消费者 | 通信协议类型 |
| 基础信息 | 所属域 | 交易域 | 业务域划分 |
| 基础信息 | 负责人 | 张三 (zhangsan@company.com) | Oncall 联系人 |
| 部署信息 | 部署环境 | prod / staging / dev | 环境标签 |
| 部署信息 | 集群/命名空间 | k8s-prod-cluster-1 / default | Kubernetes 上下文 |
| 部署信息 | 实例数 | 10 | 当前运行实例数 |
| 部署信息 | 语言/框架 | Go 1.21 / Gin | 技术栈 |
| 质量契约 | SLO 目标 | 99.95% | 年度可用性目标 |
| 质量契约 | 错误预算 | 26.3 分钟/季度 | 允许的最大不可用时间 |
2.2.2 依赖关系(Dependencies)
依赖关系描述服务“依赖谁”以及“被谁依赖”。这是进行故障影响分析和变更风险评估的关键输入。依赖关系通常分为两类:
- 上游依赖(Upstream Dependencies): 当前服务所调用的外部服务或基础设施,例如数据库、缓存、消息队列、其他微服务API。
- 下游依赖(Downstream Dependents): 调用当前服务的其他服务或客户端。
依赖关系需要记录的关键属性包括:
- 依赖的服务名称或资源标识
- 调用协议(HTTP、gRPC、JDBC、Redis协议等)
- 调用方式(同步/异步)
- 超时配置与重试策略
- 依赖的SLO(如果已知)
2.2.3 运行时拓扑(Runtime Topology)
运行时拓扑是服务在特定时刻的实例分布和连接关系的快照。它比静态依赖关系更动态,反映了服务的实际部署形态和流量路径。
拓扑信息通常包括:
- 服务实例列表(Pod IP、端口、健康状态)
- 服务间调用链路(Trace 拓扑)
- 负载均衡器与网关的接入点
- 数据层的主从/分片关系
实践要点: 元数据是静态的“身份证”,依赖关系是逻辑的“社交网络”,运行时拓扑是动态的“实时地图”。三者缺一不可,共同构成完整的服务画像。
2.3 服务画像与CMDB的关系
CMDB(Configuration Management Database,配置管理数据库)是ITIL体系中的核心资产库,而服务画像是面向SRE和可观测性场景的轻量级服务上下文模型。两者既有重叠,又有显著差异。
2.3.1 核心差异对比
| 维度 | CMDB | 服务画像 |
|---|---|---|
| 核心目标 | IT资产管理与合规审计 | 运维决策与可观测性上下文 |
| 数据粒度 | CI(配置项)级别,包含服务器、网络设备、软件等 | 服务级别,聚焦于服务及其依赖 |
| 动态性 | 相对静态,变更需审批流程 | 动态更新,可随注册中心、服务网格实时同步 |
| 关系模型 | CI之间的通用关联(如“运行在”、“连接”) | 服务间的调用依赖与拓扑 |
| 消费方 | IT运维、审计、资产管理 | SRE、开发、可观测性平台、门禁系统 |
| 数据来源 | 人工录入 + 自动发现 | 注册中心、服务网格、APM、Kubernetes API |
2.3.2 协同关系
服务画像不应完全替代CMDB,而是作为CMDB在服务维度的“视图”或“投影”。在实际落地中,推荐以下协同模式:
- CMDB作为权威源: 服务的基础元数据(如服务名称、负责人、所属域)从CMDB同步,保证与资产管理体系一致。
- 服务画像补充动态数据: 运行时拓扑、实时依赖、实例健康状态等动态信息由可观测性平台实时采集,不写入CMDB,而是存储在服务画像的缓存或图数据库中。
- 双向索引: CMDB中的CI ID与服务画像中的服务ID建立映射,支持从资产视角跳转到服务视角,反之亦然。
常见误区: 试图将服务画像的所有动态数据(如每秒请求量、P99延迟)全部写入CMDB,会导致CMDB表结构频繁变更、数据量爆炸,失去其作为稳定配置基准的价值。服务画像应保持轻量,动态指标由可观测性系统承载。