4. 压测目标定义:压测核心指标与 SLO/SLA 设定方法

在 etcd 多集群压测中,明确的目标是衡量系统是否满足业务承诺的基石。本章将定义压测必须追踪的四大核心指标,并阐述如何基于这些指标设定可量化的 SLO(服务等级目标)与 SLA(服务等级协议)。

4.1 压测核心指标(QPS、延迟、成功率、资源消耗)

压测过程中,我们聚焦于以下四个维度的指标,它们共同构成了 etcd 集群性能的全景图:

指标类别 核心度量 说明与典型阈值参考
QPS 每秒请求数(吞吐量) 区分读写:写 QPS(Put/Txn)通常低于读 QPS(Range)。单集群常规硬件下,写 QPS 约 5k-15k,读 QPS 约 20k-50k。
延迟 P99 / P999 延迟 P99 写延迟通常应 < 10ms,P999 写延迟 < 50ms。读延迟更低,P99 < 5ms。关注 tail latency 而非平均值。
成功率 请求成功百分比 压测期间,排除限流后的有效请求成功率应 ≥ 99.9%。错误类型包括:超时、Leader 变更、资源不足、Raft 提案失败。
资源消耗 CPU / 内存 / 磁盘 IO / 网络 CPU 使用率 < 80%,内存使用率 < 80%,磁盘 IO 延迟 < 10ms,网络带宽 < 60%。关注 WAL 写入速率和 DB 大小。
压测指标关联性: 四个指标并非孤立。当 QPS 接近上限时,延迟会急剧上升(拐点),成功率可能因超时而下降,资源消耗也会同步飙升。压测的核心就是找到这个“拐点”。

4.2 SLO / SLA 设定方法

SLO 是内部目标,SLA 是对外的承诺。在压测场景中,我们通过压测数据来验证和校准 SLO。

4.2.1 SLO 设定步骤

  1. 定义指标窗口: 例如“过去 1 小时内,P99 写延迟 ≤ 10ms”。
  2. 设定目标值: 基于业务容忍度。例如,业务要求 99% 的写操作在 20ms 内完成,则 SLO 可设为 P99 ≤ 15ms(留有余量)。
  3. 确定测量周期: 通常为 5 分钟、1 小时或 1 天。压测时使用 1 分钟窗口。
  4. 定义错误预算: 例如,每月允许 SLO 不达标的时间为 0.1%(约 43 分钟)。

4.2.2 SLA 与 SLO 的映射关系

层级 定义 压测验证点
SLO(内部) P99 写延迟 ≤ 8ms,成功率 ≥ 99.95% 压测目标:在 10k QPS 下,P99 写延迟 ≤ 8ms,无错误。
SLA(对外) P99 写延迟 ≤ 20ms,成功率 ≥ 99.9% 压测目标:在 15k QPS 下,P99 写延迟 ≤ 20ms,成功率 ≥ 99.9%。
错误预算 每月 SLA 不达标时间 ≤ 0.1% 压测需模拟持续高负载,确保不触发 SLA 违约。
常见陷阱: 不要将平均值作为 SLO。平均值会掩盖尾延迟问题。始终使用 P99 或 P999。同时,SLO 应包含“排除条件”,例如“排除因客户端侧网络故障导致的延迟”。

4.3 压测目标与 SLO 的关联流程

下图展示了从业务需求到压测目标,再到 SLO 验证的完整链路:

压测目标与 SLO 设定流程 业务需求 SLO 定义 压测目标 压测执行 指标采集 SLO 评估 通过 / 调整 SLO 反馈调整 SLO

4.4 压测目标定义清单

在实际压测开始前,团队应输出一份明确的压测目标清单,作为后续所有工作的基准:

  • 基准负载: 定义“正常”与“峰值”负载。例如:正常 5k QPS,峰值 15k QPS。
  • 延迟 SLO: 在基准负载下,P99 写延迟 ≤ 10ms;在峰值负载下,P99 写延迟 ≤ 25ms。
  • 成功率 SLO: 所有负载下,请求成功率 ≥ 99.95%(排除客户端重试导致的重复请求)。
  • 资源消耗上限: 峰值负载下,单节点 CPU ≤ 75%,内存 ≤ 80%,磁盘 IO 延迟 ≤ 15ms。
  • 稳定性窗口: 在峰值负载下持续运行 30 分钟,无性能退化或错误率上升趋势。
实战建议: 将压测目标写入压测脚本的配置文件中,并在压测报告中自动比对。例如,使用 Prometheus + Grafana 实时监控,当 P99 延迟超过 SLO 时,自动标记该轮压测为“失败”。