如何快速调度 PTS 的百万并发能力
admin
2023-08-16 18:55:37
0次

作者:灵苒
在实际的业务场景中,压测是必不可少的一环,无论是对服务器、数据库、网络等性能瓶颈的评估,还是如浏览、下单、支付等重要流量节点的业务连续性保障,亦或是搬站上云整体业务稳定性的预估,这些都需要性能压测来帮助你建立对系统和业务的完整认知。根据 Google 的统计,如果网站打开慢每 500 毫秒,用户访问量将下降 20%。根据 Amazon 统计,每慢 100 毫秒,交易额下降 1%。这些事件和统计数据为大家敲响了警钟,也客观说明了性能压测对于企业应用的重要性。
压测是通过模拟用户行为对业务系统发起请求,测算出系统的承载能力,并对系统做一次全面的体检,压测后可根据压测表现优化系统瓶颈,防止出现线上故障。
业界常见的压测软件 JMeter 和 PTS 目前 JMeter 是性能压测领域应用最广泛的开源软件。
对于场景简单,要求测试并发量不高的情况下,JMeter 本地测试就能满足需求。但随着互联网用户的增加,对系统承载更大并发的需求日渐提升,而单台 JMeter 施压机的施压能力有一定上限,所以需要使用多台施压机,以提高 JMeter 的施压能力,这就要使用到 JMeter 的分布式施压功能。
但 JMeter 的分布式压测前置准备较多,需要注意以下几点:

  • 施压机的防火墙已关闭或打开了正确的端口。为 RMI 设置了 SSL 或禁用了它。
  • 所有施压机都在同一个子网上。如果使用 192.xxx或10.xxx IP 地址,则服务器位于同一子网中。
  • 所有施压机上使用相同版本的 JMeter 和 Java。
  • 所有施压机都已经拷贝了切分好的 CSV 数据文件、依赖 jar 包等。
  • 已配置好监控数据的收集。
由此可见 JMeter 的分布式压测需要自己协调各资源,前置准备比较麻烦,对实施压测的人员来说压测效率低。
PTS 是阿里云研发的性能测试工具,最初主要为了模拟双十一流量洪峰,如今已走过十个年头,在场景编排、压测执行、压测监控分析、报告总结等各方面能力相对完善,可提供百万并发、千万 TPS 流量发起能力,并且还能完全兼容 JMeter,可天然弥补 JMeter 在性能压测中的劣势。对使用 JMerer 无法绕过集群问题的用户是一个很好的选择。
PTS 的 JMeter 压测极大的简化了 JMeter 分布式压测流程,同时也降低了压测过程中对施压机的维护成本。使用 PTS 的 JMeter 压测,用户只需要在控制台配置需要使用的机器数,无须用户提前准备多台已安装相同 Java 和 JMeter 版本的施压机。同时无须用户根据施压机数量去切分 CSV 参数文件;压测结束后,PTS 会将监控数据汇总产生一个详细的压测报告供用户查阅。
相比于直接在命令行执行 JMeter 脚本来说,PTS 使用更加方便,可按需提供海量的施压能力,并且能提供简洁直观的监控和报告。
如何快速调度 PTS 的百万并发能力
文章图片

如何快速调度 PTS 的百万并发能力
文章图片

如何发起 PTS 的 JMeter 压测 和所有压测的核心步骤一样,使用 PTS 的 JMeter 压测,也主要集中在创建场景、压测场景和查看报告三个步骤中。
1、创建场景:PTS 的 JMeter 压测以场景为核心,压测对象为一个场景,场景中包括JMeter(原生)脚本、JMeter 依赖(一系列依赖 jar 包和一系列 properties 配置)、及一些压测配置(PTS 压测的配置,例如公网/VPC 压测、并发量、引擎数量、压测时长等)。
2、压测场景:对场景的操作分为两方面,一是对场景配置的增删改查,二是对场景的压测和调试。
3、生成报告:每次对场景压测都会生成一个压测任务,同时生成一个报告,其中包括压测的关键指标,如 TPS、RT、成功率等,可辅助用户排查系统性能瓶颈。此外,PTS 默认将报告保存 30 天,可以随时查看历史报告,并且提供导出 PDF 格式的报告。
在压测领域,随着压测需求日益多样化,更多用户希望将云上的压测能力继承到自己的系统,或者根据自己的业务系统,编排自定义的压测平台,从而实现自动化定制化压测需求。
【如何快速调度 PTS 的百万并发能力】所以,为了方便用户便捷调度 PTS 百万并发的能力,PTS 开通了 JMeter 的 OpenAPI,提供了如下几类压测的核心功能:编辑场景、调试场景、压测场景、查看运行时数据、查看报告。
如何快速调度 PTS 的百万并发能力
文章图片

