压测相关名词解释
名词
解释
QPS
每秒内的请求数
TPS
每秒内的事务数
客户端
发起请求的一方
服务端
响应请求的一方
施压机
模拟客户端的机器
影子表
全链路压测过程中,用来与真实数据隔离的测试表,其表结构和正常表一样,但是表名必须加上前缀_shadow_用于标识该表是”影子表”。
压测时的数据隔离策略:https://km.sankuai.com/page/297522580 (影子表,及偏移规则)
数据隔离策略:
物理隔离:通过判断是否时压测流量,决定将数据写入真实表(真实流量时),还是影子表(为压测流量时)
逻辑隔离:通过数据偏移,比如落地压测用户数据时,将压测用户Id加一个比较大的偏移量,以保证压测数据和真实数据有不同的跨度区间。
一、性能测试
性能测试的前提
系统基础功能验证:只有在系统基础功能验证完成、系统趋于稳定的情况下,才会进行性能测试,否则进行性能测试是没有意义的。
1.测试计划阶段
测试计划阶段最重要的是分析用户场景,确定系统性能目标。
(1)确定测试领域
根据对项目背景,业务的了解,确定本次性能测试要解决的问题点;是测试系统能否满足实际运行时的需要,还是目前的系统在哪些方面制约系统性能的表现,或者,哪些系统因素导致系统无法跟上业务发展?确定测试领域,然后具体问题具体分析。
(2)用户场景剖析及测试数据剖析
根据对系统业务、用户活跃时间、访问频率、场景交互等各方面的分析,整理一个业务场景表。方便后续的性能测试环境的配置。然后结合业务的场景,来决定测试过程中的数据需求,便于测试人员提前解决数据需求问题。
(3)确定性能目标
前面已经确定了本次性能测试的应用领域,接下来就是针对具体的领域关注点,确定性能目标(指标);其中需要和其他业务部门进行沟通协商,以及结合当前系统的响应时间等数据,确定最终我们需要达到的响应时间和系统资源使用率等目标;
例如:①登录请求到登录成功的页面响应时间不能超过2秒;②报表审核提交的页面响应时间不能超过5秒;③文件的上传、下载页面响应时间不超过8秒;
(4)制定测试计划的实施时间
性能测试都是在真实的线上进行操作,所以选取的测试时间要尽可能少的受到线上流量的影响,尽可能提高测试结果的精准性。
2.测试准备阶段
(1)数据的准备
(2)场景的配置(quake)
3.测试执行与管理
在这个阶段,只需要按照之前已经设计好的业务场景、环境,部署环境,测试过程中监控资源的消耗、并记录执行结果即可。
4.测试分析
根据我们之前记录得到的测试结果(图表、曲线等),经过计算,与预定的性能指标进行对比,确定是否达到了我们需要的结果;如未达到,查看具体的瓶颈点,然后根据瓶颈点的具体数据,进行具体情况具体分析(影响性能的因素很多,这一点,可以根据经验和数据表现来判断分析),确定瓶颈是再数据库服务器、应用服务器抑或其他方面,然后针对性的进行优化等操作。
参考文章:https://www.cnblogs.com/imyalost/p/6854479.html
问题:
为什么要进行性能测试?
1.获取正常请求流量下,系统的各个性能指标:
这是最常见的性能测试目的,常规性能测试通常都有这个需求。在正常压力(无压力)流量下对系统进行性能测试,建立一个可度量的参考标准,为其他测试场景或者调优过程提供对比参考。
常用的性能测试指标包括:
服务响应相关的:平均响应时间,响应时间分布情况,失败率等
资源使用相关:CPU使用,内存,磁盘IO,网络IO等
2.获取系统能够承载的极限容量,以及获得系统的性能瓶颈
系统容量评估因为比较难自动化,所以通常这类需求频率会低一些,可能会周期性评估。通过“拐点法”进行性能测试,逐步增大系统的压力,直到性能指标不可接受或者出现了明显的拐点,从而找到系统的瓶颈点。需要注意的是,压测时的极限并发或者极限每秒处理请求数,一定是以在安全运维的性能标准下为前提。
3.测试系统稳定性
系统稳定性压测是要知道在各种情况下系统能否稳定运行。造成系统不稳定的情况有:
极限的每秒请求数
极限的并发数或连接数
突发流量高峰
长时间的压力流量
热点数据请求
差网络环境
下游模块慢返回、超时或故障假死等
4.性能测试辅助系统参数调整
需要配合研发,测试在不同系统参数或者部署方案下,系统性能情况的对比。
5.系统性能回归:
在版本升级时,通常需要对比新老版本的性能情况。
什么时候需要开展性能测试?
1.上线新模块/功能,且模块/功能对系统影正常运作影响大时,或者是重大功能的上线;
2.有线上促销活动的需求时:促销活动通常会导致系统流量翻好几十倍,通过性能测试可以得知系统是否足够支撑瞬间峰值流量,并为系统扩容提供依据;
3.线上服务需要扩容时;
4.性能调优后:评估性能调优的效果,进而决定是否还需要重新进行性能优化。
二、故障测试
问题:
1.什么是故障?系统不能按照预期提供服务的一种状态。
2.什么情况下要进行故障测试?
对故障的兜底方案的验证。故障场景下,系统处理方案的功能验证。(重在对已知事物的验证)
故障场景下系统处理机制是否存在欠缺(对未知的验证)
3.如何进行故障测试?