Files
tiku-backend.net/tools/performance

TIKU API 并发测试

这套测试用固定到达率验证单个 Tiku.Api 实例,并把 PostgreSQL 与 Redis 放进真实请求链路。它不是单测,也不会使用内存数据库。

场景

模式 请求 依赖含义
hot GET /api/catalog/regions 租户解析 + 热输出缓存,代表高缓存命中读流量
cold 同一目录接口,每次附加唯一查询参数 绕过输出缓存复用,持续执行租户解析与 PostgreSQL 目录查询
ready GET /api/health/ready 每次检查 PostgreSQL、Redis 以及消息/outbox 就绪状态
mixed 70% hot、20% cold、10% ready 默认的读多型业务流量

setup() 会强制校验 readiness 响应中的 database=trueredis.configured=trueredis.ready=true,所以 Redis 没接上时测试会直接失败,不会给出误导性的容量数字。

一键本机测试

前置条件:本机 PostgreSQL 已有迁移和种子数据Docker 中存在名为 tiku-redis 的 Redis 容器。脚本会构建并启动一个独立的 Release API默认端口 5091关闭应用限流以测应用与依赖本身并使用本机 k6 或 grafana/k6 Docker 镜像发压。

tools/performance/run-local.sh

常用参数:

TIKU_MODE=mixed TIKU_RATE=250 TIKU_DURATION=30s tools/performance/run-local.sh
TIKU_MODE=cold  TIKU_RATE=100 TIKU_DURATION=60s tools/performance/run-local.sh
TIKU_MODE=ready TIKU_RATE=100 TIKU_DURATION=30s tools/performance/run-local.sh

可配置变量:

  • TIKU_MODEmixed(默认)、hotcoldready
  • TIKU_RATE:目标每秒迭代数,默认 100每次迭代恰好发一个请求。
  • TIKU_DURATION:持续时间,默认 30 秒。
  • TIKU_TENANT_CODE:有效租户 slug默认 demo-crm-school
  • TIKU_API_PORT:独立 API 端口,默认 5091。
  • TIKU_REDIS_CONTAINERRedis 容器名,默认 tiku-redis
  • TIKU_DATABASE_NAME:本机 PostgreSQL 数据库名,默认 tiku
  • DATABASE_URL:需要覆盖 API 默认开发连接串时设置;不要写入仓库。

结果写入忽略提交的 artifacts/performance/<时间>-<模式>-<速率>/,包含 k6 JSON 汇总、API 日志、主机信息、PostgreSQL 与 Redis 测试前后快照。k6 阈值是错误率低于 1%、p95 低于 500 ms、p99 低于 1 s并且不允许掉迭代。

解释结果

从较低 TIKU_RATE 逐步翻倍。当首次出现 dropped_iterations > 0、错误率达到 1%,或延迟阈值失败时,上一档可视为当前机器、当前数据集、单实例配置下的保守持续吞吐。生产容量还要在接近生产的独立压测机、数据量、网络、连接池和观测配置下复测,不能直接按本机核数线性外推。

请勿把访问令牌、数据库密码或 Redis 密码写进此目录或结果文件。