关于运维:性能专家深度解读常见的压测模型

111次阅读

共计 2242 个字符,预计需要花费 6 分钟才能阅读完成。

本文介绍了几大性能测试场景,对压力测试相干指标、资源的估算模型进行了解析,并深度剖析了常见压测模型实用的业务场景及需思考的技术细节,让您在应用压测验证零碎能力时不再迷茫。

一、性能测试场景

1. 冒烟测试

  • 介绍:冒烟测试是惯例的负载测试,配置为最小负载(1 个 VU),每次新增或者更改脚本,你能够利用冒烟测试作为完整性检查。
  • 目标:验证测试脚本没有执行谬误,验证服务端在最小负载下不会呈现谬误。

2. 负载测试

  • 介绍:负载测试次要关注在失常并发用户数或者固定 rps 下评估零碎的性能,失常会采纳满负载的 50%~70% 长时间的运行,两头会减少几个坡度变动来察看零碎反馈。
  • 目标:评估零碎在肯定负载下的性能,确认零碎的重构、更改不会造成零碎重大性能问题。

3. 压力测试

  • 介绍:在高负载的压力下,评估零碎的可用性和稳定性。压力测试下又细分为:阶梯测试(多阶梯渐进达到最大压力)、尖峰测试(短时间内极其的负载)、峰值 - 测试(1 分钟的低负载,达到高负载,再消退)。
  • 目标:
    1)用于评估零碎在用户或者吞吐量的最大容量值。
    2)确认零碎在高负载状况下的资源指标体现。
    3)确认零碎的熔断机制以及是否具备故障主动发现、复原的模式。
    4)人工干预的流程演练,如何疾速定位、降级、打消故障范畴。

4. 浸泡测试

  • 介绍:浸泡测试配置为零碎容量的 80% 左右,并且尽量以小时为单位。
  • 目标:在长时间处于高压力状态下,发现零碎的谬误和可靠性问题,通常用于疾速定位内存透露、句柄开释、查找并发锁竞争问题。

二、性能测试场景

压测指标估算模型
假如一个脚本执行耗时 500ms,一个线程一秒能执行 2 次,一个线程可能造成 2rps 的压力,因而工作线程数会间接影响申请的吞吐量。
假如一个脚本执行耗时 2 秒,100 个线程在第一秒能造成 100 个申请的压力,均匀一秒 50 个申请,然而跟 50rps 是有基本的区别,申请的时间跨度不统一。
pod 资源估算模型
一个并发用户 = 一个 VU= 一个线程 / 协程
假如一个并发用户在 golang 运行对应是一个协程,一次脚本执行可能包含该用户的屡次接口申请,一次申请须要进行 socket 连贯,这里须要确认每次申请是否进行连贯复用。
golang 创立一个协程资源只需 2KB 资源,协程的切换老本比拟低(只须要三个寄存器的值批改 PC / SP / DX),然而如果禁用了连贯复用,每次申请须要创立新的连贯,对 pod 的资源耗费是极大的。

操作系统 linux 优化网络配置:

sysctl -w net.ipv4.ip_local_port_range=”1024 65535″

sysctl -w net.ipv4.tcp_tw_reuse=1

sysctl -w net.ipv4.tcp_timestamps=1

ulimit -n 250000

三、罕用压测模型

罕用的压测模型次要包含两种,并发用户模型 固定 rps 模型

并发用户模型用于模仿用户继续阶段增长阶段,用于验证服务端的负载一直增长或者流量减缓的前提下,性能指标的变动。

固定 rps 指标通常是由业务方依据流动波峰估算后须要达到的服务 rps 容量,因而失常只须要掂量在该 rps 压力,服务的负载(包含 latency、cpu、memory、iostat 等负载)是否失常以及链路危险。

在模仿实在流量大容量压测场景下,存在几个问题

  1. 用户 IP 来自寰球各地,如何设置 ip 池,防止因为负载平衡导致的流量散布不平均。
  2. 如何依照用户地区的实在流量来调配发压机 (对应 k8s 的 pod) 流量占比。
  3. 采纳 rps 压测模型下,因为网络的抖动以及跨 idc 的带宽差别,不同地区雷同数量的 VU 造成的 rps 差别会比拟大,并且脚本的申请耗时越低,这个差别越会被放大。
  4. 排除用户自定义黑白名单限度。

须要思考的细节点

  1. 一个用户申请 10 次,10 个用户申请 1 次,同样是造成 10rps 的压力,然而对服务端的资源耗费不同,10 个用户可能存在 10 条长连贯。
  2. 假如实在用户是端上用户,browse 会采纳 http2 连贯复用技术,如何在同一条 tcp 连贯进行申请的模仿、编排,当然非凡场景下可能会存在短链接场景。
  3. 同一个用户(uid 标记)屡次申请同一个接口,可能命中缓存,不能实在的模仿不同用户的并发场景,须要提供大量的测试数据账号。

分布式场景下,须要摸顶每个 pod(假如是 4C8G)能启动的最大并发线程 / 协程数。
并发用户模型,绝对简略,通过平均切片用户设置的并发用户数指标,并且依照地区流量比例下发到各个地区的 pod。
固定 rps 模型,须要设置初始的用户线程数,因为每个 pod 每个地区存在网络抖动,每个线程数能造成的 rps 压力也在浮动,存在两个技术计划——
前提:先通过短时间小范畴的预压测,摸底每个地区 pod 单个线程执行脚本能造成的 rps 压力,可能提供精准的时延数据供 operator 计算调度。

  1. 用户设置的 rps 指标间接切片到各个 pod,假如每个 pod 误差不大并且在负载范畴内,可能达到用户设置的 rps 指标。
    长处:实现简略。
    毛病:存在些许误差,容错能力、扩大能力差。
  2. 预设初始每个 pod 的并发用户数,每个 pod 上报申请次数到全局限流中间件限流,operator 依据聚合的指标依照 pod 资源粒度进行弹性扩缩容,最终达到 rps 指标。
    长处:具备主动容错机制,运行中反对全局动静调度。
    毛病:减少了第三方组建依赖,调度实现简单。

四、优测压力测试简介

优测压力测试 是一款云原生性能测试工具,可模仿百万用户发压,反对单接口、全链路及 JMeter 压测。提供多维度性能测试报告,帮忙业务疾速定位产品性能瓶颈、精确验证零碎能力,全面晋升稳定性。

正文完
 0