2. 服务画像基础:定义与核心维度

服务画像是容量规划与 Error Budget 协同优化的起点。它并非简单的指标罗列,而是对服务运行时特征的结构化抽象——通过一组可观测、可量化的维度,将服务的“健康状态”与“容量水位”映射为统一的决策语言。本节将定义服务画像,并拆解其四大核心维度。

2.1 服务画像的定义

服务画像(Service Profile)是一组描述服务行为模式与资源消耗特征的标准化元数据集合。它服务于两个核心目标:

  • 可对比性:不同服务(或同一服务的不同版本)能在同一维度框架下横向比较。
  • 可预测性:基于历史画像数据,推断未来容量需求与 Error Budget 消耗趋势。

关键认知:服务画像不是静态的“快照”,而是随时间演变的动态基线。每次部署、流量高峰或故障恢复后,画像都应重新校准。

2.2 核心维度总览

服务画像由四个相互关联的核心维度构成:流量、资源、延迟、错误率。它们共同覆盖了服务的“输入-消耗-质量-可靠性”闭环。

维度 描述 典型指标示例 与 Error Budget 的关系
流量 服务接收的请求量级与模式 QPS、RPS、并发连接数、请求体大小 流量突增直接消耗 Error Budget(延迟/错误率上升)
资源 服务消耗的计算与存储资源 CPU 利用率、内存使用量、磁盘 IOPS、网络带宽 资源瓶颈导致延迟劣化,间接消耗 Error Budget
延迟 服务处理请求的响应时间 P50/P95/P99 延迟、平均延迟、慢请求占比 延迟超出 SLO 阈值直接计入 Error Budget 消耗
错误率 服务返回错误响应的比例 HTTP 5xx 率、超时率、业务错误码率 错误率是 Error Budget 最直接的消耗来源

2.3 流量维度

流量是服务画像的“输入信号”。容量规划的第一步是理解流量的量级、模式与组成。

  • 量级:峰值 QPS、日均请求总量、突发流量倍数(峰值/均值)。
  • 模式:周期性(日/周/月峰谷)、趋势性(增长/衰减)、突发性(秒杀/回放)。
  • 组成:读写比例、热点 Key 分布、客户端类型(Web/App/API)。

实践建议:在流量维度中,务必记录“有效请求”与“无效请求”的占比。大量无效请求(如爬虫、重试风暴)会虚增流量,导致容量规划失真。

2.4 资源维度

资源维度描述服务将流量转化为计算结果的“成本”。它与流量维度存在强关联,但并非线性关系。

资源类型 关键指标 容量水位判定依据
CPU 利用率、Load Average、上下文切换 持续 > 80% 视为高水位,需扩容
内存 使用量、GC 频率、OOM 计数 接近上限 90% 或 GC 停顿 > 1% 时间
磁盘 I/O IOPS、吞吐量、延迟 队列深度持续 > 内核参数阈值
网络 带宽使用率、丢包率、重传率 带宽 > 70% 且重传率 > 0.1%

2.5 延迟维度

延迟是服务质量的“温度计”。在 Error Budget 框架中,延迟通常与 SLO 直接绑定——例如“P99 延迟 < 200ms 的请求占比 ≥ 99.9%”。

  • 分位延迟:P50(典型体验)、P95(大多数用户)、P99(长尾用户)。
  • 延迟分布:直方图比平均值更能揭示问题(如双峰分布暗示缓存失效或 GC 抖动)。
  • 延迟分解:网络耗时、排队耗时、服务处理耗时、依赖服务耗时。

常见误区:仅关注平均延迟。平均延迟掩盖了长尾问题——当 P99 延迟飙升时,平均延迟可能仅上升 10%,但 Error Budget 可能已耗尽。

2.6 错误率维度

错误率是 Error Budget 的“直接消耗账户”。并非所有错误都等价,服务画像需要区分错误类型:

  1. 可重试错误:如 503 Service Unavailable,客户端重试可能成功。
  2. 不可重试错误:如 400 Bad Request,重试无意义。
  3. 业务错误:如“余额不足”,虽返回 200,但业务逻辑失败。

在 Error Budget 计算中,通常只将符合 SLO 定义的错误(如 5xx 或超时)计入消耗。业务错误需单独监控,避免污染 Error Budget。

2.7 四维协同关系图

下图展示了流量、资源、延迟、错误率之间的典型因果链路:

服务画像四维协同关系 流量 (Traffic) 资源 (Resource) 延迟 (Latency) 错误率 (Error Rate) 驱动资源消耗 资源瓶颈 资源耗尽 超时转化为错误 Error Budget 消耗路径:流量 → 资源 → 延迟/错误率 → 消耗 Error Budget

2.8 画像数据的采集与存储

服务画像的数据来源通常包括:

  • 指标系统:Prometheus / VictoriaMetrics,存储时序数据。
  • 链路追踪:Jaeger / Zipkin,提供延迟分解与依赖关系。
  • 日志系统:ELK / Loki,记录错误详情与请求上下文。
  • 配置管理:服务部署规格、限流阈值、扩缩容策略。

存储建议:画像数据应保留至少 30 天(用于趋势分析),关键维度(如峰值 QPS、P99 延迟)建议保留 6 个月以上用于容量预测模型训练。

2.9 画像与 Error Budget 的首次关联

在服务画像建立后,即可进行 Error Budget 的初步映射:

# 伪代码:基于画像计算 Error Budget 消耗速率
error_budget_consumed_per_second = 
    (requests_per_second * slo_error_rate_threshold) 
    - (requests_per_second * actual_error_rate)

# 当 actual_error_rate > slo_error_rate_threshold 时,消耗为正
# 当 actual_error_rate <= slo_error_rate_threshold 时,消耗为负(积累)

此公式将流量、错误率、SLO 阈值三者关联,是后续容量水位优化的数学基础。

2.10 本节小结