聊聊基准测试的MVP方案
上篇博客介绍了基准测试的一些思路和方法策略,这篇博客,聊聊基准测试的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页面、仪表盘、折线图、树状图等形式,进行不同角度的系统基准表现展示,具体如何设计,可以进行需求调研,然后针对性的设计。
聊聊基准测试的MVP方案的更多相关文章
- Android应用中MVP开发模式
所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事 ...
- [转] 浅谈Microsoft MVP
微软MVP,这个自1993 年开始在社群上出现的计划(MVP Award Program),目前在全球已经累积超过5,000 人,其中在台湾已经有一百多人了,包括我在内,这个计画现在已经成为以微软技术 ...
- Android应用中MVP最佳实践
转自:http://www.jianshu.com/p/ed2aa9546c2c 文/Jude95(简书作者)原文链接:http://www.jianshu.com/p/ed2aa9546c2c著作权 ...
- 大厂们的 redis 集群方案
redis 集群方案主要有两类,一是使用类 codis 的架构,按组划分,实例之间互相独立: 另一套是基于官方的 redis cluster 的方案:下面分别聊聊这两种方案: 类 codis 架构 这 ...
- 安居客Android项目架构演进
入职安居客三年从工程师到Team Leader,见证了Android团队一路走来的发展历程.因此有心将这些记录下来与大家分享,也算是对自己三年来一部分工作的总结.希望对大家有所帮助,更希望能得到大家宝 ...
- RabbitMQ使用时注意的一些问题
一.前言 上篇RabbitMQ的博文居然上了推荐,效果很不错,接下来我们就来聊聊我们RabbitMQ的方案,先谈方案,代码等等后面补上,感觉不错给我点点关注,点点
- 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- 两个开源的 Spring Boot + Vue 前后端分离项目
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化
前文目录链接参考: 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化 https://www.cnblogs.com/yizhiamumu/p/16694126.html 消息队列 ...
随机推荐
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(3)- Serial Downloader模式(sdphost/MfgTool)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 Boot配置(BOOT Pin, eFUSE) ...
- Jenkins结合.net平台综合应用之使用FileZilla搭建ftp服务器
上一节我们讲解了如何编译web项目,web项生成以后我们是手动复制到iis目录下的,这显然不符合devops初衷,这里我们讲解如何利用ftp协议把文件传到远程服务器的iis目录下. 这一讲分两部分一部 ...
- jquery父元素和子元素点击事件传递问题_不可把父元素的事件传递给子元素_事件无限循环传递
前述:jquery中: 当一个元素的点击事件被触发时,会自动将该事件向父级元素逐级专递. 但是实际场景当中,我们可能会遇到需要在父级元素中定义点击事件,来触发特定子元素的点击事件,我就遇到了这么一个问 ...
- [Python] Python 学习 - 可视化数据操作(一)
Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文 ...
- C# ListBox实现显示插入最新的数据的方法
在我们使用ListBox控件时,如果我们在里面不断的添加一条条数据,但是在我们添加的数据过多超过了ListBox显示的窗口时(此时会产生滑动条), 发现我们无法看到最新添加的数据.实现倒序显示此处有两 ...
- 字符串hash入门
简单介绍一下字符串hash 相信大家对于hash都不陌生 翻译过来就是搞砸,乱搞的意思嘛 hash算法广泛应用于计算机的各类领域,像什么md5,文件效验,磁力链接 等等都会用到hash算法 在信息学奥 ...
- JS判断类型
JS中的typeof方法可以查看数据的类型,如下: console.log(typeof 2); // number console.log(typeof "2"); // str ...
- MockJS和Easy Mock使用
之前做mock数据一直用的json-server,今天同事给我推荐了很好用的工具:Easy Mock,我看完之后是下图的状态 很得劲啊,感觉人生已经达到了高潮 既能伪造接口,又能根据既定的规则生成对应 ...
- grid++报表使用时注意事项
#开始使用:Grid++Report 可以在 Visual C#.Net 与 Visual Basic.Net 下的 WinForm 项目中使用.在项目中使用 Grid++Report 之前,首先必须 ...
- (办公)json报错的解决问题的小经验.
经验:一半,一半的查,看那一段报错,当确定这一步的时候,用最笨的方法,用眼去看,出哪里的错误. 看有没有替换特殊字符的方法,去整理.