zoukankan      html  css  js  c++  java
  • 谈谈压测

    背景

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

    目的

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

    分类

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

    性能测试指标

    业务类

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

    全链路压测

    目的

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

    为什么选择线上环境做全链路压测

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

    应用TPS

    由于是全链路压测,所以不能单看一个接口的TPS,需要查看同个应用的不同接口,相同应用不同接口的TPS之和可以当做是应用总的TPS

    准备工作

    • 确定压测场景
      - 制定大促的压测场景(比如秒杀、抽奖等)
      - 确认压测链路
    • 估算流量漏斗
      - 流量转化不是百分百的,如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公司提供的一款性能测试工具,通过模拟成千上万个用户实施并发操作,测试系统的性能,并且提供详细的测试结果分析,协助用户查找问题。
      收费应用。
    • 自研工具

    参考资料

  • 相关阅读:
    MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?
    SDL + OpenGL使用笔记
    多进程和单进程区别
    sed 处理
    window.postMessage
    java List集合分页
    PostgreSQL 10.0 preview 性能增强
    PostgreSQL 10.0 preview 性能增强
    Android Studio快捷键动态演示
    Android Studio快捷键动态演示
  • 原文地址:https://www.cnblogs.com/powercto/p/12953050.html
Copyright © 2011-2022 走看看