SuperAPI AI 工具集

scylladb-benchmark

数据与分析

查看项目

更新于 10-28 00:00

技能介绍

用途

本技能用于对 AWS 上的 ScyllaDB Cloud 集群执行可重复的负载测试:创建私有 ScyllaDB Cloud 集群,并在对等 VPC 中创建 AWS loader 虚拟机,以固定速率运行 scylladb/cassandra-stress,最后写出另一名工程师可以复现的报告。

最重要的规则:用 -rate threads=T fixed=N/s 设定固定速率。没有固定速率的运行会掩盖排队延迟(On Coordinated Omission)。

脚本路径相对于技能目录。运行参考中的命令前,先把 SKILL_DIR 设为技能目录。

何时使用

  • 用户要求对 ScyllaDB Cloud 做基准测试或负载测试,可带或不带其应用的查询
  • 用户要求某速率或读写比下的 p50、p90 或 p99 延迟
  • 用户要求延迟 SLA 下的最大速率,或询问某集群规模是否足够
  • 用户想将 ScyllaDB 与其他数据库对比:仅给建议(comparison),不要创建或运行其他数据库

相邻主题请改用同级技能:应用本身的驱动设置与连接代码用 scylladb-cloud-setup;构建工作负载 profile 前的 schema 审查用 scylladb-data-modeling;通过 Cloud MCP 服务器做集群管理用 scylladb-cloud-mcp。

默认配方(快速路径)

用户未给出其他形态或工作负载时使用。使用最新 ScyllaDB 版本与 scylladb/cassandra-stress:4.0.0,区域 us-east-1。预期结果来自 ScyllaDB 2026.3.3。

  • 集群:X Cloud,3 × i4i.2xlarge(Cloud API 实例列表中 freeTier: true 的最大 AWS 类型),缩放固定
  • Loader:3 × c7i.8xlarge,每个集群 AZ ID 各一个,rack=<AZ ID>
  • 数据:20,000,000 行默认 standard1 行,分摊到各 loader
  • 工作负载:mixed ratio(write=1,read=1),cl=LOCAL_QUORUM,-pop dist=uniform(1..20000000)
  • 目标:总计 220,000 ops/s,每个 loader 上 -rate threads=400 fixed=73333/s
  • 计时:每个 loader 用 300 线程填充,1 分钟预热,1 次 3 分钟测量运行。从集群创建请求到首个结果约 16 分钟
  • SLA:p99 ≤ 10 ms
  • 预期:220,000 ops/s,p99 约 5 ms,0 错误,loader CPU 低于 20%

选择测试

  • “Benchmark ScyllaDB”“load test”,无细节:默认配方
  • “用这个应用的查询做负载测试”:基于应用构建 user profile=(workload-profile),在默认集群与 loader 上运行
  • “能否在 p99 < X ms 下达到 N ops/s?”:以目标 N 走默认流程
  • 其他形态下的最大吞吐:步进搜索(cassandra-stress-commands)
  • “这个集群规模够吗?”:按生产速率与比例,每次运行 30 分钟或更长
  • “将 ScyllaDB 与……对比”:仅给建议(comparison),ScyllaDB 一侧可提供默认流程

先问的问题

在一条消息里全部问完,每个问题给出默认值:

  1. 工作负载:默认配方,还是本仓库中应用的查询?默认:配方。若用应用,询问读写比与生产数据规模。
  2. SLA。默认:p99 ≤ 10 ms(i8g 基准的 SLA)。
  3. AWS 区域与 AWS CLI profile。默认:us-east-1。
  4. 是否复用已有私有连接的集群?默认:否,新建。
  5. 是否再跑一次目标以检查结果可重复?默认:否,只跑一次。
  6. 是否更改配方其他项:集群类型或规模、loader、目标速率或公网路径?默认:不变。

用户可更改每个默认值。更改后的集群或 loader 形态没有配方,需运行步进搜索。

