性能测试简介
什么是性能测试
思考到有些同学没有接触过性能测试,这里还是简略介绍下。性能测试是通过特定的形式对被测系统依照肯定策略施加压力,获取该零碎的响应工夫、吞吐量等性能指标,来检测零碎上线后是否满足用户需要的过程。通过性能测试的定义不难看出性能的外围指标就是咱们常常挂在嘴边的 QPS 和 RT。
为什么要做性能测试
简略理解性能测试之后,有些小伙伴必定会问为什么要做性能测试。对于这个问题,我打算举两个生存中的例子来阐明下。
• 12306——每年春运都是一次大考
邻近春节,打工人都要抢回乡的火车票,2019 年 12 月 23 日,有大量网友反映,12306 网站忽然崩了,在购买车票的时候呈现无奈登录、无奈购票、车次加载失败、页面卡住等状况,疑似因拜访流量过大而呈现服务器解体。
• 微博——顶流明星的瓜不好吃
2021 年 4 月 23 日,知名演员赵丽颖与冯绍峰离婚的音讯忽然颁布,这一音讯迅速登上微博热搜。该音讯颁布后,有网友反映微博客户端呈现了短暂宕机、网络出错的景象。
易盾性能测试痛点
压测执行过程繁琐
压测执行在易盾性能测试的整个流程中比重最大,易盾线上压测个别采纳梯度压测。什么是梯度压测,简略的说就是把压测的大指标拆分成多个小指标,从小的指标做起,直到最初实现最终目标。假如易盾文本检测压测的目标值是 QPS 达到 200,那咱们通常从压力值 20 开始,而后 40、60 逐步加大压力,直到最初实现 200 的目标值。
具体的执行步骤是怎么样的呢,咱们先用压力值 20,在 NPT 压测平台创立一个压测工作并执行,个别一轮压测执行 10 分钟。如果达不到 20 的目标值,压测停止定位性能问题;如果达到 20 的目标值,创立下一个目标值 40 的压测工作,继续执行。反复之前的判断逻辑,直到压测停止或者实现压测指标。
可能有人会问,你这不是自找麻烦,间接用 200 去压测看看行不行不就完事了。线上压测,保障线上平安始终是第一位的,须要慎之又慎,如果因为压测把线上压挂了会重大影响客户体验,甚至产生资损。
监控依赖人
在性能测试过程中,监控 & 剖析属于一个难点,到底难在哪里?这里须要人的教训,须要对被测系统比拟相熟。只有在相熟的前提下,你才晓得须要看哪些监控指标,这些指标是不是失常,进而给出判断的论断。
目前线上压测会安顿值班同学察看监控,这种依赖人的监控很难做到实时,因为人的精力有限,基本没法兼顾所有监控。还有就是很少有同学从头到尾盯着监控的,大家都是有报警的时候去关注下。这样存在一些危险,可能有些报警没有配置、或者配置批改了没有及时还原,导致线上有问题了,没有报警收回来。
在压测过程中,咱们常常会遇到加大并发 QPS 上不去的状况,这时候个别就呈现性能瓶颈了,然而这个瓶颈在哪里就须要依据监控数据去定位和剖析了。咱们在定位的时候无非也是应用教训的三板斧,CPU/ 内存 / 磁盘 / 网卡等系统资源是否失常,申请量和 RT 是否正当,有没有呈现超时等异样谬误。
压测数据未隔离
因为压测流量和实在流量没有做数据隔离,导致线上无奈进行全链路压测,有些业务场景笼罩不到。比方易盾存储场景,一旦数据落库存在性能问题,kafka 的数据就会积压。此时 kafka 的 topic 中既有实在流量又有压测流量的数据,就算立马进行压测,也会影响线上实在流量数据的生产速度,影响用户体验。因而,平时线上压测都会敞开数据存储。
压测资损
易盾有一些内部供应商,之前压测过程中,因为计划评估不到位脱漏了供应商这个环节,导致线上压测产生了一些额定的费用,这种压测资损也是不能容忍的。
易盾性能测试自动化实际
压测一键执行
创立压测工作的时候,主动创立多个梯度压测子工作。还是用易盾文本检测来举例,咱们创立一个 QPS 目标值 200 的压测工作,这个压测工作被拆分成了 5 个梯度,每个梯度的压测目标值从小到大别离是 40,80,120,160 和 200。这 5 个梯度对应 NPT 平台上 5 个压测目标值别离是 40,80,120,160 和 200 压测子工作。
点击启动压测工作后,零碎会程序执行 NPT 平台上 QPS 目标值 40,80,120,160 和 200 的压测子工作。压测子工作达到目标值,会主动执行下一个子工作,如果达不到目标值,就会主动停止压测工作。
对于监控 & 剖析咱们的思路很明确就是量化。
首先是监控,咱们当时定义好哪些利用须要纳入监控,这些利用各自须要监控哪些指标。这个两个因素搞清楚了,剩下的就是通过哨兵提供的 API 获取监控数据,写入咱们本人的数据库。
对于内部供应商这种非凡业务场景的监控,咱们在易盾监控大盘纳入供应商申请量的指标。当供应商申请量同比或者环比出现异常时,须要及时进行压测。
全链路压测组件接入
存储场景压测笼罩不到的问题如何解决,首先咱们的被测系统接入了全链路压测组件,实现了实在流量和压测流量的数据隔离。
其次,影子队列生产提供开关,kafka 数据积压时,敞开开关,保障只有实在流量数据的生产。
易盾性能测试自动化平台
对于上述性能测试中的改良点,咱们构建了本人的性能测试自动化平台来承载。
整体架构
落地状况
易盾文本检测压测目前曾经实现小流量的试跑,和之前的惯例压测比,具备显著的劣势。
将来布局和瞻望
可视化
压测过程中提供数据和监控大盘,有助于全局理解被测系统以后的状态。
智能化
监控数据目前比拟粗犷,P0 的利用全副落库。后续能够依据压测场景 - 链路拓扑,只收集压测流量通过的利用。
监控数据合理性的判断目前都是一些固定阈值,后续能够把历史数据纳入比拟,造成置信区间的算法。