压测方案设计..

news2024/11/18 22:23:30

01 为什么要做压测

1、什么是压力测试?

不断向被测对象施加压力,测试系统在压力情况下的表现。

2、压力测试的目的是什么?

测试得出系统的极限性能指标,从而给出合理的承诺值或者容量告警;

找出系统的性能瓶颈,对性能做出优化;

测试系统在高负载情况下的稳定性;

验证系统在过载情况下的限流和降级预案;

3、不做压测会产生什么问题?

线上容量评估不准确,流量增加,服务被打挂

升级前没做压测,升级后性能出现劣化,可用性降低;

无法给出准确的承诺值,导致集群水位过低,资源被浪费或者集群水位过高,系统存在稳定性bug;

02 压测方案设计

压测环境可以简单的分为模块级压测和链路级压测,它们的主要特点和区别如下:

1、模块级压测

应用场景:比较变更前后的性能,看性能是否有劣化;定位模块本身的性能瓶颈。

环境要求:不要求与线上环境完全一致,只需要保证变更前后两次的压测在同一个环境即可。

业界方案:维护一套固定的线下环境,进行周期性、常态的压测。

2、链路级压测

应用场景:做整条链路的容量评估;评估系统整体可用性。

环境要求:要求尽量与线上环境保持一致,这样的压测数据才是有借鉴意义的。

业界方案:使用线上环境,根据不同的隔离方式使用不同的方案:

不做流量隔离,压测流量和业务流量共存,由于没有做隔离,只能在低峰期压测

逻辑隔离,通过流量调度或者分流方式,将压测流量打到一个压测环境去。压测流量和业务流量在同一个机房跑,但并不会打到同一个业务实例。

物理隔离,利用异地多活的特性,将业务流量从一个机房切出,留下一个空机房做压测。

第一种方案是最接近线上真实环境的,但是存在着一些安全风险;后两种方案安全性高很多,但是没有完全利用整个线上架构,存在一定程度上的失真。

3、线上压测怎么保证安全性?

流量隔离,如上述方法做流量隔离。但是只做流量隔离是不够的,即使是物理隔离,也会对线上数据进行修改,所以还要做数据隔离。

压测流量经过中间件时进行打标,做压测标记,比如http流量可以配置一个特殊的header。

在业务集群对流量标记进行数据隔离,比如对压测流量产生的日志写到另一个路径(有的系统会对日志做一些分析统计);存储/缓存方面将压测流量产生的数据存储到影子表,正常流量访问正常表;

消息屏蔽,如果消息队列无法识别出压测消息,则会造成线上消息堆积,影响线上流量,所以需要对压测消息进行屏蔽。

对不支持压测的第三方服务进行mock。

03 压测模型

压测要覆盖哪些场景?压测请求和数据如何构造?如何模拟业务流量形态?以上三个问题分别对应压测模型中的业务模型、数据模型和流量模型。

1、业务模型

压测需要覆盖哪些业务场景?

需要梳理出核心业务场景,必须包含核心接口和大流量接口,大流量接口可能是一些不对用户暴露的,在内部频繁使用的接口。

如何模拟业务场景?

需要理清楚接口之间的关系。对待一些简单查询的接口,没有前后依赖关系,只需要关注流量配比就行了;对待一些复杂业务场景,则需要还原业务处理流程,理清楚接口串联逻辑。可以通过场景录制和场景回放来梳理。

2、数据模型

基于线上数据进行改造

请求部分可以直接把线上流量录制下来,对请求加压测标记,并对关键id做便宜;铺底数据可以直接将线上存储数据拷贝到另一个压测表。

基于模型构造

通过对线上日志和请求进行分析,梳理出对性能有影响的数据特征和请求特征,根据这些特征构造出数据,其中铺底数据需要通过真实的业务应用来构建。

基于线上数据改造的方式

方案很简单,数据构造快,但是强以来系统现有数据,,无法应对新增场景,模型调整不灵活,适用于老服务的线上压测;

基于模型构造

不强依赖线上数据,可以人工构造新增场景,维护成本低,只需要调接口就行了,不需要感知线上存储表的变化,模型可以灵活调整,但是方案比较复杂,数据构造慢,使用场景比较广泛,线上线下新老服务皆可。

压测模型的特例:流量录制,原样回放

特点:不用模拟业务场景、不需要构造数据;只能录制到线上已有流量的服务和接口;只能在线上环境回放,只能回放只读接口;只适用于老服务读接口的压测;

流量录制可以把低峰期、平峰期、高峰期的流量都录制下来,以免出现漏测的情况。

3、流量模型:模拟业务流量形态

线上有流量

观察线上流量形态。

