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 小时内,P99 写延迟 ≤ 10ms”。
- 设定目标值: 基于业务容忍度。例如,业务要求 99% 的写操作在 20ms 内完成,则 SLO 可设为 P99 ≤ 15ms(留有余量)。
- 确定测量周期: 通常为 5 分钟、1 小时或 1 天。压测时使用 1 分钟窗口。
- 定义错误预算: 例如,每月允许 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 验证的完整链路:
4.4 压测目标定义清单
在实际压测开始前,团队应输出一份明确的压测目标清单,作为后续所有工作的基准:
- 基准负载: 定义“正常”与“峰值”负载。例如:正常 5k QPS,峰值 15k QPS。
- 延迟 SLO: 在基准负载下,P99 写延迟 ≤ 10ms;在峰值负载下,P99 写延迟 ≤ 25ms。
- 成功率 SLO: 所有负载下,请求成功率 ≥ 99.95%(排除客户端重试导致的重复请求)。
- 资源消耗上限: 峰值负载下,单节点 CPU ≤ 75%,内存 ≤ 80%,磁盘 IO 延迟 ≤ 15ms。
- 稳定性窗口: 在峰值负载下持续运行 30 分钟,无性能退化或错误率上升趋势。
实战建议: 将压测目标写入压测脚本的配置文件中,并在压测报告中自动比对。例如,使用 Prometheus + Grafana 实时监控,当 P99 延迟超过 SLO 时,自动标记该轮压测为“失败”。