聊聊基准测试的mvp方案

tiechui2015 tiechui2015     2023-02-05     208

关键词:

上篇博客介绍了基准测试的一些思路和方法策略,这篇博客,聊聊基准测试的MVP(最小可行性方案)。。。

 

思维导图

技术分享图片

 

一、测试策略

策略名称 阈值 运行时间 性能指标 基线 注释
并发测试 CPU75%+Error0.01% 10-30min 并发数、TPS、RT、内存占比 并发基线 并发测试得到的结果可以作为实际生产环境峰值流量下的性能表现
容量测试 CPU<100%+Error0.01% 10-30min 并发数、TPS、RT、内存占比 容量基线 一般来说90%即可作为阈值
双节点测试 CPU<100%+Error0.01% 10-30min 并发数、TPS、RT、内存占比 负载均衡基线 应考虑随着服务节点的增加,性能的递减效应,一般每增加1个节点,理论上性能递减2-5%(以实际测试结果为准)
稳定性测试 CPU75%+Error0.01% ≥12h 并发数、TPS、RT、内存占比 稳定性基线 稳定性的运行时间根据具体情况调整,一般不能低于12h

PS:今天和朋友聊起这个话题,朋友说还应该有一个高可用测试,不过仔细想了下,高可用个人认为应该更侧重容灾和失效恢复测试领域。。。

 

二、系统配置

nCnG:性能测试可能涉及多个系统,每个系统的服务器配置存在不同,因此要明确不同系统的硬件配置,这样也方便针对性的设定测试策略以及分析性能指标。

内存分配:这里主要指的是堆内存分配,需要根据具体的服务器配置进行分配,当然,最好针对性的进行配置测试来确定内存的合理分配。

应用版本:以JDK为例,每个版本都有不同的改进和优化,且被测系统环境应与实际生产环境保持一致的版本。

线程池:线程池数量,也是一个需要重视的问题(我本人就遇到过由于线程耗尽最终导致的OOM)。

最大连接数:容器、DB的最大连接数,消息队列的消费者数量,也是一个需要考虑的因素。

缓存策略:为了提高系统应对大流量冲击以及提高可用性,缓存是离不开的一种方法,这里需要关注的是缓存命中以及缓存穿透的问题。

 

三、环境选型

SIT:一般来说很少在SIT环境进行基准测试,原因很多,比如:交叉影响、稳定性、配置不一致甚至多个项目部署在同一个SIT环境等。

UAT:大多数时候,性能测试都是在UAT环境下进行,因为UAT相比SIT稳定性更好,已经通过了系统测试阶段,且进行性能测试的成本相比生产环境更低。

PAT:在生产环境进行性能测试,测试结果的准确性是最高的,但也需要考虑到这几点因素:数据污染、隔离、改造成本、不能影响实际生产业务运行、测试时间等。

 

四、执行方式

稳定施压:上面提到的并发、容量、双节点、稳定性测试一般都是基于一个固定的并发数来模拟负载进行测试,具体的并发数值需要根据实际的用户数、使用频次、业务场景考虑。

浪涌测试:在实际生产环境中,有时候存在这种情况:短时间内有很高的流量冲击,比如限时秒杀等场景。

阶梯式加压:阶梯式加压是寻找系统拐点的最有效的方式。

 

五、风险预估

在进行基准测试前,要考虑到以当前的环境、业务模型、系统配置可能存在哪些影响测试的因素,以及影响程度、应对策略,比如:网络延时、网络波动、交叉影响等。

 

六、业务模型

基准测试的业务模型选择,无论是从实施难易程度或者成本考虑,一般都以以下三种类型出发:

核心业务:一般来说核心业务的重要性和使用频次都是优先级最高的,比如支付、订单。

高频次业务:查询、更新等高频操作场景,也是需要重点关注的场景。

日常轮询业务:基准测试的实施前提就是可重复执行和长时间进行测试,这样才可以进行对比和统计,来分析长期的系统性能基线变化。

 