网上绝大部分开源的监控打点都是5s以上的,最理想的情况可以达到ms级别的,可以通过分析日志来进行实现。

线上没有流量

分析用户行为或者调用方行为。

常见的业务流量形态可以分为两种,一种是连续递增型,还有一种是脉冲型(比如抢红包)

4、流量预估

流量形态是模拟线上流量曲线,此外我们还需要进行流量预估,计算出压测的量级。

已双十一活动为例,我们可以把接口分为三类:

背景接口

流量不随活动而变化,压测是仅作为背景流量,取近期峰值即可;

普通关注接口

流量随活动而变化,用通用模型计算

重宝接口

比如交易接口,取历史大促的峰值

04 压测结果分析

1、观测指标

系统指标

qps/tps,最大tps一定是稳定的,如果存在抖动,那系统已经存在问题。

响应时间,从客户端发起请求到收到请求的全过程时间

错误率,根据sla来定

资源指标

cpu利用率,一般要低于80%,avg低于60%比较保险

内存使用率,低于80%比较保险,否则可能陷入GC死亡循环

磁盘吞吐/网络吞吐

特性指标,根据具体业务来定

连接池使用率

消息队列堆积

pps

2、仿真度分析:压测结果是否有价值?

比较同等水位下压测场景和线上真实场景服务表现相似度,可进行仿真度分析的指标:

  • 流量,流量比例,接口覆盖

  • 链路覆盖

  • 机器资源,cpu利用率、内存利用率

  • 可用性指标,时延,错误率

  • 业务指标

把这些指标组装成一个向量,和线上指标做比较,二者差异,差异越小,仿真度就越高。

05 压测发展趋势

现有痛点:

  • 需要随时观察监控,需要oncall待命

  • 安全性不足

  • 方案复杂,代价大

未来发展趋势:

  • 智能化

  • 无人值守

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

清华提出ViLa,揭秘 GPT-4V 在机器人视觉规划中的潜力

人类在面对简洁的语言指令时,可以根据上下文进行一连串的操作。对于“拿一罐可乐”的指令,若可乐近在眼前,下意识的反应会是迅速去拿;而当没看到可乐时,人们会主动去冰箱或储物柜中寻找。这种自适应的能力源于对场景的…

51单片机简易出租车计费系统仿真设计

51单片机简易出租车计费系统仿真设计( proteus仿真程序报告讲解视频) 仿真图proteus 8.9及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0036 1.主要功能: 出租车计费系统设计内容: 1、…

JDK17 SpringBoot3 整合常见依赖

JDK版本:17 SpringBoot 整合Mybatis Plus 、Redis等 依赖文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xs…

数据链路程协议

目录 数据链路层 介绍 以太网帧格式 目的地址 源地址 类型 CRC 数据 如何封装和解包 如何向上交付 MAC地址与IP地址 MTU 局域网数据转发 局域网数据碰撞 数据包转发 ARP协议 构建ARP请求 ARP请求的处理 ARP响应的构建 ARP欺骗 DNS域名解析 域名解析是什么…

标准IO与文件IO

标准IO通过缓冲机制减少系统调用&#xff0c;实现更高的效率 全缓冲&#xff1a;当流的缓冲区无数据或无空间时才执行实际IO操作 行缓冲&#xff1a;当在输入和输出中遇到换行符&#xff08;\n&#xff09;时&#xff0c;进行IO操作 当流和一个终端关联时&#xff0c;典型的行缓…

【06】GeoScene海图或者电子航道图数据自动化质检

1 S-58错误管理器验证产品 在你编辑数据时进行快速的质量检查可以使用S-58错误管理器&#xff0c;S-58错误管理器工具允许您使用IHO S-58验证标准来验证海事数据库中的产品。你可以验证整个产品&#xff0c;或验证产品的当前范围。 1.1验证产品 使用S-58错误管理器工具完成以…

服务器解析漏洞是什么?攻击检测及修复

服务器解析漏洞&#xff08;Server-side Include Vulnerability&#xff0c;SSI漏洞&#xff09;是一种安全漏洞&#xff0c;通常出现在支持服务器端包含&#xff08;SSI&#xff09;功能的Web服务器上。SSI是一种在Web页面中嵌入动态内容的技术&#xff0c;允许开发人员将外部…

Java 数据结构篇-实现二叉搜索树的核心方法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 二叉搜索树的概述 2.0 二叉搜索树的成员变量及其构造方法 3.0 实现二叉树的核心接口 3.1 实现二叉搜索树 - 获取值 get(int key) 3.2 实现二叉搜索树 - 获取最小…

监控k8s controller和scheduler,创建serviceMonitor以及Rules

