Skip to content

eloqkv vs redis flex test #65

Description

@liunyl

test plan

EloqKV vs Redis Flex — 2TB Benchmark 测试方案

状态:定稿(待执行)。本方案为全新两系统对比:EloqKV(最新版)与 Redis Flex
2TB 数据集上各跑一遍,不复用任何历史数据。
关联 issue:#53(EloqKV vs Redis 对比落地页)。

注:测试数据集 = 2TB。Redis Flex 实例的规格上限是 3TB 容量 / 300GB RAM,
这是实例 ceiling,不是灌入量。2TB 数据装进 300GB RAM 实例 = 有效 ~15% RAM
(高于 Redis 10% 最低规则,对 Flex 略宽松——诚实标注)。Flex 价格由 300K
throughput 档决定,与数据集大小无关(2TB / 3TB 同价)。


0. 目标

在同一 workload 下,量化 EloqKV 与 Redis Flex 在 2TB 全随机负载下的吞吐与
深尾延迟,产出可直接写进对比页 / 成本文章的数据与图表。

核心论点(由架构决定,测试围绕它设计):

  • Redis Flex = Speedb(LSM 谱系) → 读放大 + compaction stall → 尾延迟在
    带写负载下抖动。
  • EloqKV = EloqStore(B-tree 变体,单 IOP/读,无 compaction) → 尾延迟随数据量与
    写比例保持平稳。

因此主战场是"带写的随机负载下的深尾延迟 + 延迟随时间的稳定性",吞吐是辅证。


1. 被测系统(均为最新版,全新部署)

EloqKV

  • 版本:最新 release(记录确切版本号)。
  • 持久化:WAL off(cache mode) —— 对齐 EloqStore 隔离 serving 延迟的口径,也与
    Flex 的 flash(非 durability)对等。
  • 节点:GCP z3-highmem-14(14 vCPU / ~112GB RAM / 本地 Titanium SSD,装得下 2TB)。
    成本:$1,294/月(不含 replica;+1 replica = ×2 → ~$2,588/月)。
    ⚠️ RAM 待确认:z3-highmem-14 标配约 112GB,与早前所说 128GB 略有出入(见 §6)。
  • 采集:cache 命中率、每读 IOPS(坐实 single IOP/read)、RAM 实占、节点 $/hr

Redis Flex(已开实例,参数锁定)

  • 形态:Redis Cloud(托管),引擎 Speedb
  • 实例规格上限:3TB 容量 / 300GB RAM(本测试灌 2TB)。
  • 本测试有效 RAM 比例:300GB / 2TB ≈ 15%(> Redis 10% 最低;对 Flex 略宽松)。
  • Max throughput 档:300K ops/sec
  • 价格:$19.64/hour ≈ $14,337/month(按 730h/月;不含 replica;+1 replica = ×2
    → ~$28,674/月
    );由 300K throughput 档决定,与数据集大小无关(2TB / 3TB 同价)。
  • 待确认:此价是否含 HA replica、所在 region(见 §6)。
  • 采集:compaction 活动、flash 读放大、cache 命中率、evictions、RAM 实占。

⚠️ 必须写进结论的 caveat

  • 非同硬件:Flex 托管、机型不可控;EloqKV 自管。框架写
    "同 workload,各自跑在各自基础设施上",不写 "same hardware"。
  • RAM 效率对比(强故事):同样 2TB,EloqKV 仅 ~112GB(~5.6%) 即可服务,
    Flex 用了 300GB(~15%)。结论可写:"服务同一 2TB 数据集,EloqKV 所需内存约为
    Flex 的 1/3;即便给了 Flex ~2.7 倍的内存,……"。
  • 我们给了 Flex 偏宽松的 RAM(15%):Redis 文档推荐 value 的 ≥20% 留 RAM,我们的
    15% 介于 10% 最低与 20% 推荐之间——比"最低成本档"更有利于 Flex,结果不算 cherry-pick。
  • 300K 是计价/SLA 上限,非随机读保证值:Flex 实测饱和吞吐 = min(300K 档,
    flash 随机读实际能力);多半远低于 300K,这本身是结论。

2. 公共 workload 参数

memtier flag
数据集 2TB(~8 亿 KV) --key-minimum=1 --key-maximum=800000000
value 1–4KB 变长 --data-size-range=1024-4096 --random-data
访问 uniform random --key-pattern=R:R
读写比 三档全测 见下
百分位 测到 P99.99 --print-percentiles 50,99,99.9,99.99
key 前缀 kv_ --key-prefix="kv_"

读写比(读:写 → memtier --ratio 即 set:get):

  • 95:5 读主--ratio=1:19
  • 50:50 平衡--ratio=1:1
  • 5:95 写主--ratio=19:1

