业务/吞吐量与存量数据设计关系+压测常见解决方案

前言

1、性能测试中业务量、吞吐量和存量数据的设计关系

1)业务量

是不带时间单位。我们提到业务量的时候,一定会加一个时间单位。比如说,每天的业务量是 100 万笔,每年的业务量是 1 亿笔,等等。

2)吞吐量

是自带时间单位的。吞吐量是单位时间内处理的业务数量。

业务量和吞吐量的关系
那么问题来了,我们做性能测试的时候,用哪个词呢?业务量 or 吞吐量?
事实上,这两个词我们都用。因为他们的内涵不同。

业务部门的目标里,往往是一年业务量多少,一天业务量多少。而这些目标并不能勾勒出性能测试目标。因为性能测试要的是每秒的业务量有多少。

举个例子:

一天 24 万笔业务,并不代表一小时处理 1 万笔,也许这 24 万笔是一个小时里处理完的。

用户往往等个一两秒钟还是可以忍的,如果等 10 秒钟,恐怕是觉得系统已经挂了。因此,系统要及时处理业务请求 / 报文,不能产生严重堆积,我们最关注的是一秒钟处理多少业务。而不是一小时多少,或者一天多少。

这里有存在一个换算的过程。

业务的要求是 1 天处理 2000 万笔业务,那么吞吐量目标是多少呢?

这就要看系统的性能模型,一天当中哪个时段业务量大,这个时段的业务量占一天业务量的百分比是多少?然后一步一步的计算出峰值时期一秒钟的业务量,它,就是我们的吞吐量目标。

3)存量数据

有了吞吐量目标,但还不能立刻就动手做测试,这是因为,还有第三个概念,存量数据。

如果数据库是一个空库,或者数据库是个存有 2 亿条记录的库,那么 SQL 的增删改查的响应时间是完全不一样的。对应的业务响应时间也完全不一样。那么,我们数据库里面的存量数据应该设多少呢?

存量数据和业务量的关系

预计的存量数据,就要用到业务量这个概念。
毕竟,存量数据是以年、月、天为单位的,而不是以秒为单位的。

比如说,这个系统的存量数据是 3 年,或者 3 天,而不是 3 秒。

并且,计算一年的存量数据,肯定不是用峰值每秒的业务量 360024*365 来计算的。而是用到业务部门提到的业务量。

比如,今年业务量预计 100 亿笔,预计年增长率是 50% 。那么,如果要测试系统能否满足 3 年以后的需求,就要这么计算:假设系统存量数据保存 3 年,那么 3 年后的存量数据是( 100+1001.5+1001.5*1.5 )亿笔。

三年后的吞吐量这么来计算:
假设一天业务最大的那个小时,占全天业务量的 20% ,业务量最大的一秒占这个小时的 1/2000 。假设一天业务量是 A 笔。

今年的每秒吞吐量目标 B=A20%(1/2000) 。假设性能模型不变,三年后的每秒吞吐量目标 C=B1.51.5。

2、压力测试的几种常见的解决方案

并发性(压力测试)指的是多个用户试图同时访问相同数据的处理,问题的关键在于如何设计应用程序对并发性问题的处理方式,特别是当前很多系统都存在多用户对共享资源的访问,常见的解决方案如下:

1)保守方法

这种并发性模型在数据上加了锁,如一个用户在操作数据库的一条记录时,在允许编辑的环境中,系统就会拒绝来自其它用户读取数据的请求。

对于很可能出现一个以上用户同时编辑相同数据的情况时,最适合采用这种方式,虽然这种方式在实现上有一定的复杂度。

在此模式下测试并发性主要关心的是验证能否正确地取得、释放加在记录上的锁,并且正确处理应用程序中所有可能更新这条记录的部分。

锁的获得:
因为同一时刻只有一个用户能够进入一条数据记录或数据项的更新状态,所以关键是系统必须把锁正确地分配给第一个请求的用户。获得锁的操作应该是可操作的。

具体的做法是:
让两个用户试图同时进入编辑状态或者也可以使用大量的请求,对于后者我们可以使用一个脚本来产生多个同时的编辑数据请求,以此来验证只有一个请求获得成功。

锁的效用:
验证锁的有效性必须确保其它任何用户不能用任何方式修改这个数据(如修改和删除)。

