JMeter自身带有Master-Slave压测框架,对于并发量不是很高的压力情况下(比如tps低于5000),该方案是可行的,并且使用起来非常方便,只要在配置文件或者命令行工具的参数做一些补充,即可以实现分布式压测,具体请参见JMeter官网操作步骤或者UncleYong的文章

但JMeter的Master-Slave有诸多的缺陷:

1.Master机器的瓶颈,JMeter通过RMI的方式来实现Master-Slave的通信,所有的信息最终都会汇总到主机上,一旦slave机器数量增多,并且slave上的并发数上去,Master的压力就会很大

2.无法模拟不同区域内的压测,这个在如今的互联网下的压测有非常大的缺陷,现在日活高的App,基本都是跨地区跨机房部署,所以用户终端到机房这段链路也很重要,但现在的JMeter框架分布式框架实现不了这样的压测

3.带宽的问题,由于我们是局域网环境,往往出口就是一个,这种情况下tps很高并且输入输出不小的情况下,出口的带宽也可能会成为比较大的瓶颈

4.JMeter官方推荐使用非GUI的方式来实现压测,但这样就看不到被压测对象状态,有可能系统以及压垮了还在继续压,没法做到实时监控

所以基于这些问题,我们希望能够实现真正意义上分布式压测工具或者平台,具备的主要功能要求如下:

1.真正的基于互联网的分布式压测,满足市面上绝大部分App的压测要求(日活大几百万)

2.可以实时监控,查询压测状态(压测数据包括tps,error%,响应时间,以及压测机本身)

3.可以快速终止压测,通过#2,一旦发现压测异常如压测达到阈值,那么就可以手动(一键式)或者自动终止压测,避免压垮压测对象

另外还有一些细化的需求,所以整体需求功能如下

技术突破:

JMeter从3.2版本起,新增了InfluxDB的监听器,该监听器支持使用InfluxDB HTTP API并通过异步HTTP调用将度量标准直接推送到数据库,而无需任何额外的数据库配置,再通过influxDB和Grafana的集成,就能实时监控压测状态,核心模块调用逻辑如下

基于上面核心模块,再来实现整个业务平台,这里有两种实现方式,一个是通过Jenkins pipeline来实现压测任务调度及执行,还有一个是通过自建平台(如spring boot框架)来实现。

基于Jenkins pipeline来实现分布式压测如下:

通过pipeline上的Groovy脚本来撰写脚本并且集成类似于ftp plugin,jemeter plugin等插件来串联压测脚本的上传(目标压测机),执行,生成报告等,并通过在JMeter脚本中集成InfluxDB,influxDB集成Grafana,实现实时监控压测状态,并且一旦压测异常,也可以通过pipeline脚本来实现一键式终止压测。这种方式实现起来比较方便,能达到压测效果。但对于功能的扩展,以及压测平台包括插件出bug后的定位等等都不太理想。毕竟脚本语言的组织以及工具的支持不像Java或者Python等有那么多的框架/工具可以支持,需要写很多功能,并且一旦功能多起来,结构就会显得异常臃肿,所以我这边抛弃了这种实现方式,但注意,这种方式是可以实现分布式压测的,并且也能比较快速的能够把分布式压测搭建起来。

基于Spring boot框架来实现压测平台的整合,这种方式是是比较值得推荐的,整体实现方式难度适中,且功能容易扩展。这里我重点说一下我的实现方式

整体框架如下:

整体思路就是:

1. 安装配置好influxDB,并创建相关等数据库,可以参考uncleyong的文章

2. 安装配置好Grafana,并下载JMeter 模板,我比较喜欢这个:https://grafana.com/grafana/dashboards/5496,但上面有不少模板可以选择,可以使用jmeter去search

3. 在JMeter脚本中打通InfluxDB,通过添加InfluxDB等监听器来实现脚本

4. 通过Spring Boot来串联整个压测平台,把压测机信息、压测脚本管理、压测执行、压测终止等接口暴露给前端

5. 通过Redis来缓存热点数据,比如压测机信息,还有压测执行结果等,mysql来做整体数据等存储

6. Spring Boot和压测机之间等打通,推荐使用JSch - Java Secure Channel来实现

7. 分布式执行中会涉及到异步和同步等问题,比如分配到10台机器去执行,这个需要异步下达指令,但需要等所有机器执行完后才汇总压测结果,可以通过@Async + CountDownLatch来实现

