1. 服务画像概述

1.1 服务画像的定义

服务画像(Service Profile)是对一个在线服务系统在运行态的数字化抽象与结构化描述。它并非静态的架构文档,而是通过可观测性数据持续驱动的、反映服务健康状态、行为特征与依赖关系的动态模型。简单来说,服务画像就是服务在运维视角下的“数字孪生身份证”。

核心定义:服务画像 = 服务元数据 + 实时可观测性指标 + 历史行为基线 + 依赖拓扑关系。它让 SRE 团队能够“一眼看清”一个服务的真实运行面貌。

1.2 服务画像在 SRE 中的价值

在 SRE 实践中,服务画像解决了三个关键问题:“服务现在健康吗?”、“服务依赖谁?”、“服务容量够吗?”。其具体价值体现在以下四个维度:

价值维度 说明 典型场景
故障定位加速 通过链路画像快速定位故障边界,区分是自身问题还是依赖方问题 P0 故障时,5 分钟内确定根因
容量规划依据 基于 SLO 达成率与误差预算消耗趋势,指导扩缩容决策 大促前评估是否需要扩容
变更风险评估 结合台账与链路依赖,评估变更影响范围 发布前自动检测下游依赖是否健康
成本优化抓手 通过误差预算利用率,识别过度冗余或资源浪费的服务 识别长期低负载但高配置的服务实例

1.3 服务画像的核心要素

服务画像由四个核心要素构成,它们共同编织成服务的完整运行视图:SLO(服务等级目标)、误差预算(Error Budget)、台账(Service Inventory)、链路(Service Topology)。

服务画像核心要素关系图 服务画像 SLO 服务等级目标 误差预算 服务台账 服务链路 SLO 定义误差预算消耗速率 台账记录链路依赖关系 SLO 与台账关联服务等级 误差预算影响链路健康 四个要素相互关联:SLO 定义目标 → 误差预算量化风险 → 台账记录资产 → 链路映射依赖

1.4 核心要素详解

1.4.1 SLO(服务等级目标)

SLO 是服务画像的“北极星”,它定义了服务在特定时间窗口内必须达到的可靠性目标。常见的 SLO 指标包括:

  • 可用性(Availability):服务请求成功率的百分比,例如 99.9%(三个九)。
  • 延迟(Latency):请求响应时间的百分位值,例如 p99 延迟 < 200ms。
  • 吞吐量(Throughput):单位时间处理的请求数,例如 10,000 QPS。
  • 错误率(Error Rate):返回错误状态码的请求占比,例如 < 0.1%。
实践建议:SLO 不是越高越好。99.99% 的 SLO 意味着每年仅 52 分钟的不可用时间,对应的基础设施成本可能翻倍。SLO 的设定需要平衡用户体验与运营成本。

1.4.2 误差预算(Error Budget)

误差预算 = 1 - SLO。它代表服务在 SLO 目标下允许失败的总量。例如,99.9% 可用性的服务,其月度误差预算为 0.1% × 30 天 × 24 小时 × 3600 秒 = 约 43 分钟。误差预算的核心作用:

  • 风险量化:将抽象的可靠性目标转化为具体的“可消耗时间”。
  • 决策依据:当误差预算充足时,可以加速发布新功能;当预算紧张时,应冻结变更、优先修复稳定性。
  • 告警触发:设置误差预算消耗速率告警,提前预警 SLO 违规风险。

1.4.3 台账(Service Inventory)

台账是服务画像的“资产清单”,记录了服务的所有静态与动态元数据:

台账类别 包含内容 示例
基础信息 服务名称、Owner、团队、Git 仓库、部署环境 order-service / 电商团队 / prod
资源信息 CPU/内存规格、实例数、容器镜像版本 4C8G × 20 实例 / v2.3.1
配置信息 启动参数、环境变量、特性开关 JAVA_OPTS="-Xmx4g" / feature_flag_v2=true
依赖信息 依赖的中间件、数据库、外部 API MySQL 集群 A / Redis 集群 B

1.4.4 链路(Service Topology)

链路是服务画像的“交通地图”,它描绘了服务之间的调用关系与数据流向。链路画像的价值在于:

  • 依赖可视化:清晰展示上游调用方与下游依赖方。
  • 故障传播分析:当某个下游服务出现延迟或错误时,快速评估受影响的上游服务范围。
  • 容量评估:结合链路流量数据,判断是否需要为关键路径上的服务扩容。
典型微服务链路画像示例 API 网关 订单服务 支付服务 库存服务 MySQL 主库 Redis 缓存 消息队列
常见误区:很多团队只关注 SLO 指标,却忽略了台账和链路的维护。当故障发生时,没有准确的台账和链路信息,SLO 数据只能告诉你“服务出问题了”,却无法告诉你“问题出在哪里”。服务画像的四个要素缺一不可。

1.5 服务画像的构建原则

  1. 自动化优先:通过服务注册发现、CMDB、可观测性平台自动采集数据,减少人工维护。
  2. 动态更新:服务画像不是一次性文档,需要随部署、扩缩容、依赖变更实时刷新。
  3. 分层抽象:从基础设施层、中间件层到业务服务层,逐层构建画像,避免信息过载。
  4. 可消费性:画像数据应能被告警系统、自动化运维工具、可视化大盘直接消费。