具体的验证方法是:
让一个用户打开一条记录(进入编辑模式并且保持这个状态),同时其它用户在应用程序的所有地方试图编辑、删除等一切方法更新数据,系统应该拒绝所有其它用户更新数据的企图。

锁的释放:
必须验证:当编辑数据的用户释放了该条记录后,系统能够让其它用户编辑该条记录,另一个注意的方面是错误处理,也就是持有锁的用户用到错误的情况下(如客户端崩溃),系统应该完成什么样的操作,系统从释放锁的故障中重新恢复的能力要重点考虑。

2)开放方式

在此模式中,总是允许用户读取数据,甚至还可能允许更新数据,但当用户试图保存数据时,系统会自动检查自从这个用户检索数据以后是否有其它人更新过数据,如果数据发生了变化,那么更新就失败。

这种方法比保守模型允许更多的用户查看数据,所以它适用于不太可能出现多人同时修改同一数据的情况。

在此模式下,更新是唯一需要关注的要点,最佳的测试方法是综合手动和自动测试技术,在手动测试时,两个测试人员编辑数据,然后试图同时保存数据,一个用户更新的操作成功后,另一个用户得到的消息是内容是其它用户已经更新了数据,此时他只有重新装载数据并且重新完成修改操作。

在使用自动海量的测试方法时,同理,只有一个用户能更新记录,而其它用户都收到提示,因为其它用户已经更新了数据,所以他的操作无效。

3)无并发保护

是所有模式中最简单的一种,通俗的说即胜利属于最后一个用户,但当两个用户同时修改一条记录时,可能导致数据损坏。

在此模式下,无论更新请求的顺序如何,所有用户都该成功完成更新操作,特别需要关注的是数据的完整性和更新错误,如:当一个用户更新某记录的同时,它确被删除了。

处理并发测试时还要注意,当相同的数据可以通过不同的界面或者功能更新时,应该测试所有可能访问这条记录的功能。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 安装 java 环境

搭建java开发环境 java的产品叫JDK(java开发者工具包),必须安装JDK才能使用Java。 一、下载——java下载网址 二、安装 直接全部下一步就行,(安装路径可以更换一下)。 配置JAVA_HOME环境变量, 安装完成后…

【方法】如何隐藏和保护Excel表格中的敏感数据?

在工作中,很多人经常需要处理包含敏感信息的Excel表格。 为了确保这些数据的安全性,我们可以通过隐藏单元格、行和列,以及设置密码保护工作表的方法,来保护数据,下面一起来看看吧! 一、隐藏数据&#xff1…

【免费API推荐】:为您的项目提供高质量的数据和功能(7)

开发者必备的免费实用类的API是现代开发领域中不可或缺的工具。这些API提供了各种功能和服务,能够帮助开发者快速构建强大、高效的应用程序。无论是地理位置服务、人脸识别、支付接口还是社交媒体集成,这些免费API为开发者提供了丰富的功能和数据&#x…

Exposure X7 Mac软件下载-Exposure X7 Mac正式版下载【照片编辑软件】附加详细安装步骤

Exposure X7 Mac正式版是款专门为Mac平台的用户打造的图像编辑工具。Exposure X7 Mac最新版提供了强大的色彩编辑器、自动调整、批量处理、一键预设、遮罩工具、无损层、人像修饰等等功能。并且Exposure X7 Mac还还结合了专业级的照片调整,在配合庞大的华丽照片外观…

谷歌可穿戴设备与生成式AI模型PH-LLM:打造个性化健康监测与指导的新纪元

随着移动和可穿戴设备的普及,它们为个人健康监测提供了前所未有的机会,通过收集步数、心率变异性、睡眠持续时间等连续、精细和纵向数据,帮助用户实时跟踪自己的健康状况。这些数据不仅可以用于简单的监测,还可以结合生成式人工智…

大模型备案:规范管理,确保AI健康发展

随着人工智能技术的飞速发展,大型预训练模型(以下简称“大模型”)已经在自然语言处理、计算机视觉、语音识别等领域取得了显著成果。这些模型通过在海量数据上进行预训练,能够捕捉到丰富的特征信息,为各种下游任务提供…

语言大模型:开启自然语言处理的新篇章

