4. 压测指标定义:QPS、延迟(P99/P999)、吞吐量、错误率、资源利用率
在多集群 etcd 压测中,指标定义是评估性能、发现瓶颈和验证调优效果的基石。错误的指标选择或解读会直接导致调优方向偏离。本章定义五个核心压测指标,并说明其计算方式、观测意义及在多集群场景下的特殊注意事项。
4.1 指标全景与分层
压测指标并非孤立存在,它们之间存在因果与约束关系。下图展示了五个指标在 etcd 请求生命周期中的位置与关联:
指标分层原则:QPS、延迟和错误率是客户端直接感知的“外部指标”;吞吐量是网络传输层的“中间指标”;资源利用率是服务端的“内部指标”。调优时需从外部指标发现问题,向内部指标追溯根因。
4.2 核心指标详解
4.2.1 QPS(Queries Per Second)
定义:每秒成功完成的请求数量。在 etcd 语境中,通常分为读 QPS(Range)和写 QPS(Put / Txn)。
| 维度 | 说明 | 多集群注意事项 |
|---|---|---|
| 读 QPS | 串行化读取,受限于 CPU 和内存缓存命中率 | 跨集群读取需考虑 follower 的线性一致性读开销(Raft 心跳同步) |
| 写 QPS | 受 Raft 提交延迟和磁盘 fsync 性能约束 | 多集群写入通常通过网关层分发,需额外考虑网络往返(RTT) |
| 混合 QPS | 读写比例对 QPS 上限影响显著(如 9:1 与 1:1 差异可达 3 倍) | 不同集群的读写比例可能不同,需分别压测 |
压测实践:使用
etcdctl check perf 或开源工具 ghz 时,务必指定 --read-ratio 和 --write-ratio。例如:ghz --insecure --proto ./etcdserver.proto --call etcdserverpb.KV.Put \
-d '{"key":"dGVzdA==","value":"dmFsdWU="}' \
--rps 5000 --concurrency 100 --total 100000 \
--read-ratio=0.8 --write-ratio=0.2 \
10.0.0.1:2379
4.2.2 延迟(P99 / P999)
定义:延迟是请求从发出到收到完整响应的时间间隔。P99 表示 99% 的请求延迟低于该值,P999 表示 99.9% 的请求延迟低于该值。
- P50(中位数):反映典型体验,但掩盖尾部延迟问题。
- P99:etcd 生产环境的核心关注指标,通常要求 < 10ms(读)和 < 20ms(写)。
- P999:用于捕捉极端慢请求,通常由 Raft 选举、磁盘抖动或网络重传引发。
多集群陷阱:跨集群请求的 P99 延迟不能简单取平均。不同集群的网络延迟分布可能差异巨大(如跨 AZ 延迟 2ms vs 跨 Region 延迟 50ms)。建议按集群粒度分别统计 P99,再取最大值作为系统级 P99。
4.2.3 吞吐量(Throughput)
定义:单位时间内成功传输的数据量,通常以 MB/s 或请求体大小累计值衡量。在 etcd 中,吞吐量受限于:
- 网络带宽:gRPC 消息体大小(默认 1.5 MiB 限制)
- 磁盘 IOPS:写请求的 WAL 日志落盘速度
- Raft 日志复制:follower 节点接收日志的速率
| 场景 | 典型吞吐量上限 | 瓶颈点 |
|---|---|---|
| 小 value(256B) | 50-100 MB/s | CPU 序列化 / 反序列化 |
| 中 value(4KB) | 200-500 MB/s | 网络带宽 |
| 大 value(1MB) | 10-50 MB/s | 磁盘 IOPS + 网络延迟 |
4.2.4 错误率(Error Rate)
定义:失败请求数占总请求数的百分比。etcd 常见错误类型:
- 超时错误(DeadlineExceeded):gRPC 超时设置过短或服务端过载
- 资源耗尽错误(ResourceExhausted):etcd 的
--max-request-bytes或--max-txn-ops限制 - 内部错误(Internal / Unavailable):Raft 选举、leader 切换、磁盘故障
- 限流错误(TooManyRequests):etcd v3.5+ 内置的请求限流机制
可接受阈值:生产环境压测时,错误率应 < 0.1%(即 99.9% 成功率)。若错误率超过 1%,必须停止压测并排查根因,否则压测数据不可信。
4.2.5 资源利用率(Resource Utilization)
定义:服务端硬件资源的使用比例,是定位瓶颈的直接依据。
| 资源 | 关键指标 | etcd 典型瓶颈阈值 |
|---|---|---|
| CPU | 用户态 + 内核态使用率 | > 80% 时延迟开始劣化 |
| 内存 | 进程 RSS + 缓存命中率 | 内存不足导致频繁 GC 或 OOM |
| 磁盘 IOPS | WAL fsync 延迟(iostat await) | await > 10ms 时写 QPS 受限 |
| 网络带宽 | 入站 / 出站流量 | 带宽利用率 > 70% 时丢包率上升 |
4.3 指标关联模型
五个指标之间存在典型的“跷跷板”关系,理解这些关系有助于快速定位瓶颈:
4.4 多集群场景下的指标聚合策略
当压测涉及多个 etcd 集群时,不能简单地将各集群指标相加或取平均。推荐以下聚合策略:
| 指标 | 聚合方式 | 理由 |
|---|---|---|
| QPS | 各集群 QPS 之和 | 总请求量是线性叠加的 |
| P99 延迟 | 取各集群 P99 的最大值 | 最慢集群决定整体体验 |
| 错误率 | 总错误数 / 总请求数 | 全局视角的可用性度量 |
| 资源利用率 | 按集群分别报告,不聚合 | 各集群硬件配置可能不同,聚合会掩盖短板 |
推荐工具链:使用 Prometheus + Grafana 采集 etcd 内置指标(
etcd_request_duration_seconds、etcd_disk_wal_fsync_duration_seconds),配合压测工具的输出,可以实时绘制 QPS-延迟-资源利用率的三维关联曲线。
4.5 本章小结
- QPS 是压测的“油门”,决定系统负载水平。
- 延迟(P99/P999) 是用户体验的“温度计”,尾部延迟比平均值更重要。
- 吞吐量 是网络和磁盘的“流速计”,大 value 场景下尤其关键。
- 错误率 是压测的“安全阀”,超过阈值应立即停止。
- 资源利用率 是瓶颈定位的“地图”,CPU、磁盘 IOPS、网络带宽是 etcd 三大核心资源。