聊聊基准测试的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页面、仪表盘、折线图、树状图等形式,进行不同角度的系统基准表现展示,具体如何设计,可以进行需求调研,然后针对性的设计。

原文地址:https://www.cnblogs.com/imyalost/p/9695023.html

时间: 2024-10-06 13:03:31

聊聊基准测试的MVP方案的相关文章

《性能测试二三谈》系列

从16年4月份开始学习性能测试到现在全职做性能测试工作,差不多两年半时间.期间断断续续写了一些性能测试方法和负载工具以及监控工具相关的博客. 最近抽时间重新翻看了之前写的博客,发现有些内容缺乏思考和精准度.也为了方便自己随时查阅相关的知识,将性能测试相关的知识.工具.框架相关的内容整理出来,也算是一个Index吧. 主要会从基础篇.方法篇.分析篇.监控篇.工具篇这几部分来统计,具体见下文吧,会不断更新的... 基础篇 我第一次真正意义上接触性能测试,应该是从段念老师的<软件性能测试过程详解与案例

浅谈Android MVP 设计模式

为什么需要MVP 关于什么是MVP,以及MVC.MVP.MVVM有什么区别,这类问题网上已经有很多的讲解,你可以自行搜索或看看文末的参考文章,这里就只讲讲为什么需要MVP. 在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应.但是,随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致很容易变得庞大而臃肿. 越小的类,bug越不容易出现,越容易调试

Android应用中MVP开发模式

所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事件交由presenter处理.注意. View层不存储数据,不与Model层交互. presenter - 逻辑处理层 presenter 层主要负责: 对UI的各种业务事件进行相应处理.也许是与Model层交互,也许自己进行一些计算,也许控制后台Task,Servic 对各种订阅事件进行响应,修改

Android应用中MVP

所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事件交由presenter处理.注意. View层不存储数据,不与Model层交互. presenter - 逻辑处理层 presenter 层主要负责: 对UI的各种业务事件进行相应处理.也许是与Model层交互,也许自己进行一些计算,也许控制后台Task,Servic 对各种订阅事件进行响应,修改

[转] 浅谈Microsoft MVP

微软MVP,这个自1993 年开始在社群上出现的计划(MVP Award Program),目前在全球已经累积超过5,000 人,其中在台湾已经有一百多人了,包括我在内,这个计画现在已经成为以微软技术为主的技术社群(technology community) 中,最高等级的奖励计画,虽然它是由微软主办,但是它是以社群为主的一个计画,对于在社群中活跃??但可能不知名的技术高手或是专家们,是一个很具吸引力的计画,因为它除了提供实质性,非金钱价值的奖励以外,还提供了出名的机会(出席研讨会,主持场次,与

大厂们的 redis 集群方案

redis 集群方案主要有两类,一是使用类 codis 的架构,按组划分,实例之间互相独立: 另一套是基于官方的 redis cluster 的方案:下面分别聊聊这两种方案: 类 codis 架构 这套架构的特点: 分片算法:基于 slot hash桶: 分片实例之间相互独立,每组 一个master 实例和多个slave: 路由信息存放到第三方存储组件,如 zookeeper 或etcd 旁路组件探活 使用这套方案的公司: 阿里云: ApsaraCache, RedisLabs.京东.百度等 c

记crond导致备份失败的排查过程

今天上班的路上收到一条短信,显示线上所有实例备份都失败了.备份失败是大事,于是到公司的第一件事儿就是排查备份失败的原因. 这两天迁移了数据库管理平台,当然涉及到数据库备份功能,备份失败肯定和平台迁移有一定关系,我们先聊聊线上备份方案: 目前线上的备份方案是: 1.有一个前端页面可以配置备份任务 2.备份任务配置好了,会自动刷新到系统的crontab定时通过ansible远程执行. 排查过程: 1.查看备份报告,显示所有的备份文件大小都是0,初步估计是备份失败了而不是元数据没有更新的问题. 2.去

聊聊效果优化跟踪的埋点方案

一 场景描述 做电商的同学们是不是一直在为GMV上不去而头疼不已,设计了好多的展示页面,引流点,希望能够为最后的下单付款添砖加瓦. 但是展示位做多了,分析展示位带来的最终效果似乎会有些复杂,这么多的展示位,我们如何能够很好的跟踪其对最终转化行为的贡献程度呢?没关系,我们设计一套简单易行的埋点方案就好啦- 二 关键词 2.1 展示位 用户能够接触到我们网站的各个花里胡哨的页面里,因为展示的目的,组织逻辑不同,会有不同的小豆腐块,像报纸的专栏一样排的密密麻麻的.这一个小豆腐块,就是一个展示位. 每一

面试官:聊聊你对分布式锁技术方案的理解

前言 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题. 第一步,自身的业务场景: 在我日常做的项目中,目前涉及了以下这些业务场景: 场景一:比如分配任务场景.在这个场景中,由于是公司的业务后台系统,主要是用于审核人员的审核工作,并发量并不是很高,而且任务的分配规则设计成了通过审核人员每次主动的请求拉取,然后服务端从任务池中随机的选取任务进行分配.这个场景看到这里你会觉得比较单一,但是实际的分配过程中,由于涉及到了按