随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著的成果。其中,语言大模型(Language Models)作为近年来崛起的一种新型神经网络模型,已经在文本生成、机器翻译、情感分析等多个NLP任…

NLP自然语言处理课程设计—基于实体识别的智能任务系统

NLP课程设计-基于实体识别的智能任务系统 前言一、数据获取可行性分析和需求分析1. 数据获取可行性分析2. 需求分析 二、程序主要NLP技术2.1 文本分类技术2.2 中文命名实体识别2.2.1 BiLSTM(双向长短期记忆网络)2.2.2 CRF(条件随机场&#xf…

计算机专业毕设-在线商城系统

1 项目介绍 在线商城系统,后端java语言,springboot,SSM框架。前端thymeleaf,前后端不分离。本项目已经隐去作者信息,所有代码文件均没有创建人和创建时间,可以放心使用。 系统用户分为两类,管理…

【毕业设计】Django 校园二手交易平台(有源码+mysql数据)

此项目有完整实现源码,有需要请联系博主 Django 校园二手交易平台开发项目 项目选择动机 本项目旨在开发一个基于Django的校园二手交易平台,为大学生提供一个安全便捷的二手物品买卖平台。该平台将提供用户注册和认证、物品发布和搜索、交易信息管理等…

嵌入式实训day6

1、 from machine import Pin from neopixel import NeoPixel import timeif __name__"__main__"#创建RBG灯带控制对象,包含5个像素(5个RGB LED)rgb_led NeoPixel(Pin(4,Pin.OUT),5)#定义RGB颜色RED(255,0,0)GREEN(0,2…

软件性能测试之负载测试、压力测试详情介绍

负载测试和压力测试是软件性能测试中的两个重要概念,它们在保证软件质量和性能方面起到至关重要的作用,本文将从多个角度详细介绍这两种测试类型。 一、软件负载测试   负载测试是在特定条件下对软件系统进行长时间运行和大数据量处理的测试&#xff…

绝地求生PUBG更新后掉帧更新后游戏里面不显示UI的解决办法

绝地求生大家一定不陌生吧,这款游戏在当年可是火遍大江南北的,这款游戏集生存、射击、竞技与一体,给我们带来了很好的游戏体验。最近游戏迎来了30.1版本的更新,游戏内更新了不少的内容,而且游戏与女团进行联名&#xf…

AI大模型落地应用场景:LLM训练性能基准测试

随着 ChatGPT 的现象级走红,引领了AI大模型时代的变革,从而导致 AI 算力日益紧缺。与此同时,中美贸易战以及美国对华进行AI芯片相关的制裁导致 AI 算力的国产化适配势在必行。之前也分享过一些国产 AI 芯片、使用国产 AI 框架 Mindformers 基…

同三维T80006EH单路高清HDMI编码器

同三维T80006EH单路高清HDMI编码器 1路HDMI输入,1路3.5音频输入和输出,支持高清1080P60,支持SD卡录制 支持可解1路网络音频流输出,双向互动 一、产品简介: T80006EH高清编码器(采集盒)是一款…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《03》

系列文章 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》 说明 在上篇 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》 开始移植适配 FreeRTOS,FreeRTOS 移植适配…

测试开发面经分享,面试七天速成 DAY 1

1. get、post、put、delete的区别 a. get请求: i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的,即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存,可以被收藏为书签。 iv. 对于敏感数据不…

C++ | Leetcode C++题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; class Solution { public:int gcd(int a, int b) {return b ? gcd(b, a % b) : a;}int maxPoints(vector<vector<int>>& points) {int n points.size();if (n < 2) {return n;}int ret 0;for (int i 0; i < n; i…

springboot、springcloud、springcloudalibaba版本组件之间对应关系

参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E#%E6%AF%95%E4%B8%9A%E7%89%88%E6%9C%AC%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8 毕业版本依赖关系(推荐使用) 由于 Spring Boot 3.0&…

UART基本定义、三种编程方式、freertos内怎么用、怎么封装

文章目录 串口基本概念串口的三种编程方式uart编程查询方式不常用、其他两个方式用的多中断方式&#xff1a;代码原理 DMA方式&#xff1a;配置DMA原理代码 效率最高的UART编程方式&#xff1a;是什么&#xff1f;操作 在freertos里面调用uart应该怎么做&#xff1f;代码 面向对…