2. 服务画像基础:服务画像的定义、核心要素
2.1 服务画像的定义
服务画像(Service Profiling)是对一个在线服务系统进行多维度、结构化描述的过程。它并非简单的“服务拓扑图”或“监控大盘”,而是一套可量化、可对比、可预测的元数据模型。通过服务画像,SRE 团队能够回答三个核心问题:
- 这个服务消耗了什么?(资源与依赖)
- 这个服务承载了什么?(流量与负载)
- 这个服务运行得怎么样?(健康度与可靠性)
画像 vs. 监控:监控回答“现在发生了什么”,画像回答“这个服务本质是什么以及它应该怎样运行”。画像为 Error Budget 和容量规划提供了静态基线。
2.2 核心要素总览
服务画像由四个核心要素构成:资源(Resource)、流量(Traffic)、依赖(Dependency)、健康度(Health)。四者共同构成一个完整的服务视图。
| 要素 | 定义 | 典型指标 | 对容量规划的意义 |
|---|---|---|---|
| 资源 | 服务运行所消耗的物理或虚拟资源 | CPU 使用率、内存 RSS、磁盘 IOPS、网络带宽 | 确定扩容阈值与资源配比 |
| 流量 | 服务接收的外部请求与内部数据流 | QPS、RPS、并发连接数、吞吐量(MB/s) | 预测负载峰值与弹性伸缩策略 |
| 依赖 | 服务正常运行所依赖的外部组件或下游服务 | 依赖列表、调用延迟 P99、错误率、熔断状态 | 识别单点故障与级联风险 |
| 健康度 | 服务是否按预期提供正确、及时的服务 | SLI(延迟/错误率/吞吐)、Error Budget 消耗 | 设定容量水位红线与降级策略 |
2.3 资源要素详解
资源是服务画像的“硬约束”。在容量规划中,我们关注的是资源利用率与负载之间的关系曲线。常见的资源分类包括:
- 计算资源:CPU 时间片、vCPU 核数、容器/VM 规格。
- 内存资源:堆内/堆外内存、Page Cache、共享内存。
- 存储资源:磁盘容量、IOPS、读写延迟、文件描述符。
- 网络资源:带宽、连接数、NAT 端口、DNS 解析量。
实践要点:不要只看平均利用率。在服务画像中,必须记录 P99 峰值利用率 和 资源争抢系数(如 CPU 等待时间、内存 Swap 量),这些才是容量瓶颈的真实信号。
2.4 流量要素详解
流量是服务画像的“动态输入”。流量画像需要区分正常流量与异常流量(如爬虫、重试风暴、DDoS)。
流量维度通常包含:
- 请求量:QPS(Queries Per Second)或 RPS(Requests Per Second),区分读/写、成功/失败。
- 并发度:活跃连接数、协程/线程池占用率。
- 数据量:请求体大小、响应体大小、日志产生速率。
- 流量模式:周期性(日/周/月峰值)、突发性(秒杀/热点)、季节性(促销/节假日)。
常见误区:仅记录平均 QPS 会导致容量严重不足。服务画像必须包含 P99 峰值 QPS 和 流量陡增系数(如 5 分钟内流量翻倍的频率)。
2.5 依赖要素详解
依赖是服务画像的“外部边界”。一个服务可能依赖数十个下游组件,任何一个依赖的故障都可能引发级联效应。
依赖画像需要记录:
- 依赖清单:数据库、缓存、消息队列、其他微服务、DNS、CDN、认证服务。
- 调用关系:同步/异步、超时时间、重试策略、熔断阈值。
- 依赖健康:下游 SLI(延迟、错误率)、SLA 承诺、降级方案。
- 依赖容量:下游是否有限流、连接池大小、吞吐上限。
2.6 健康度要素详解
健康度是服务画像的“最终输出”。它直接关联到 Error Budget 的计算与容量水位的判定。健康度不是单一的“UP/DOWN”,而是一个多级状态模型:
| 健康等级 | 描述 | Error Budget 消耗 | 容量水位动作 |
|---|---|---|---|
| 健康 | 所有 SLI 达标,无错误 | 消耗 < 10% 月度预算 | 正常运营,可进行常规变更 |
| 亚健康 | 部分 SLI 接近阈值,偶发错误 | 消耗 10% ~ 50% | 限制变更频率,启动容量评估 |
| 风险 | SLI 持续超限,错误率上升 | 消耗 50% ~ 80% | 暂停非紧急变更,准备扩容 |
| 故障 | SLO 违反,用户可见影响 | 消耗 > 80% 或已耗尽 | 立即扩容/降级/回滚,启动应急 |
2.7 服务画像的落地流程
在实际 SRE 工作中,服务画像的建立通常遵循以下步骤:
- 初始化:收集服务元数据(所属团队、技术栈、部署架构、SLO 目标)。
- 资源基线:连续采集 14 天资源指标,计算 P50/P95/P99 基线值。
- 流量建模:识别流量周期与峰值模式,建立流量预测模型。
- 依赖梳理:通过分布式追踪(如 Jaeger/Zipkin)自动生成依赖图,标注关键依赖。
- 健康度映射:将 SLI 与 Error Budget 消耗映射到健康等级。
- 持续更新:每次架构变更或大促后,重新校准画像数据。
2.8 服务画像与 Error Budget 的关联
服务画像为 Error Budget 提供了容量维度的上下文。没有画像的 Error Budget 只是一个数字,有了画像,Error Budget 才能指导具体的容量动作:
- 资源画像 告诉你:当前 Error Budget 消耗是否由资源瓶颈导致。
- 流量画像 告诉你:Error Budget 消耗是否与流量峰值相关。
- 依赖画像 告诉你:Error Budget 消耗是否来自下游依赖的故障。
- 健康度画像 告诉你:当前 Error Budget 剩余量对应的风险等级。
核心观点:服务画像让 Error Budget 从“事后统计”变为“事前预警”。当资源利用率超过基线 P95 时,即使 Error Budget 尚未耗尽,也应触发容量评估——这就是“容量水位口径优化”的起点。