WuKongIM Docs

wkbench

在受控集群上执行黑盒验证、真实负载、容量搜索和回归门槛。

编辑此页报告文档问题

wkbench 是 WuKongIM 的黑盒基准驱动器。它通过公开 HTTP、Benchmark HTTP 和 WKProto 网关与运行中的集群交互,不导入服务端内部包,也不绕过集群语义。单节点目标仍然是单节点集群。

不要把生产集群当作压测目标

wkbench 会创建真实用户、频道、连接和消息,并可能把目标推入背压或不可用状态。只能使用隔离、可重建、已授权的压测集群,并为速率、并发、持续时间、磁盘和停止条件设置硬上限。

命令范围

命令用途
validate静态验证 target、workers、scenario YAML 和确定性计划,不做网络检查
doctor检查目标健康、Benchmark API、worker 控制 API 和网关可达性
worker启动持有 WKProto 客户端并执行分片负载的 worker 控制进程
run执行 validate、preflight、分配、prepare、connect、warmup、run、cooldown 和 report
dev-sim维持用户在线并持续产生低速个人/群消息的开发模拟器
capacity send搜索已有集群的最大稳定接入发送 QPS
capacity hot-channel对一个固定群频道搜索热点写入容量
capacity activate-channels激活并保持固定数量的真实 Channel runtime
capacity message-event/message/event 执行固定形状压力并生成报告
metrics classify比较前后 Prometheus 快照并给出低基数归因提示
report预留的独立报告命令,当前尚未实现

目标前提

完整工作流通常需要目标开放:

  • /healthz/readyz
  • /bench/v1/capabilities/bench/v1/capacity-target/bench/v1/snapshot
  • Benchmark 用户、频道和订阅者准备接口;
  • 从运行机可访问的 WKProto 网关发布地址。

在受控环境显式启用 Benchmark API:

[bench]
api_enable = true

/bench/v1/* 不是公开产品 API,不得暴露到公共网络。capacity message-event 是例外:它使用产品 /channel/message/send/message/event/metrics,不需要 Benchmark API,但仍会写入生成的频道和消息,因此也必须使用受控目标。

最小验证流程

启动独立 worker:

WK_BENCH_WORKER_TOKEN=worker-secret \
  go run ./cmd/wkbench worker \
  --listen 127.0.0.1:19090 \
  --work-dir ./tmp/wkbench-worker-a

先静态验证,再做网络预检,最后才执行负载:

go run ./cmd/wkbench validate \
  --target ./target.yaml \
  --workers ./workers.yaml \
  --scenario ./scenario.yaml

go run ./cmd/wkbench doctor \
  --target ./target.yaml \
  --workers ./workers.yaml \
  --scenario ./scenario.yaml

go run ./cmd/wkbench run \
  --target ./target.yaml \
  --workers ./workers.yaml \
  --scenario ./scenario.yaml

validate 成功只说明静态文件和计划有效;doctor 成功只说明当时的网络与能力预检通过。两者都不是容量结论。

设计代表性负载

  • 使用接近真实的在线用户数、频道基数、频道类型、群成员数、消息大小、收发确认与重连行为;
  • 将连接爬升、预热、测量和冷却分开,预热计数不能混入测量窗口;
  • 分开测试高频道基数、单热点频道、消息事件和连接压力,不要用一个 QPS 数字概括所有瓶颈;
  • 为 100,000 成员群组、高消息率、许多频道和大量在线用户显式评估 CPU、内存、分配、锁竞争、有界队列、背压和扇出;
  • 固定随机种子或生成规则,并保留场景 YAML、工具/服务版本、硬件、拓扑和配置。

容量搜索

wkbench capacity send \
  --api http://127.0.0.1:5001 \
  --profile mixed \
  --start-qps 100 \
  --max-qps 5000 \
  --stable-p99 200ms \
  --duration 30s \
  --group-members 10

capacity send 发现网关、启动临时本地 worker,并在给定门槛内搜索稳定接入速率;它不会启动/停止集群、构建镜像或清理数据。热点频道、Channel runtime 基数和消息事件需要各自的 capacity 子命令。

“最大稳定”只对本次版本、硬件、拓扑、场景和门槛成立。实际规划必须低于首次失败点并保留资源余量;低于提供 QPS 的实际 QPS、尾延迟、错误率、队列、磁盘和恢复时间都属于结果,不能只保留最高数字。

结果与停止条件

报告至少应保留:

  • Git 修订、二进制摘要、配置与集群拓扑;
  • 目标/worker/scenario 文件和完整命令;
  • prepare、connect、warmup、run、cooldown 各阶段时间与状态;
  • offered/actual QPS、吞吐、p50/p95/p99、操作错误分类与超时;
  • 每节点 CPU、内存、Goroutine、FD、网络、磁盘 IO、队列和副本/Leader 偏斜;
  • 运行前后 /readyz、积压恢复时间、生成数据位置和清理结果。

任一硬门槛、目标就绪、磁盘余量、错误率、尾延迟或 worker 状态失败时停止,不要为了得到更高数字提高上限。诊断过程见诊断能力

结束清理

停止 worker 和模拟器,撤销临时凭据,关闭 Benchmark API,归档报告后清理生成数据,并验证集群回到空闲基线。无法确认 worker 已停止或目标恢复时,把测试视为未完成事件,而不是成功的基准结果。

本页内容