键分布决定压测真实性
真实业务的访问分布几乎从不均匀:少量键承担大部分请求,长尾键访问稀疏,整体接近幂律。压测若使用完全随机的键,热点效应会被抹平,命中率、淘汰行为与单键放大都被低估。把键分布换成 Zipf 类倾斜模型,或使用高斯键模式模拟固定热点集合,才能压出接近线上的表现;模型参数必须写进报告,否则结果无法复现。
基本信息
| 要解决的问题 | 全随机键分布低估热点放大效应 |
|---|---|
| 替代模型 | Zipf 倾斜分布、高斯分布键模式 |
| 常用工具 | memtier_benchmark 的 key-pattern 选项;redis-benchmark 用 -r 限定键范围 |
| 报告要素 | 键数量、分布模型与参数、值大小、并发与线程数 |
| 配套观测 | latencystats 与 commandstats 观察单命令放大 |
典型使用场景
- 缓存压测:重现热点键被反复读取的真实形态
- 淘汰验证:倾斜分布下观察 maxmemory 与淘汰策略的实际取舍
- 集群压测:热点集中在少数分片,随机分布与真实情况相去甚远
- 容量规划:按倾斜分布推算单分片峰值,而不是看平均值
- 回归对比:模型参数固定后,变更前后的数字才有可比性
倾斜分布压测写法
倾斜分布压测写法
memtier_benchmark --key-pattern=G:G --key-maximum=100000 -n 100000 # 高斯键模式
memtier_benchmark --key-pattern=G:G --key-maximum=100000 -c 20 -t 4 # 并发与线程一并记录
redis-benchmark -t get -n 200000 -c 50 -q -r 5000 # 限定键范围制造热点
redis-cli --latency-history -i 15 # 压测期间看延迟波动
redis-cli INFO commandstats | head -5 # 看单命令耗时与占比分布模型对照
| 模型 | 特点 | 适用判断 |
|---|---|---|
| 全随机 | 每个键被访问概率相同 | 偏乐观,只适合当上限参考 |
| Zipf 倾斜 | 少数键占大部分请求 | 接近缓存类真实业务 |
| 高斯键模式 | 围绕热点集合波动 | 热点集合相对固定的场景 |
| 顺序扫描 | 键按序访问 | 离线批处理类负载 |
倾斜分布下热点键的访问会集中在某个分片:集群压测先按分片看指标,只盯全局平均值会掩盖某个分片已经饱和的事实。
模型参数不写进报告,两次压测的数字就失去可比性——换个随机种子或键范围,差异可能超过调优本身带来的变化。