目录 一、修改kube-controller和kube-schduler的yaml文件 二、创建service、endpoint、serviceMonitor 三、Prometheus验证 四、创建PrometheusRule资源 五、Prometheus验证 直接上干货 一、修改kube-controller和kube-schduler的yaml文件 注意&#xff1a;修改时要一个节…

neo4j安装报错:neo4j.bat : 无法将“neo4j.bat”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

neo4j安装报错&#xff1a; neo4j.bat : 无法将“neo4j.bat”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确 保路径正确&#xff0c;然后再试一次。 解决办法&#xff1a; 在环境变量中的&#xff0c;用户…

手把手教你搭建谷歌Gemini

前言 谷歌上周推出了一款名为 Gemini 的多模态大模型&#xff0c;并且现在发布了免费开放的 Gemini API 供开发者使用。根据谷歌提供的定价信息&#xff0c;Gemini 有两种收费方式。免费版本每分钟可以进行 60 次请求&#xff0c;足够满足个人用户的需求。收费版本目前暂不可用…

你了解Redis中的跳跃表吗?

跳跃表的基本内容&#xff1a; 对于一个有序序列&#xff0c;链表相对于数组来说&#xff0c;删除和插入的效率要快很多&#xff0c;只需要改变指针的指向&#xff0c;但是在查找的时候&#xff0c;数组就要更占优势一些&#xff0c;可以随机访问&#xff0c;然而链表需要从头…

连接SSH报错 / 连接容器SSH

连接SSH报错 / 连接容器SSH 前言被控端主控端连接失败 前言 本文介绍如何通过SSH方式远程连接Linux被控端&#xff0c;并介绍如何解决连接失败问题。 此方法同样适用于SSH连接Docker容器。 被控端 被控端一般为Linux&#xff0c;默认已安装ssh&#xff0c;但需要手动安装ope…

C++ OJ题测试—排序算法效率

目录 OJ链接 一、直接插入排序 二、希尔排序 三、直接选择排序 常规&#xff1a; 第二种&#xff1a; 四、 堆排序 五、冒泡排序 六、快速排序 常规&#xff1a; 三路划分优化效率 七、归并排序 八、计数排序 OJ链接 ​ 一、直接插入排序 class Solution { pub…

Gateway No servers available for service

springCloud集成网关测试报错找不到服务&#xff0c;如下 造成这种错误可能是下面两种原因 1、nacos注册的服务不在一个命名空间内&#xff0c;导致找不到服务503 spring cloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848file-extensio…

探索Qt 6.3:了解基本知识点和新特性

学习目标&#xff1a; 理解Qt6.3的基本概念和框架&#xff1a;解释Qt是什么&#xff0c;它的核心思想和设计原则。学会安装和配置Qt6.3开发环境&#xff1a;提供详细的步骤&#xff0c;让读者能够顺利安装和配置Qt6.3的开发环境。掌握Qt6.3的基本编程技巧&#xff1a;介绍Qt6.…

欧洲版OpenAI疑似将在24年发布并开源GPT-4级别模型!

大家好&#xff0c;我是二狗。 今天在推特上看到一条振奋人心的消息&#xff1a; “ 欧洲版OpenAI、法国初创公司 Mistral 首席执行官 Arthur Mensch 在法国国家广播电台宣布&#xff0c;Mistral 将在 2024 年发布开源 GPT-4 级别模型。” 这位老哥接着表示甚至可能是免费的&a…

C++ STL——栈和队列(stack queue)

本节目标 1.stack的介绍和使用及其模拟实现 2.queue的介绍和使用及其模拟实现 3.priority_queue的介绍和使用及其模拟实现 4.容器适配器 1.stack的介绍和使用及其模拟实现 1.1 stack的介绍 stack的文档介绍 根据stack的文档介绍可以知道&#xff0c;stack是一种容器适配器…

原生微信小程序-使用 阿里字体图标 详解

步骤一 1、打开阿里巴巴矢量图标库 网址&#xff1a;iconfont-阿里巴巴矢量图标库 2、搜索字体图标&#xff0c;鼠标悬浮点击添加入库 3、按如下步骤添加到自己的项目 步骤二 进入微信开发者工具 1、创建 fonts文件夹 > iconfont.wxss 文件&#xff0c;将刚才的代码复制…

结果实例: 一个cpu的parsec结果

简介 限于篇幅限制&#xff0c;很多教程和论文只展示部分结果。我们这里展示非常细节的结果&#xff0c;包括输出的许多命令行结果。 运行命令行 的shell窗口 ./build/X86/gem5.opt -d m5out/onlyoneCPUkvmCheckPointDifferRCS20231218restore \configs/deprecated/example/…