负载均衡SLB压测为何不符合预期?

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
性能测试 PTS,5000VUM额度
日志服务 SLS,月写入数据量 50GB 1个月
简介: 负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。大多数公司购买SLB后会进行压测来检测其性能是否达标,经常会发现压测不符合预期的情况,此文针对SLB7层监听部分压测场景进行分析。

负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。
大多数公司购买SLB后会进行压测来检测其性能是否达标,经常会发现压测不符合预期的情况,此文针对SLB7层监听部分压测场景进行分析。

压测环境准备

  • 压测客户端(使用 Apache Benchmark(简称ab) 压测)
  • 性能保障型SLB
  • 压测服务端(Nginx web server)

为什么HTTPS压测性能不及HTTP?

如下图所示,使用HTTP压测1000请求5个并发的时候qps是331.7,但是使用HTTPS压测的时候qps只有34qps,很多人认为是SLB对HTTPS的处理性能不及HTTP。
_

首先可以在SLB控制台监控界面查看是否有丢弃连接和丢弃流量,如果没有丢弃连接和丢弃流量说明并未达到SLB的性能上限。
接着可以查看SLB 7层访问日志,看下request_time,通过下图可以看到不管是HTTP还是HTTPS,SLB的响应时间都非常快,且request_time并没有明显增大的情况,响应的状态码也都是200,从此可以判断SLB后端服务器没有达到瓶颈,SLB本身也没达到瓶颈.
requestt
那为什么会出现HTTPS压测性能不及HTTP的感觉呢?是因为AB压测的时候其实是串行进行的,当完成一个请求后才会进行下一个请求,HTTPS因为要进行SSL握手且是加密交互的,所以在SSL握手阶段耗时的时间会导致总体的QPS下降。下面通过抓包分析。可以看到HTTP的单个请求总的交互时间只有十几毫秒,但是HTTPS单个请求总的交互时间需要200多毫秒,这就导致客户端每秒发送的请求数量变少,所以这种情况并非是SLB处理不过来导致性能不行。
80_jpeg
443
如果遇到这种情况可以使用HTTP长连接压测或者增加多个客户端来压测,这时候SLB的QPS可以进一步提升。

为什么SLB并发上不去?

压测客户端压测发现SLB并发始终上不去。当客户端发送5000个请求,5个并发的时候总的qps在280左右。5个并发相当于模拟5个用户并发请求,但是每个用户自己的请求都是串行的,只有完成一个请求后才会发第二个请求。
通过netstat可以查看同一时刻差不多会有5个TCP连接发生请求
ab
1
如果SLB并未发生丢包,丢弃连接,没有响应异常状态码且7层访问日志查看request_time和upstream_request_time均比较小,那么可以增加客户端并发来提升qps,也可以增加多个客户端。

总结

如果压测SLB的时候感觉SLB性能不及预期可以通过下面几个信息判断

  1. 控制台SLB监控界面查看SLB是否有丢弃流量,丢弃连接
  2. 如果是7层监听,可以开通7层访问日志,查看压测时候状态码是否都是200,是否有异常状态码,例如5xx,4xx等
  3. 可以在7层访问日志里面查看upstream_request_time和request_times 是否有比较大的情况。

如果以上情况均没有发现异常,那可以增加压测客户端来提升qps,笔者多次遇到因为压测客户端(使用ab,jmeter等)问题,导致压测时候SLB的性能不及预期。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
Kubernetes 负载均衡 监控
记一次k8s压测发生SLB 499的串流问题
对k8s集群中的pod进行压测,压测方式是直接访问k8s前的SLB, 压测表现是 SLB (CLB 7层监听)偶发返回499报错。 最终确认问题根因是五元组复用导致串流。 关键词: 偶发499 、压测、k8s
1534 4
记一次k8s压测发生SLB 499的串流问题
|
3月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
185 3
|
4月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
138 2
|
5月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
135 1
|
5月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【8月更文挑战第5天】性能测试确保应用高负载下稳定运行。Apache JMeter与Locust是两大利器,助力识别解决性能瓶颈。本文介绍这两款工具的应用与优化技巧,并通过实战示例展示性能测试流程。首先,通过JMeter测试静态与动态资源;接着,利用Locust的Python脚本模拟HTTP请求。文中提供安装指南、命令行运行示例与性能优化建议,帮助读者掌握性能测试核心技能。
151 0
|
2月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
121 3
|
2月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
71 1
|
4月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
130 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
3月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
98 4