3. 测试矩阵(三档 mix 每档都跑完整套件)

Tier 1 —— 命根

A. 深尾延迟 @ 饱和点(300s),三档 mix

  • 测到 P99.99(LSM 痛在尾部,P99 不够)。
  • 重点观察 50:50 / 5:95(写越多 → compaction 越频 → 前台读尾越抖),但三档都出数。

B. 延迟随时间序列(长时 sustained run, 30–60min),三档 mix —— centerpiece 图

  • 300s 聚合分位会低估 compaction stall;长时跑才跑满多个合并周期。
  • 产出延迟-时间曲线:预期 Flex 周期性锯齿尖峰、EloqKV 平线。聚合数字会被质疑,
    这张图不会。时间序列采集方法见 §5。

Tier 2 —— 强支撑

C. 最大可持续吞吐(各 mix):A 的副产物,单独成表;注意对照 Flex 的 300K 档上限。

D. 成本归一化(输入已知):见 §7 成本表。Flex $14,337/月、EloqKV $1,294/月
(均不含 replica;HA 各 ×2)→ Flex ≈ 11× EloqKV。QPS-per-dollar = 实测 max QPS ÷ 月价
(待实测吞吐填入)。

E. 倾斜对照跑(Gaussian 热点),三档 mix —— 保中立,强烈建议

  • 纯随机是 Flex 最坏场景;只发这个会被指"挑工况"。
  • 加一组热点集可进 RAM 的倾斜负载,展示 Flex 在主场(冷热分离明确)其实没问题
    反而提升可信度,并给 issue Build EloqKV vs Redis comparison landing page #53 要求的 "when to choose Redis Flex" 段填实料。
  • --key-pattern=G:G --key-stddev=<...> --key-median=<...>(参数见 §6 待确认)。

运行量

  • A:2 系统 × 3 mix = 6 runs(各 300s)
  • B:2 × 3 = 6 runs(各 30–60min)
  • E:2 × 3 = 6 runs(各 300s)
  • 合计 ~18 个测量 run + 并发扫描 + 各系统一次 2TB 灌数据(耗时大头) + 每块前 warm-up。

4. 执行步骤

Step 0 — 冒烟/校准:小数据(如 20GB)各跑一次,确认 rig、监控、指标采集链路正常,
再上 2TB。

Step 1 — 部署:按 §1 起两套系统;记录版本、节点规格、Flex 实例规格 + 价格。

Step 2 — 灌 2TB(每系统一次)

# -t16 -c4 = 64 conn → n = 8e8 / 64 = 1.25e7
memtier_benchmark -s $ip -p $port -t 16 -c 4 --ratio=1:0 --key-pattern=S:S \
  --key-prefix="kv_" --key-minimum=1 --key-maximum=800000000 \
  --random-data --data-size-range=1024-4096 -n 12500000 --hide-histogram

Step 3 — warm-up(每个测量块前):随机只读 10min 进稳态。

memtier_benchmark -s $ip -p $port -t 16 -c 16 --ratio=0:1 --key-pattern=R:R \
  --key-prefix="kv_" --key-minimum=1 --key-maximum=800000000 \
  --data-size-range=1024-4096 --test-time=600 --hide-histogram

Step 4 — A 饱和点(300s × 3 mix × 2 系统)

# 先 60s 短跑扫并发 C ∈ {8,16,32,64} 找吞吐拐点,再在拐点跑 300s 正式数:
memtier_benchmark -s $ip -p $port -t 16 -c $C_knee --distinct-client-seed \
  --ratio=$RATIO --key-pattern=R:R --key-prefix="kv_" \
  --key-minimum=1 --key-maximum=800000000 --random-data \
  --data-size-range=1024-4096 --test-time=300 \
  --print-percentiles 50,99,99.9,99.99

Step 5 — B 时间序列(30–60min × 3 mix × 2 系统):在拐点并发上加压
(--test-time=3600),同时按 §5 采集逐窗口延迟。

Step 6 — E 倾斜对照:同 Step 4,key-pattern 换 Gaussian。

Step 7 — 汇总:出表 + 图(§7)。


5. 指标采集(重点:采"为什么",否则结论只是 correlation)

每个 run 记录:

  • memtier:最大可持续吞吐、P50/P99/P99.9/P99.99、actual throughput。
  • Flex 侧(Redis Cloud 面板 / INFO):compaction 活动、flash 读放大、
    cache 命中率、evictions、RAM 实占。← 用来解释尾延迟尖峰来源。
  • EloqKV 侧:cache 命中率、每读 IOPS、RAM 实占。
  • 成本:两边实例 $/hr(Flex 已知 $19.64/hr;EloqKV 节点待记)。

