谈谈压测

背景

随着业务不断发展,用户量不断增长,系统负载愈来愈高。为了解决系统负载问题,咱们是否是直接大量增长机器就能够了?
同时,公司业务开展须要,可能须要开展各类营销活动,目前系统是否可以支持那么多用户也是个未知数,如何解决呢?
答案就是今天要讲的压测。java

目的

  • 验证单个业务及整个的处理能力及响应时间等
  • 验证系统的性能瓶颈
  • 合理的容量规划,而不是大量增长

分类

  • 单接口压测
  • 全链路压测

性能测试指标

业务类

  • TPS
  • 相应时间
    - 平均响应时间、最小响应时间、最大响应时间、90%响应时间等
    - 百分位数是一个统计学名词。99% 的百分位响应时间,指的是 99% 的请求响应时间都处在这个值如下。
    - 若是99%响应时间跟平均响应时间相差很大,那么说明是抗不住这么大量的,须要作相应调整及优化
  • 业务成功率
    - 压测前要肯定压测的业务成功率,不能把报错的数据当作压测结果,通常能够定业务成功率最少为1%
  • 系统资源指标
  • CPU使用率
  • 内存使用率
  • 磁盘繁忙率
  • 网络IO

全链路压测

目的

只作单系统压测是不够的,由于在活动开始的瞬间,各系统都面临自身服务的巨大的压力,而系统之间是有互相依赖关系的,单机压测没有考虑到依赖环节压力都比较大的状况。一个系统出现故障,故障会在链路流转过程当中层层累加,会形成没法评估的影响。nginx

为何选择线上环境作全链路压测

一般状况下公司不可能按照线上环境架构与性能要求1比1的搭建一套离线环境git

应用TPS

因为是全链路压测,因此不能单看一个接口的TPS,须要查看同个应用的不一样接口,相同应用不一样接口的TPS之和能够当作是应用总的TPSgithub

准备工做

  • 肯定压测场景
    - 制定大促的压测场景(好比秒杀、抽奖等)
    - 确认压测链路
  • 估算流量漏斗
    - 流量转化不是百分百的,如100个用户看到商详,可能会有50我的会去下单,最后有45我的进行了支付,那么在全链路压测的时候就要进行流量漏斗的估算。
    - 能够根据近7天线上真实用户的行为数据分型分析建模,以及往期同类型活动线上的流量分布状况进行估算
  • 肯定压测目标
  • 压测脚本
  • 发通知及公告
    - 通知商家避开压测时间段
    - 通知相关业务方关注相关告警等
  • 限流
    - 可能线上有开启限流,压测的时候要适当放开
  • 影子库
    - 作业务数据隔离,防止生成脏数据影响线上业务
  • 外部mock服务器
    - mock掉部分服务,好比微信支付

工具

  • ab
    ab是apache自带的压力测试工具。ab很是实用,它不只能够对apache服务器进行网站访问压力测试,也能够对或其它类型的服务器进行压力测试。好比nginx、tomcat、IIS等。
  • wrk
    wrk 是一款c语言开发的现代的http性能基准测试工具,使用简单,功能强大。
  • JMeter
    Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件,小巧轻便且免费。
  • Loadrunner
    Loadrunner是HP公司提供的一款性能测试工具,经过模拟成千上万个用户实施并发操做,测试系统的性能,而且提供详细的测试结果分析,协助用户查找问题。
    收费应用。
  • 自研工具

参考资料

相关文章
相关标签/搜索