大规模分布式压测

转自:阿里云性能测试页面

原文地址:https://help.aliyun.com/document_detail/pts/test-case/PTS-TC09-Large-scaleDistributedStressTesting.html?spm=5176.docpts/test-case/PTS-TC08-ProtalWebSites.6.141.cS2ZnN

1 背景

  需要临时扩容他们的机器来支持100W的QPS,每秒100W的请求,听起来还是挺恐怖的。什么概念呢,2013 年双12的大秒系统的峰值QPS也就在42万多。从这样的数据来看,这个客户的需求高的离谱。但是既然用户有这个需求,我们还是需要满足客户的期望。

2 问题及挑战

  遇到问题主要有:

  • 100万QPS
  • 被测系统如何搭建,需要多少台机器
  • 选择何种压测工具,百万级QPS考验,压力机需要多少台机器

  遇到的挑战主要有:

  • 项目实施的时间只有5天,压力非常大
  • 被测系统是否能承受如此大的压力
  • 压力机自身是否能经受如此大的压力,是否稳定
  • 短时间内如何快速部署被测系统及压力机环境
  • 性能瓶颈在哪(程序、OS/硬件、网络设备等)

3 解决方案及评估

  经过多次会议,确定解决方案是,采用阿里云环境自动化运维及弹性扩容来搭建环境,压测工具采用分布式压测。
  通过评估机器数量如下:

  • 被测系统环境:2台SLB,300台ECS(4核CPU 8G内存),批量部署应用
  • 压力机环境:300台ECS(4核CPU 8G内存),批量部署性能测试

  整个团队包括客户、SLB和ECS机器维护人员、环境部署人员以及性能测试团队充分密切配合。

4 目标

  QPS:100万,稳定运行1分钟左右。

5 典型业务

  秒杀活动,一个比较复杂的带Header, Body, Cookie 的http 请求。

6 测试结果

6.1 结果

    • QPS峰值最高达到71.5W,后端ECS CPU利用率最高75%,网络峰值流量达到25Gb。
    • QPS达到峰值后,逐渐下降,基本稳定在50万左右。能稳定运行4分钟左右。

6.2 分析

  QPS下降的原因经过各技术专家诊断一致认为是SLB丢包导致,SLB压力已到极限,因此建议需要配置3台SLB,每台SLB挂100台ECS,才有可能满足100万QPS 。

6.3 结论

  经过与客户会讨,峰值71.5万QPS,稳定运行4分钟50万QPS,能满足目前现在的业务需求。如果需要支持100万QPS,需要扩容SLB,至少是3台SLB以上。

7 总结

7.1 分布式压测

7.1.1 稳定性

  在测试过程中,性能测试经受住了大规模压力的考验,并且从未出现过异常问题,由此可知,性能测试产品非常稳定。

7.1.2 百万级QPS支持

  在测试的过程中,性能测试能支撑百万级QPS的压力发起,这是目前其他压测工具所不能支持的。

7.1.3 资源消耗少

  虽然性能测试压测机申请了300台ECS机器,但在测试过程中,消耗的机器资源非常少,CPU利用率不到0.1%,并且每台机器负载均衡,实际上100台ECS就足够了。

7.2 环境搭建

  在调研阶段,性能测试团队就大规模压力发起进行了充分的调研,并且通过测试验证单台机器能发起的压力以及弹性扩容,预估出需要的机器数量,才能保证项目的顺利进行。

  另外阿里云批量自动化环境搭建节省了环境的部署时间,在1天内完成所有工作。

7.3 团队合作

  这次大规模压力压测在5天内顺利完成,离不开整个团队所有人员密切配合,重点关注,才能让如此大的项目在短时间内成功实施。因此团队合作在项目实施的过程中有起着举足轻重的作用。

JMeter是一个开源的压力测试工具,可以用于Web应用、SOA服务以及其他HTTP协议的应用程序的性能测试。当需要对系统进行大规模并发压力测试时,我们通常会考虑构建分布式JMeter环境。 ### JMeter分布式压测环境搭建步骤: #### 第一步:准备环境 1. **服务器配置**:首先,你需要一组服务器,每台服务器都需要安装Apache JMeter,并且它们之间应该有稳定的网络连接。 2. **JMeter版本一致性**:确保所有JMeter版本一致,避免因版本差异导致的兼容性问题。 #### 第二步:部署JMeter 1. **服务器上安装JMeter**:通过SSH或其他远程访问工具将JMeter安装包上传到服务器上,然后解压并配置JMeter环境变量。可以参考官方文档或教程进行详细操作。 2. **配置JMeter**:在每个JMeter实例中配置监听地址和端口。例如,在命令行中运行 `jmeter -n -t test计划.jmx -l results.jtl` 来启动测试,这里 `-n` 指示无GUI模式运行,`-t` 表示测试脚本的位置,`-l` 表示结果保存文件位置。 #### 第三步:创建并分发测试计划 1. **设计测试计划**:使用JMeter的图形界面或脚本语言编写测试计划,包括URL、请求头、参数、断言等。确保测试计划能覆盖所需的所有功能和场景。 2. **导出测试计划**:将测试计划导出为.jmx格式文件,以便于跨节点执行。 3. **分发测试计划**:将测试计划文件复制到所有参与测试的服务器上。 #### 第四步:协调与控制 1. **负载均衡**:根据实际需求分配任务给各个服务器,可能需要使用额外的工具如LoadRunner或Zabbix等来监控和控制流量分配。 2. **日志分析**:为了更好地理解系统响应以及发现潜在瓶颈,设置详细的日志记录,并定期查看日志信息。 #### 第五步:执行分布式测试 1. **同步执行**:通过脚本或者其他自动化手段触发所有服务器同时开始执行测试计划。 2. **监视与调整**:使用JMeter自带的日志功能或外部监控工具监视测试过程,必要时调整服务器资源分配或测试策略。 #### 第六步:分析结果 1. **聚合报告**:通过JMeter的聚合报告功能合并各服务器的测试结果,生成全面的性能测试报告。 2. **优化调整**:基于测试结果分析系统性能瓶颈,针对性地优化代码或架构设计。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值