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 的“直接消耗账户”。并非所有错误都等价,服务画像需要区分错误类型:
- 可重试错误:如 503 Service Unavailable,客户端重试可能成功。
- 不可重试错误:如 400 Bad Request,重试无意义。
- 业务错误:如“余额不足”,虽返回 200,但业务逻辑失败。
在 Error Budget 计算中,通常只将符合 SLO 定义的错误(如 5xx 或超时)计入消耗。业务错误需单独监控,避免污染 Error Budget。
2.7 四维协同关系图
下图展示了流量、资源、延迟、错误率之间的典型因果链路:
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 阈值三者关联,是后续容量水位优化的数学基础。