2. 服务画像基础概念

2.1 什么是服务画像?

服务画像(Service Profiling)是对一个微服务或应用系统进行多维度、结构化、可量化的描述与建模过程。它类似于“用户画像”之于产品运营,服务画像为 SRE 和 DevOps 团队提供了一份关于服务“是谁、长什么样、如何运行”的标准化快照。

在 DORA 度量体系中,服务画像是定义 SLI(Service Level Indicator)口径的前置条件。没有准确的服务画像,SLI 的采集范围、聚合粒度、阈值设定都会失去依据,导致度量结果无法真实反映服务的健康状态。

核心认知: 服务画像不是静态的文档,而是持续演进的元数据模型。每次架构变更、部署模式调整、流量特征变化,都应触发服务画像的更新。

2.2 服务画像的核心维度

一个完整的服务画像由以下五个核心维度构成,它们共同决定了 SLI 的采集策略与计算口径:

维度 定义 对 SLI 口径的影响
业务属性 服务所属业务域、服务等级(Critical / Important / Best Effort)、SLA 承诺 决定 SLI 的 SLO 目标值、告警优先级、降级策略
技术栈 编程语言、框架、中间件、数据库、协议栈 决定可观测性数据采集方式(Agent / SDK / Sidecar)、指标暴露格式
部署模式 容器化 / 虚拟机 / 裸金属、K8s / 自建、多 AZ / 多 Region 决定 SLI 的聚合粒度(Pod / Node / Cluster)、可用性计算模型
流量特征 QPS 基线、请求类型(同步 / 异步 / 流式)、峰值模式、调用链深度 决定 SLI 的采样率、百分位计算方式、异常检测基线
团队结构 Owner 团队、On-Call 轮值、变更审批流程、发布频率 决定 SLI 的变更失败率计算口径、MTTR 的计时起点

2.3 服务画像五维关系图

下图展示了五个核心维度之间的依赖与影响关系,以及它们如何共同作用于 SLI 口径的定义:

服务画像五维关系与 SLI 口径映射 服务画像 业务属性 技术栈 部署模式 流量特征 团队结构 SLI 口径定义

2.4 各维度详解

2.4.1 业务属性

业务属性是服务画像的顶层维度,它定义了服务的商业价值和运营等级。常见的业务属性分类包括:

  • 服务等级:Critical(核心交易链路)、Important(重要支撑服务)、Best Effort(非关键辅助服务)
  • SLA 承诺:99.99% / 99.9% / 99% 等不同级别的可用性目标
  • 业务域:支付域、用户域、商品域、订单域等
  • 合规要求:数据主权、审计日志保留周期、加密标准
SLI 口径影响: Critical 服务的 SLI 必须采用 99.9 百分位延迟,且告警阈值更严格;Best Effort 服务可采用 95 百分位,告警响应时间可放宽。

2.4.2 技术栈

技术栈决定了可观测性数据的采集可行性和指标暴露格式。不同技术栈的 SLI 采集方式差异显著:

技术栈类型 典型代表 SLI 采集方式
JVM 生态 Spring Boot / Micrometer JMX Exporter / Micrometer Registry
Go 生态 Gin / gRPC Prometheus Client SDK / OpenTelemetry SDK
Node.js 生态 Express / Koa OpenTelemetry JS SDK / Prometheus Client
Mesh 代理 Envoy / Istio Sidecar 自动注入,零代码采集

2.4.3 部署模式

部署模式直接影响 SLI 的聚合粒度和可用性计算模型。以下是三种主流部署模式下的 SLI 口径差异:

  • K8s 容器化:SLI 按 Pod 粒度采集,可用性 = 就绪 Pod 数 / 期望 Pod 数,支持 HPA 自动扩缩容场景
  • 虚拟机 / 裸金属:SLI 按主机粒度采集,可用性 = 健康实例数 / 总实例数,需考虑蓝绿部署时的流量切换
  • Serverless:SLI 按函数调用粒度采集,可用性 = 成功调用次数 / 总调用次数,冷启动延迟需单独建模

2.4.4 流量特征

流量特征决定了 SLI 的采样策略和百分位计算方式。不同流量模式下的 SLI 口径差异:

流量特征 典型场景 SLI 口径建议
高 QPS 同步 API Gateway、用户查询 1% 采样 + HDR Histogram,99 百分位延迟
异步消息 事件驱动、消息队列 端到端延迟(生产-消费),P99 延迟
流式处理 实时计算、日志管道 吞吐量(records/sec)+ 处理延迟(P50)
批处理 离线报表、数据同步 完成率 + 总耗时(非百分位)

2.4.5 团队结构

团队结构影响 SLI 中变更失败率和MTTR 的计算口径:

  • Owner 团队:明确 SLI 的负责人,变更失败率按团队维度聚合
  • On-Call 轮值:MTTR 的计时起点从 On-Call 工程师确认告警开始,而非告警触发时间
  • 变更审批流程:需要审批的变更,失败率计算应排除“因审批延迟导致的回滚”场景
  • 发布频率:高频发布团队(每日多次)的变更失败率 SLI 应采用滚动窗口(如 7 天),而非固定周期
常见误区: 团队结构维度常被忽略,导致 MTTR 计算口径不一致。例如,A 团队从告警触发开始计时,B 团队从 On-Call 确认开始计时,两个团队的 MTTR 数据无法直接对比。

2.5 服务画像与 SLI 口径的映射关系

以下表格总结了五个维度如何具体影响 SLI 的采集、聚合、计算、阈值四个环节:

SLI 环节 业务属性 技术栈 部署模式 流量特征 团队结构
采集 等级决定采集频率 决定采集工具 决定采集粒度 决定采样率 —
聚合 按业务域聚合 按技术栈分组 按集群/命名空间 按请求类型 按团队分组
计算 SLO 目标值 指标计算公式 可用性模型 百分位选择 MTTR 计时起点
阈值 告警优先级 错误码映射 扩缩容触发条件 异常检测基线 变更失败率窗口

2.6 服务画像的实践要点

  1. 标准化模板:团队应建立统一的服务画像模板,确保所有服务都按相同维度描述,避免口径不一致
  2. 自动化采集:通过 CMDB、服务注册中心、K8s 标签等基础设施自动填充画像信息,减少人工维护成本
  3. 版本化管理:服务画像应纳入版本控制(如 Git),每次架构变更都需更新画像并触发 SLI 口径重新评估
  4. 定期审计:每季度对服务画像进行审计,确保画像与实际运行状态一致,避免“画像漂移”
  5. 与 SLI 联动:服务画像的变更应自动触发 SLI 口径的重新计算,形成“画像变更 → 口径更新 → 度量生效”的闭环
最佳实践: 在服务上线流程中增加“服务画像注册”环节,将画像信息作为服务发布的必要条件。未完成画像注册的服务,不允许接入生产流量。