实现理论上无tps上限的分布式压测(基于Jmeter+InfluxDB+Grafana+Spring Boot)的更多相关文章

  1. JMeter分布式压测实战(2020年清明假期学习笔记)

    一.常用压力测试工具对比 简介:目前用的常用测试工具对比 1.loadrunner 性能稳定,压测结果及颗粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多. 2.Apache ab(单接口 ...

  2. 压力测试(八)-多节点JMeter分布式压测实战

    1.Jmeter4.0分布式压测准备工作 简介:讲解Linux服务器上jmeter进行分布式压测的相关准备工作 1.压测注意事项 the firewalls on the systems are tu ...

  3. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  4. jmeter5.1分布式压测

    在使用jmeter压测过程中,可能会度遇到内存溢出的错误,这是为什么呢?因为jmeter是java写的应用,java应用jvm堆内存heap受负载机硬件限制,虽然我们可以调整堆内存大小,但是单机无法支 ...

  5. jmeter进行分布式压测过程与 注意事项

    jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式 ...

  6. Jmeter(四十七) - 从入门到精通高级篇 - 分布式压测部署之负载机的设置(详解教程)

    1.简介 千呼万唤始出来,这一篇感觉写了好久,总想写的清楚明白简洁,但是还是洋洋洒洒写了好多,希望大家喜欢吧!本来打算将这一篇文章是放在性能测试中讲解和分享的,但是有的童鞋或者小伙伴们私下问的太多了, ...

  7. jmeter分布式压测

    stop.sh需要跑Jmeter的服务器上安装Jmeteryum install lrzsz 安装rz.sz命令rz jemter的压缩包 拷贝到/usr/local/tools下面unzip apa ...

  8. jmeter 分布式压测(Linux)

    之前一篇博文写的是如何在Linux上使用jmeter压测,这篇介绍下Linux上jmeter的分布式压测. 和windows上的分布式类似,需要配置agent节点和控制机 一.Agent节点配置 1. ...

  9. jmeter 分布式压测(windows)

    单台压测机通常会遇到客户端瓶颈,受制于客户机的性能.可能由于网络带宽,CPU,内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机的瓶颈,压测的结果也会更加接近于真实情况. ...

随机推荐

  1. infer 代码静态分析

    infer 代码静态分析 静态代码分析工具,主要是为了提高我们的代码质量. 通常,我们提高代码质量的方式是通过CodeReview,但是这个过程耗费的人工和时间往往较大.并且随着代码量的增加人肉检测起 ...

  2. 切蛋糕(贪心 or 优先队列)

    链接:https://www.nowcoder.com/acm/contest/80/D来源:牛客网 最可爱的applese生日啦,他准备了许多个质量不同的蛋糕,想请一些同学来参加他的派对为他庆生,为 ...

  3. Android Linker简介

    简单介绍Android linker的基础知识,基于Android 10分支. linker的作用 考虑简单的HelloWorld程序. $ tree . . |-- jni | |-- Androi ...

  4. 异数OS TCP协议栈测试(四)--网卡适配篇

    异数OS TCP协议栈测试(四)–网卡适配篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 异 ...

  5. Oracle GoldenGate 19.1新特性

    1.GoldenGate 19.1 新特性概览a.支持Oracle数据库19.1 长期支持发布版本.集成Oracle GoldenGate 12.3版的最终补丁集更新.b.微服务的安全性和可管理性增强 ...

  6. [uoj#34] [洛谷P3803] 多项式乘法(FFT)

    新技能--FFT. 可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换. 其中最关键的一点便为单位复数根,有神奇的折半性质. 多项式乘法(即为卷积)的常见形式: \[ C_ ...

  7. springboot中使用logback

    原文地址:https://blog.csdn.net/tianyaleixiaowu/article/details/73321610 Springboot默认集成的就是logback,logback ...

  8. 【Java并发基础】Java线程的生命周期

    前言 线程是操作系统中的一个概念,支持多线程的语言都是对OS中的线程进行了封装.要学好线程,就要搞清除它的生命周期,也就是生命周期各个节点的状态转换机制.不同的开发语言对操作系统中的线程进行了不同的封 ...

  9. Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5

    创建内联的辅助器方法 和 拓展方法 好像类似的功能. 不过写在前台更直观

  10. Photoshop 2020安装教程

    首先来看看新增功能 [Photoshop 2020新增功能] 1.ipad和云文档 2.预设改进 3.新对象选择工具 4.转换行为一致 5.改进的属性面板 6.智能对到图层 7.增强的转换变形. 需要 ...