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. 原生javascript实现选项卡(基础版)

    一.实现原理 1.主要运用“排他思想”,在设置当前元素前,先把相应元素恢复到默认状态 2.给相应元素添加下标的应用 二.代码展示 <!DOCTYPE html> <html> ...

  2. vnpy源码阅读学习(2):学习PyQt5

    PyQt5的学习 花费了一个下午把PyQt5大概的学习了下.找了一个教程 PyQt5教程 跟着挨着把上面的案例做了一遍,大概知道PyQt5是如何生成窗体,以及控件的.基本上做到如果有需求要实现,查查手 ...

  3. 【一起学源码-微服务】Hystrix 源码二:Hystrix核心流程:Hystix非降级逻辑流程梳理

    说明 原创不易,如若转载 请标明来源! 欢迎关注本人微信公众号:壹枝花算不算浪漫 更多内容也可查看本人博客:一枝花算不算浪漫 前言 前情回顾 上一讲我们讲了配置了feign.hystrix.enabl ...

  4. 通过ArcGIS将数据存储到SQL Server2012中

    一.软件安装: ARCGIS 10.3安装 SQLserver2012安装 ARCGIS 10.3 安装(注意ARCGIS10.3并不用安装配置ARCSDE). https://wenku.baidu ...

  5. 双射 - hash去重

    题目描述Two undirected simple graphs and where are isomorphic when there exists a bijection on V satisfy ...

  6. nginx介绍与安装

    1.nginx作用可以配置数十个场景 ​ ​ 2.环境安装 环境确认 ​ 安装环境 yum -y install gcc gcc-c++ autoconf pcre-devel make automa ...

  7. 如何修改netbeans的系统字体?

    1. 打开/etc/netbeans.config 2. 找到netbeans_default_options 3. 追加 --fontsize 12

  8. ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程

    基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...

  9. log4j的xml配置

    主要记录下方便下次查找 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:conf ...

  10. 【Oracle】复制表结构和表数据

    1.既复制表结构也复制表数据:CREATE TABLE tab_new AS SELECT * FROM tab_old; 2.只复制表结构:CREATE TABLE tab_new AS SELEC ...