万级并发分布式全链路性能压测工具 lmc-autotest

背景

创业型公司或创新型项目往往团队资源有限,人员能力水平有限,难以投入专业自动化压测人员;

同时部分业务(tob/toc 场景)长期有中小型活动场景带来小规模流量并发,需要产研能长期保障并及时感知和解决网站性能和稳定性问题。

目标

1. 开发人员 5 分钟上手压测,30 分钟熟练。

2. 常规性能压测自动化,常态化;零开发,零测试投入;1 分钟自动化生成报告,快速定位问题!

3. 针对场景 (运营活动) 性能压测自动化, 整体压测效能提升 10 倍。减少 1 名专业压测人员投入!

方案

按照 五个维度打造研发管理体系思考和规划,按照自身场景,考虑自研全链路压测工具;

本身工具开发难度不高,项目速度快,投入周期短;同时也长期解决问题,灵活适配,能有效达成目标;

lmc-autotest BSF 全链路压测工具开源地址:

https://gitee.com/chejiangyi/lmc-autotest

基于 BSF 基础框架构建全链路压测框架,从框架层面进行 流量录制 (也可以从浏览器自定义录制), 从工具层面进行流量回放,进行性能压测,自动输出压测报告,自动进行全链路功能验收,从而提升测试效能,指导网站性能优化。

全链路压测架构设计

1. 业务层引入 bsf core 和 autotest jar 包,该基础框架可以对流量进行采样录制。

2. 采样录制的流量批量同步到 mysql 存储引擎。

3. 全链路压测管理端,进行任务编写并启动压测任务。

4. 压测任务分发到压测到节点集群,并进行样本流量批量回放压测。

5. 超过时间或者指定条件后,自动生成压测报告。


单个节点建议最大 2000-3000 并发线程,可以开多个压测节点(可部署 10-20 个节点,随时扩缩容), 支持上万级高并发大规模分布式性能自动化压测 。

全链路压测任务执行生命周期

任务分别由样本筛选脚本,错误过滤样本脚本,压测请求前脚本,压测请求后脚本,任务终止脚本组成。

压测节点收到任务后按照任务执行生命周期,不间断进行压测,直到命中 “任务终止脚本规则” 后,正常退出。

全链路压测管理端功能

1. 任务管理:可以对定制的压测任务进行编写,管理。可以实现不同场景和不同姿势的压测进行定制。 编写任务帮助文档

2. 定时计划:可以对所有任务进行定时计划编写,管理。实现任务定时自动化调度。 编写定时计划帮助文档

3. 节点状态:可以管理所有压测节点的心跳和状态及当前的性能情况。

4. 压测报告:可以管理所有压测任务自动生成的报告。

5. 执行日志:所有压测任务和定时计划执行的执行日志,在压测执行异常的时候,可以查看执行日志获悉。

6. 采样查询:自动化 bsf 框架录制的流量或者用户自动导入的流量,可以通过此菜单进行查询和模拟调用验证。

7. 公共方法库:通过定义公共的方法库,简化任务和定时计划的编写。 公共方法库帮助文档

8. 用户管理:可以管理平台用户和 token 授权。

9. 帮助文档:到 gitee 源码管理文档和一些最佳实践文档。

快速编译

注意 bsf-core.jar 和 bsf-autotest.jar 包,可能出现包引用错误,请至 gitee release 中下载相应 jar 包。

cd lmc-autotest

mvn install

快速安装

一般在 mysql8.0,jdk8 环境下,三步执行即可安装。同样也可以支持云原生方式安装,如 阿里云安装最佳实践

sql 初始化脚本

管理端 provider 包(65M 左右大小)

节点端 task 包(20M 左右大小)

#web管理端

nohup java -jar \

-Dspring.datasource.druid.url=jdbc:mysql: //127.0.0.1:3306/autotest?useSSL=false \

-Dspring.datasource.druid.username={数据库} \

-Dspring.datasource.druid.password={数据库} \

lmc-autotest-provider.jar > provider.log  2 >& 1   &

#压测节点

nohup java -jar \

-Dspring.datasource.druid.url=jdbc:mysql: //127.0.0.1:3306/autotest?useSSL=false \

-Dspring.datasource.druid.username={数据库} \

-Dspring.datasource.druid.password={数据库} \

lmc-autotest-task.jar > task.log  2 >& 1   &

支持多语言使用和第三方介入

OPEN API

java 完整版自动录制样本流量 sdk 集成

C# 版本流量录制 simple sdk

java 版本流量录制 simple sdk

完善的实践文档

小白快速上手压测

小白快速流量回放压测

自动化 QPS 核心和主要接口 jenkins 触发性能压测

自动化 QPS 核心和主要接口性能 url 压测

自动化 QPS 不同级别接口压测

自动化 QPS 不同开发人员接口压测

自动化 QPS 全链路接口压测

自动化 QPS 秒杀 / 活动接口压测 - 待实践

自动化 TPS 秒杀 / 活动场景压测 - 待实践

k8s 滚动升级验证

功能界面展示




by   车江毅

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容