通过集成 OpenAPI,客户可以更加方便的在自己的业务场景实现 PTS百万级并发压测的能力,实现场景的增、删、改、查等各种操作,一键启动压测,并在压测过程中,随时停止压测。同时生成的压测报告中,除了JMeter 原生的日志外,还有 PTS 针对某个采样器的成功率、TPS、RT 指标的聚合数据。另外还可以对报告进行查看报告列表、JMeter 原生日志以及 PTS 对 JMeter 采样器压测指标的聚合数据等功能。
那么还等什么呢?来,试着用 PTS 中 JMeter 的 OpenAPI 写一个属于你的百万级并发压测能力的压测平台吧!
附录:
具体步骤如下
引入 pom 依赖
com.aliyun pts-api-entity 1.0.1 com.aliyun pts20201020 1.8.10 com.aliyun aliyun-java-sdk-core 4.5.2

\
复制下列代码
import com.aliyun.pts20201020.Client; import com.aliyun.pts20201020.models.*; import com.aliyun.teaopenapi.models.Config; import java.util.ArrayList; import java.util.List; import java.util.Map; public class StartingDemo {public static void main(String[] args) throws Exception { Client client = getClient(); // 创建场景 String sceneId = createScene(client); // 启动场景 String reportId = startTesting(client, sceneId); // 最多等待次数 int count = 0; // 查询是否已生成报告 while (!hasReport(client, reportId) && count++ < 20) { // 若报告还未生成,则等待(30s)一段时间再查询 // 根据压测时间酌情等待 Thread.sleep(30 * 1000); } // 查看报告 getJMeterReport(client, reportId); }private static boolean hasReport(Client client, String reportId) throws Exception { ListJMeterReportsRequest request = new ListJMeterReportsRequest(); // 分页设置 request.setPageNumber(1); request.setPageSize(1); // 查询条件设置 request.setReportId(reportId); ListJMeterReportsResponse response = client.listJMeterReports(request); return response.getBody().getReports().size() > 0; }private static void getJMeterReport(Client client, String reportId) throws Exception { // 查看机器日志 GetJMeterLogsResponse getJMeterLogsResponse = getJMeterLogs(client, reportId); List logs = getJMeterLogsResponse.getBody().getLogs(); // 查看采样器聚合数据 GetJMeterSampleMetricsResponse getJMeterSampleMetrics = getJMeterSampleMetrics(client, reportId); List sampleMetricList = getJMeterSampleMetrics.getBody().getSampleMetricList(); // 查看采样日志 GetJMeterSamplingLogsResponse getJMeterSamplingLogs = getJMeterSamplingLogs(client, reportId); List sampleResults = getJMeterSamplingLogs.getBody().getSampleResults(); }private static GetJMeterSamplingLogsResponse getJMeterSamplingLogs(Client client, String reportId) throws Exception { GetJMeterSamplingLogsRequest request = new GetJMeterSamplingLogsRequest(); // 分页设置 request.setPageNumber(1); request.setPageSize(10); // 条件设置 request.setReportId(reportId); GetJMeterSamplingLogsResponse response = client.getJMeterSamplingLogs(request); return response; }private static GetJMeterSampleMetricsResponse getJMeterSampleMetrics(Client client, String reportId) throws Exception { GetJMeterSampleMetricsRequest request = new GetJMeterSampleMetricsRequest(); // 设置报告id request.setReportId(reportId); GetJMeterSampleMetricsResponse response = client.getJMeterSampleMetrics(request); return response; }private static GetJMeterLogsResponse getJMeterLogs(Client client, String reportId) throws Exception { GetJMeterLogsRequest request = new GetJMeterLogsRequest(); // 分页设置 request.setPageNumber(1); request.setPageSize(10); // 查询的压测引擎索引 request.setReportId(reportId); GetJMeterLogsResponse response = client.getJMeterLogs(request); return response; }private static String startTesting(Client client, String sceneId) throws Exception { StartTestingJMeterSceneResponse startTestingSceneResponse = startTestingScene(client, sceneId); String reportId = startTestingSceneResponse.getBody().getReportId(); return reportId; }private static StartTestingJMeterSceneResponse startTestingScene(Client client, String sceneId) throws Exception { StartTestingJMeterSceneRequest request = new StartTestingJMeterSceneRequest(); request.setSceneId(sceneId); StartTestingJMeterSceneResponse response = client.startTestingJMeterScene(request); return response; }private static String createScene(Client client) throws Exception { SaveOpenJMeterSceneRequest request = new SaveOpenJMeterSceneRequest(); // 定义场景 SaveOpenJMeterSceneRequest.SaveOpenJMeterSceneRequestOpenJMeterScene scene = new SaveOpenJMeterSceneRequest.SaveOpenJMeterSceneRequestOpenJMeterScene(); // 设置场景名 scene.setSceneName("test"); // 设置文件列表,包括JMeter脚本、JMeter压测依赖jar包、配置额度数据文件等 List fileList = new ArrayList(); // 设置文件的属性 需要设置文件的名称和文件公网可访问的oss地址 SaveOpenJMeterSceneRequest.SaveOpenJMeterSceneRequestOpenJMeterSceneFileList testFile = new SaveOpenJMeterSceneRequest.SaveOpenJMeterSceneRequestOpenJMeterSceneFileList(); testFile.setFileName("baidu.jmx"); testFile.setFileOssAddress("https://pts-openapi-test.oss-cn-shanghai.aliyuncs.com/baidu.jmx"); fileList.add(testFile); scene.setFileList(fileList); // 设置场景并发,可设置为100万 scene.setConcurrency(1000000); // 设置引擎数量 说明:一台引擎最多能发500并发,最少1并发所以此处能设置的引擎数为[2,1000],另外引擎数量越多消耗vum越快 scene.setAgentCount(2000); // 设置压测持续时间 60s scene.setDuration(60); // 设置测试文件的名称,这个文件需包括在文件列表中 scene.setTestFile("baidu.jmx"); request.setOpenJMeterScene(scene); SaveOpenJMeterSceneResponse response = client.saveOpenJMeterScene(request); return response.getBody().getSceneId(); }private static Client getClient() throws Exception { // 填写自己的AK/SK String accessKeyId = "ak"; String accessKeySecret = "sk"; Config config = new Config(); config.setAccessKeyId(accessKeyId); config.setAccessKeySecret(accessKeySecret); Client client = new Client(config); return client; } }

填写自己的 ak/sk 在上述代码的 getClient 中填写正确的 ak/sk
点击启动 点击 main 方法启动
点击??此处??,前往 PTS 官网了解更多详情!

相关内容

热门资讯

大浪淘金APP黑幕揭秘:内盘操...   大浪淘金APP平台最隐蔽的黑幕,在于其完全封闭的内盘交易系统。这个看似与国际市场接轨的交易平台,...
告别固定工资实现财富自由?一品...   普通投资者被广告宣传诱导,注册就送现金,充值返现金券等等这些宣传方式,都是在引流到平台开户,不怕...
哈易购APP打着现货交易幌子搞...   网络上各类白银、铂金等贵金属投资广告铺天盖地,不少平台以"现货交易"为名,暗中却从事着非法期货交...
5元起投!高额收益?中国白银、...   上海华通白银国际交易中心有限公司(以下简称“华通白银国际”)打着“白银、铂金现货订购”的旗号,实...
"九州订购APP、起...   近年来,贵金属投资热度持续攀升,但乱象也随之而来。一些不法分子趁机搭建虚假交易平台,打着"低门槛...
坚锅淘金APP投资者频繁爆仓亏...   坚锅淘金APP对外宣称是贵金属现货交易平台,日常出入金看似畅通无阻,给人一种合规运营的假象。但事...
斗金订购APP“5元订购现货”...   斗金订购APP“5元订购现货”骗局揭秘:充值易、回本难,越陷越深!  许多投资人在未核实平台合规...
贵金属APP乱象曝光:&quo...   当前市场上部分贵金属类APP未取得正规交易资质,涉嫌误导消费者参与白银、铂金等商品的非合规交易!...
华通白银、银宝街APP被指虚假...   警惕现货白银投资陷阱:上海华通白银背后的平台涉嫌非法期货交易  近年来,各类现货白银交易平台以“...
充值送300,月入过万?别被量...   如今,网络上充斥着大量未经批准的贵金属及其他产品订购交易平台。这些平台普遍缺乏合法经营资质,却将...
鑫汇智投APP贵金属非法期货、...   鑫汇智投APP贵金属非法期货、人为控盘,大量投资者遭恶意收割  鑫汇智投APP长期以“低门槛、高...
矅光智策APP非法贵金属交易骗...   不少投资人在矅光智策APP上进行贵金属交易后出现了严重亏损。许多人在下载该平台时,根本不清楚其是...
飞鸽订购APP非法期货交易骗局...   飞鸽订购APP非法期货交易骗局,很多投资者根本没搞懂规则就盲目充值,买涨买跌跟买cai票一样!平...
天龙白银APP被操控的非法期货...   中小投资者在网络平台参与商品现货订购交易,表面看似合规合法,实则暗藏诸多难以察觉的风险。商品现货...
下载送试玩金?千万别碰!带你揭...   当前,许多贵金属APP交易平台正采用欺诈性营销手段。它们通过抖音等短视频平台,以“5元起投”“充...
泡泡淘金APP骗局:打着&qu...   泡泡淘金APP骗局:打着"商品订购"幌子,实则非法期货收割投资者!投资需谨慎,切勿轻信“高额回报...
南商云购APP虚假电子盘背后的...   南商云购是虚假电子盘吗?它是否具备合规的交易资质?这个曾经的"现货电子盘"如今摇身一变,披上了"...
警惕"祥龙订购&qu...   祥龙订购APP、掌上银牛APP等平台背后的运营方——四川禄宏商品现货市场有限公司,仅具备现货交易...
中国白银、华银:虚假宣传、后台...   中国白银APP宣称是上市公司“中国白银集团”与“上海华通白银国际交易中心”旗下的现货交易平台,提...
起底“优品订购”APP非法期货...   “优品订购”APP根本不具备任何合法的交易资质。其背后的运营方仅凭随便注册一家公司、开发一款交易...