性能测试 101:构建健壮应用程序的初学者指南

这是一份关于应用性能测试的指南,面向已构建应用并希望确保其在真实用户使用时不会崩溃的人员。无需复杂术语,重点介绍实用步骤以打造稳健可靠的应用:

  • 重要性:避免应用在大量用户同时使用时出现问题,如无法处理负载导致基础设施成本增加、用户体验变差等,可通过性能测试提前测量性能、找到瓶颈。
  • 步骤一:定义目标:明确性能测试目标,如找到实例可处理的每秒请求数(RPS)、内存泄漏、响应时间基线等,目标决定所需测试类型。
  • 步骤二:选择测试类型

    • 负载测试:模拟实例预期用户负载,识别性能瓶颈和正常操作容量,如黑五期间测试电商网站。
    • 压力测试:将系统推至正常操作极限以找到崩溃点,确定极端条件下的稳定性和恢复过程。
    • 耐力测试:评估系统在长时间持续高负载下的性能,发现内存泄漏等问题。
    • 峰值测试:检查系统在用户负载突然大幅增加时的性能及恢复情况。
    • 容量测试:专注于数据库,通过填充大量数据测试应用性能,如查询含数百万记录的客户数据库。
    • 可扩展性测试:衡量应用“向上扩展”或“向外扩展”处理增长用户负载的能力。
  • 步骤三:用存根隔离应用:使用存根(外部依赖的模拟版本)隔离应用,避免外部服务慢影响应用性能,可使用 Wiremock 等工具,还可通过混沌工程模拟外部 API 慢的情况,如在 Docker 或 K8s 环境中使用特定工具添加延迟。
  • 步骤四:设置工具

    • 评估工具:选择生成负载和运行性能测试的工具,如 Gatling 和 K6(适合集成到 CI/CD 管道的代码型)、Apache JMeter(有用户界面)、Apache Benchmark(命令行简单测试)。
    • 监控工具:运行测试时需要监控工具,如 OpenTelemetry(统一日志、指标和跟踪的标准)、Jaeger(用于跟踪监控)、Prometheus(收集指标的时间序列数据库)、Grafana(从 Prometheus 数据创建仪表盘的可视化工具)。
  • 步骤五:了解指标和模式

    • 关键指标:包括系统指标(操作系统资源相关)、应用指标(应用相关,如 Java 世界中的 JVM 内存区域等)、业务指标(如特定端点的延迟)。
    • 关键弹性模式:如断路器(防止资源浪费)、舱壁(隔离故障)、超时(避免资源耗尽)、重试(提高成功率)、速率限制器(防止系统过载)、缓存(提高性能)。
  • 步骤六:记录和分析结果:根据目标收集不同类型结果,如在负载测试中可记录基线 RPS、乘数、持续时间、请求数量等,通过分析这些结果做出明智决策。

结论:性能测试虽看似艰巨,但通过明确目标和结构化方法可系统提升应用可靠性,从小处开始迭代,打造能应对真实世界需求的应用。

阅读 13
0 条评论