七、工具选型

性能测试过程中,需要借助的工具很多,使用占比最高的为以下几种:

负载生成工具:比如Jmeter、Loadrunner、Locust、Gatling、Artillery。

应用监控工具:主要用来监控服务端的各项指标,比如Nmon、Skywalking。

代码分析工具:比如SonarQube、Codacy,一般结合持续集成工具来进行。

日志分析工具:比如现在最常用的ELK。

DB监控工具:比如Zabbix、DBMonitor。

 

八、异常处理

在性能测试过程中,经常会遇到一些异常情况,比如超时、失败、接口依赖、敏感数据等情况,针对这些情况,设计合理可行的解决方案。

 

九、统计维度

测试的结果一定要方便从各个层次、维度进行统计,这样可以为后续的分析提供更可靠的数据来源,以响应时间来说,一般从以下几个维度统计:

维度 举例 适用测试策略
峰值 取系统CPU在75%左右的表现进行多次统计,加权平均计算 并发测试
极值 取系统CPU<100%的表现进行多次统计,加权平均计算 容量测试
平均值 平均值的统计,比较适用于响应时间波动不大的情况 双节点测试
百分比值 对于服务集群部署或者分布式部署的系统,百分比值,更能反映系统的性能表现 稳定性测试

 

十、查询展示

上篇博客介绍过,基准测试的结果一定要便于统计展示,可以明了直观的展示给相关人员,一般来说,可以从不同维度,粒度从大到小的形式进行查询展示,比如:

维度 说明
时间范围 比如默认展示最近一个月的基准变化,也可以设置根据时间来查询不同时间范围内的基准表现
系统名称 对于涉及对个业务系统的情况,可以根据系统名称进行查询
业务模型 从核心业务、高频次业务、日常轮询业务等维度,进行展示
测试策略 根据基准测试的策略,从并发、容量、双节点、稳定性等角度进行查询展示

可以通过web页面、仪表盘、折线图、树状图等形式,进行不同角度的系统基准表现展示,具体如何设计,可以进行需求调研,然后针对性的设计。

技术分享图片

 

《性能测试二三谈》系列

...整的性能测试流程》6、《性能测试常见术语浅析》7、《聊聊连接池和线程》8、《如何开展性能测试》9、《<转>性能测试指标》10、《认清性能问题》 方法篇性能测试无疑是一个很复杂的工程,采用合理的测试方法,才... 查看详情

go语言之基准测试

什么是基准测试基准测试,是一种测试代码性能的方法,比如你有多种不同的方案,都可以解决问题,那么到底是那种方案性能更好呢?这时候基准测试就派上用场了。基准测试主要是通过测试CPU和内存的效率问题,来评估被测... 查看详情

浅谈基准测试

...性能测试中有一种测试类型叫做基准测试。这篇博客,就聊聊关于基准测试的一些事儿。。。 1、定义通过设计合理的测试方法,选用合适的测试工具和被测系统,实现对某个特定目标场景的某项性能指标进行定量的和可对... 查看详情

什么是mysql基准测试

数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。对MySQL的基准测试,有如下两种思路:(1)针对整个系统的基准测试:通过http请求进行测试,如通过浏览器、APP或postman等测试工具。该方案的优... 查看详情

MATLAB 性能基准测试

】MATLAB性能基准测试【英文标题】:MATLABperformancebenchmarking【发布时间】:2014-12-1904:11:43【问题描述】:设置:这篇文章是关于测试以下问题的解决方案的性能:给出了一个由S字符串组成的元胞数组,格式为由下划线分隔的数字... 查看详情

MapReduce 工作流基准

】MapReduce工作流基准【英文标题】:MapReduceworkflowbenchmarks【发布时间】:2014-04-0823:03:20【问题描述】:任何机构都可以通过任何基准测试MapReduce工作流程吗?还是一般的BigData工作流基准测试来测试Oozie等工作流系统的性能和准确... 查看详情

