钉钉 AI 客服:性能压测实战

2 阅读1分钟

钉钉 AI 客服:性能压测实战

压测是上线前的必要步骤。


一、压测工具

工具特点
k6脚本化、云原生
JMeterGUI、功能全
LocustPython、易扩展
wrk轻量、高性能

二、k6 脚本

2.1 基础脚本

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '1m', target: 100 },  // 1 分钟升到 100 并发
    { duration: '3m', target: 100 },  // 持续 3 分钟
    { duration: '1m', target: 0 },    // 1 分钟降到 0
  ],
};

export default function() {
  const res = http.post('http://localhost:3000/api/chat', 
    JSON.stringify({ message: '你好' }),
    { headers: { 'Content-Type': 'application/json' } }
  );
  
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 1s': (r) => r.timings.duration < 1000,
  });
  
  sleep(1);
}

2.2 运行压测

k6 run script.js

三、压测场景

3.1 正常负载

// 100 并发,持续 5 分钟
export const options = {
  vus: 100,
  duration: '5m',
};

3.2 峰值负载

// 模拟峰值
export const options = {
  stages: [
    { duration: '30s', target: 500 },
    { duration: '1m', target: 500 },
    { duration: '30s', target: 0 },
  ],
};

3.3 长时间稳定性

// 1 小时稳定性测试
export const options = {
  vus: 50,
  duration: '1h',
};

四、压测指标

指标目标
响应时间 P50< 500ms
响应时间 P99< 2s
错误率< 1%
QPS> 1000

五、结果分析

# k6 输出示例

     checks.........................: 100%   5000/5000
     data_received..................: 1.5 MB
     data_sent......................: 500 kB
     http_req_duration..............: avg=500ms min=100ms med=400ms max=2s p(90)=800ms p(95)=1s
     http_req_failed................: 0.00%
     http_reqs......................: 5000
     iteration_duration.............: avg=1.5s
     iterations.....................: 5000
     vus............................: 100

六、瓶颈分析

6.1 CPU 瓶颈

top -p $(pgrep node)

6.2 内存瓶颈

free -h

6.3 数据库瓶颈

SHOW PROCESSLIST;

七、优化建议

  • 增加缓存
  • 数据库索引优化
  • 连接池配置
  • 水平扩展

项目地址:GitHub - dingtalk-connector-pro 有问题欢迎 Issue 或评论区交流