【GoReplay】 基于线上真实请求的流量重放压测

背景

  为了评估后台服务的各个接口真实的抗住多少并发,往往在线上用户导量或者大版本发布前,会对核心服务,例如用户服务,社区频道服务,做一轮或多轮压测,根据压测结果,检查各个核心服务的可能出现的漏洞和瓶颈,同时根据压测结果调整线上的机器资源

  这里主要记录我们团队使用GoReplay做流量重放的经验和步骤

  备注:我们项目后台服务使用的是K8s容器编排

安装

  进入到生产环境容器内操作下载gor或提现准备好gor工具,这里是放在usr/bin目录下

 #cd /usr/bin
 #chmod +x gor 修改gor权限为可执行

  gor使用方法: gor --help 或  https://www.cnblogs.com/sunsky303/p/9072871.html

抓包

  抓包保存到文件夹var目录下

#cd /var
#gor
--input-raw :${PORT} --output-file ${APP_NAME}.gor -output-file-size-limit 1gb --output-file-queue-limit 0

  APP_NAME:自己输出的流量文件名称

  PORT:JAVA服务端口

      说明: 使用--output-file-size-limit和--output-file-queue-limit选项设置块限制。块队列的长度和每个块的大小。默认值分别是256和32mb。可以使用后缀“k”(KB),“m”(MB)和“g”(GB)output-file-size-limit。如果你只想要大小限制,你可以设置--output-file-queue-limit为0,反之亦然 

  流量可直接转发 (不保存抓包文件)----不推荐

        gor --input-raw :${PORT}  --output-http "http://目标IP:${PORT}"   

  注意:这里可以抓包时间长一点,根据情况尽量多抓线上的流量,这样在重放时,放大倍数的效果更明显

流量重放

  将文件下载到压测环境,放大倍数进行流量重放

        gor --input-file "${APP_NAME}_0.gor|200%"   --output-http "http://目标IP:${PORT}" --input-file-loop

  说明:   |200%  将流量按照 200%放大

       --output-http "http://IP:端口”  压测环境容器ip和端口

观察结果

  Prometheus实时监控,监控指标涉及到的指标:内存,CPU,GC,线程数

注意事项

  线上流量重放到压测环境,部分请求涉及到TOKEN校验的问题,需要特殊处理

posted @ 2022-02-18 00:11  听风是雨  阅读(637)  评论(0编辑  收藏  举报
/* 看板娘 */