Go 语言基准测试?

】Go语言基准测试?【英文标题】:Golanguagebenchmarks?【发布时间】:2010-12-1600:44:36【问题描述】:我看到Go在速度上应该几乎可以与C相媲美的说法,但是是否有任何可用的基准?【问题讨论】:【参考方案1】:Go被添加到ComputerLa... 查看详情

用于 hget 和 hset 命令的 Redis 基准测试

】用于hget和hset命令的Redis基准测试【英文标题】:Redisbenchmarkingforhgetandhsetcommands【发布时间】:2014-05-1409:22:57【问题描述】:我找不到使用redis对HGET、HSET(哈希表命令)进行基准测试的示例。任何示例或资源都会对此有用。【... 查看详情

基准程序的基准程序测试

参考技术A基准程序测试是应用程序开发生命周期的一个常规部分。它是由应用程序开发人员和数据库管理员(DBA)等小组成员参与的工作,应对您的应用程序执行它,以确定当前性能并提高性能。如果已将应用程序代码编写得... 查看详情

尴尬的性能测试岗位——顺便聊聊“点点点”

性能测试工作不尴尬,但是性能测试岗位很尴尬。从我这里的讲述中,希望你也能看到其他测试工作的影子,希望你对“点点点”不再迷茫不再抑郁。自己水平有限,望大家多多批评。性能测试的工作内容这方面的资料很多了,... 查看详情

用于对 Java 类进行基准测试的 JMH 与 JMeter?

】用于对Java类进行基准测试的JMH与JMeter?【英文标题】:JMHvsJMeterforbenchmarkingJavaclasses?【发布时间】:2018-06-0523:13:18【问题描述】:如果我想对我的Java类中的方法进行基准测试,哪一个是更好的选择?两者之间的优缺点是什么... 查看详情

Laravel 4 对我的查询进行基准测试

】Laravel4对我的查询进行基准测试【英文标题】:Laravel4benchmarkmyqueries【发布时间】:2013-12-2901:52:53【问题描述】:Laravel4似乎不再支持Profiler。了解函数上的所有查询执行多长时间的最佳方法是什么?我想比较相同功能的2个不同... 查看详情

在 JMH 中对具有不同值的循环进行微基准测试

】在JMH中对具有不同值的循环进行微基准测试【英文标题】:MicrobenchmarkingaloopwithdifferentvaluesinJMH【发布时间】:2015-03-1214:23:05【问题描述】:众所周知,在JMH基准测试中使用循环并不是一个好主意,因为它会被JIT编译器优化,... 查看详情

是否有适用于 Windows 平台的良好(免费)基准测试工具? [关闭]

】是否有适用于Windows平台的良好(免费)基准测试工具?[关闭]【英文标题】:Isthereagood(free)benchmarkingtoolforWindowsplatform?[closed]【发布时间】:2009-08-1019:02:04【问题描述】:有没有像SiegeforWindows这样好的性能测试工具?【问题讨... 查看详情

sysbench工具和mysql的基准测试(代码片段)

一、基准测试  1、什么是基准测试    数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。    基准测试与压力测试    基准测试可以理解为针对系统的一种压力测试。但基准测试... 查看详情

mysql基准测试与sysbench工具(代码片段)

一、基准测试简介 1、什么是基准测试数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试与压力测试基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简... 查看详情

数据库基准测试中应该避免的错误

基准测试可以说是唯一方便有效的、可以学习系统在给定工作负载下会发生什么的方法。可见基准测试的重要性,在设计基准测试前,我们要了解一下基准测试的常见错误,防止自己在测试中犯这些错误。数据库基准测试中常见... 查看详情

性能基准自动化测试

性能基准测试是一项系统性能测量工作,根据目前的项目实际,在这里做了一些新的定义。基准测试在项目中与一般性能测试工作的主要区别在于其更短的回归周期与直观的趋势分析,并同时为混合业务性能场景的脚本线程配比... 查看详情