核心规则

  • 绝不在生产集群或生产数据上运行基准测试。
  • 先展示成本:集群与 loader 的每小时成本。默认配方给出 Timing 行的时间,不要加缓冲。创建任何资源前先获得批准。
  • 使用私有连接:以 "broadcastType": "PRIVATE" 创建集群,通过 VPC 对等连接 loader。仅在用户要求时使用公网 IP 允许列表,并说明其安全性较低且增加不具代表性的网络路径,报告中标注“public network path”。
  • 每个集群 AZ ID 放一个 loader,并设 rack=<AZ ID>。机架感知客户端向本区协调节点发请求(网络成本)。
  • 绝不在用户笔记本或集群节点上运行 loader(benchmark tips)。
  • 使用 scylladb/cassandra-stress:4.0.0,它自带分片感知的 ScyllaDB Java 驱动 3.11.5.20,使用 token 感知路由与预处理语句。
  • 自行创建 keyspace,使用 NetworkTopologyStrategy、DC 名与 RF 3,并设 cl=LOCAL_QUORUM(production readiness)。cassandra-stress 默认是 RF 1 与 LOCAL_ONE(benchmark tips)。
  • 保持 loader CPU 在 50% 或以下(benchmarking tutorial)。
  • 每个速率测量一次。仅在用户要求可重复性检查时测第二次。合并各 loader 的百分位数,不要取平均。
  • 没有 ~/results 中 .out、.hdr 或 .vmstat 文件的证据,不报告任何数字。
  • 绝不打印、记录或提交 CQL 密码或 API token。
  • 为每个 AWS 资源打标签 scylladb-benchmark=<run-id>。

工作流程

  1. 提问并在 SCYLLADB_CLOUD_API_TOKEN 中获取 API token。不要在聊天中索要 token(cluster-and-peering)。记录开始时间。
  2. 展示计划与成本,获得批准(cluster-and-peering、loader-vm-aws)。
  3. 同时创建集群与 loader。以固定 AZ ID 发送集群请求,然后在相同 AZ ID 中创建 loader 网络与虚拟机(cluster-and-peering、loader-vm-aws)。
  4. 集群就绪后对等 VPC 并准备 loader。source loader-helpers.sh(cluster-and-peering、loader-vm-aws)。
  5. 复制脚本、创建 keyspace,并从所有 loader 填充(cassandra-stress-commands)。
  6. 预热,然后按目标运行一次。告知用户速率与 p99。若用户要求可重复性检查,再跑一次目标。若某次运行未达 SLA,重复一次;若重复仍失败,告知用户,并从目标向下运行步进搜索(cassandra-stress-commands、results-and-report)。
  7. 在用户项目中写 scylladb-benchmark-report.md,含固定结果表(report-template)。
  8. 询问用户是否可以删除基础设施:loader、对等连接、VPC 与网络资源、密钥对与集群。仅在用户同意后删除。若用户拒绝,打印确切的清理命令(loader-vm-aws、cluster-and-peering)。两种情况都提醒用户在清理后撤销 API token。

快速参考

  • cluster-and-peering:API token、Cloud API 调用获取 ID、免费试用类型、价格、固定 AZ ID 的私有 X Cloud 集群、凭据、VPC 对等、Standard 与公网选项、复用与删除。调用 Cloud API 前或 loader 无法访问 9042 端口时查阅。
  • loader-vm-aws:带标签 loader VPC 与每个 AZ ID 一个 loader 的 AWS CLI 命令、loader 价格与清理。创建或删除任何 AWS 资源前查阅。
  • cassandra-stress-commands:脚本复制、keyspace、拆分填充、目标运行、间隔日志、步进搜索与 TLS。运行 cassandra-stress 前,或运行失败/无结果时查阅。
  • workload-profile:如何把应用 schema 与查询转成 cassandra-stress YAML user profile,含示例。用户想要其应用工作负载时查阅。
  • results-and-report:线程数、数据集大小、合并的 p50/p90/p99、结果行与有效性规则。规划负载与读取运行时查阅。
  • report-template:Markdown 报告文件。写报告时查阅。
  • comparison:ScyllaDB 与其他数据库公平基准测试的规则。用户想对比时查阅。

脚本

  • loader-helpers.sh:每个命令在所有 loader 上运行一次。collect 在第一个 loader 上合并一次运行的文件并打印结果行。准备 loader 时在开发机上 source 它。
  • cs-run.sh:在 loader 的 Docker 中运行一条 cassandra-stress 命令,把输出、HDR 日志与 loader CPU 保存到 ~/results。填充时运行。
  • cs-step.sh:按总速率运行一个步进,分摊到各 loader。预热或测量速率时运行。
  • cs-latency.sh:从所有 loader 的 HDR 日志打印合并的 p50、p90、p99 与 max。需要用户 profile 某查询的延迟时运行。
  • cs-row.sh:打印带标志的结果表一行。collect 会运行它。再次打印某次运行的行时直接运行。

限制

资料未提供该技能的具体安装命令、支持的 ScyllaDB 版本范围、除默认配方外的价格明细、其他云平台支持情况,以及脚本的完整参数说明。