时间序列(B 跑)采集方法 —— memtier 默认只在结束时输出聚合分位,需额外手段:

  1. 旁路 latency 探针(推荐):长时主压测运行期间,另起一个低速率客户端
    (小脚本 / 第二个 memtier 限速到几百 QPS),对每个请求打时间戳 + 延迟并落日志,
    后期画延迟-时间曲线 → 干净地看出 compaction 尖峰。
  2. 同时记录平台侧延迟面板(Redis Cloud latency graph;EloqKV 自带指标)按秒采样。
  3. 可选:memtier --hdr-file-prefix 导出 HDR 直方图分段对比。

6. 待确认 / verify(动工前)

  • EloqKV 节点成本 = $1,294/月(z3-highmem-14,不含 replica;HA ×2)。
  • Flex $19.64/hr 不含 replica;HA ×2 → ~$28,674/月。
  • EloqKV 确切版本号。
  • 确认 EloqKV 节点 RAM:z3-highmem-14 标配 ~112GB,与早前"128GB"是否一致?
  • Flex 实例 region;实际给的 shard 数 / vCPU。
  • memtier 版本(确认 --print-percentiles--key-pattern=G:G
    --data-size-range 等 flag 行为)。
  • 倾斜对照(E)的 Gaussian 参数:--key-stddev / --key-median 取值
    (建议热点集 ≈ RAM 容量,体现 Flex 主场)。
  • 2TB key 总数按实际 value 分布微调(此处按 ~2.5KB 均值估 ~8 亿)。

7. 产出物(直接进对比页 / 成本文章)

表 1 — 2TB 饱和点(三档 × 两系统)

读写比 系统 Max QPS P99 (ms) P99.9 P99.99
95:5 EloqKV
95:5 Redis Flex
50:50 EloqKV
50:50 Redis Flex
5:95 EloqKV
5:95 Redis Flex
  • 图 A:P99.99 by mix(柱状,两系统并列)。

  • 图 B(centerpiece):延迟-时间曲线,每 mix 一张,Flex 锯齿 vs EloqKV 平线。

  • 图 C:Max throughput by mix(标注 Flex 300K 档上限)。

  • 成本表(输入已知,QPS 待实测):

    EloqKV (z3-highmem-14) Redis Flex (3TB/300GB/300K)
    无 replica $1,294/月 $14,337/月
    +1 replica(HA,×2) $2,588/月 $28,674/月
    成本倍数 ~11×
    QPS-per-dollar 实测 max ÷ 月价 实测 max ÷ 月价
  • 倾斜对照:random vs Gaussian 的 P99.99 对比(展示 Flex 主场表现 + EloqKV 全程平稳)。


附录 A — 历史 EloqStore 数据(EloqKV 2TB 为本测直接锚点)

来自 blog/2026-01-08-eloqkv-on-eloqstore/index.md 注释,read-dominant(GET)scaling:

Dataset EloqKV QPS EloqKV P99.99 (ms) DRAM Redis QPS DRAM Redis P99.99
20GB 507,012 1.551 161,910 1.431
100GB 298,712 1.431 155,415 1.511
200GB 281,433 2.031 — (超 RAM)
2TB 262,198 2.607 — (超 RAM)

→ 本测数据集正好是 2TB。历史锚点 262K 是在 z3-16(16 vCPU/128GB) 上测的;本测节点是
z3-highmem-14(14 vCPU/~112GB),核数与内存略少,新测读主预计 ~230–260K /
P99.99 ~2.6–3ms
—— 略低于 262K 属正常,显著偏离才说明环境有问题。

注释里另有一段三系统(Redis/EloqKV/Kvrocks)SET/GET 延迟表(95:5/50:50/5:95),
只有延迟、无吞吐,且未标数据集大小与百分位,与上表数值对不上(属另一组实验),
不可直接复用


变更记录

  • 早期设想(已废弃):复用历史 EloqKV 数据、只测 Flex;1TB;含 100K QPS 限速尾延迟测试。
  • 现行:数据集 2TB,两系统全新最新版,仅饱和点,三档 mix 完整,深尾到 P99.99,
    纯随机为主 + Gaussian 对照。
    EloqKV 节点 = GCP z3-highmem-14 / ~112GB / $1,294 月
    (2TB→5.6% RAM);Redis Flex 实例上限 3TB/300GB RAM(2TB→15%)/300K 档/$19.64hr
    两者均不含 replica(HA 各 ×2)。成本:Flex ≈ 11× EloqKV。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions