大促常态化的当下,平台总是会提前做各种排查测试,严阵以待,生怕出现高并发带来的,但往往还是防不胜防。事实上,在移动互联网盛行的当下,超高并发压力并不只存在于电商领域,在线教育、在线办公、社交娱乐等领域同样深受其扰。在超高并发量下,IT系统如何才能挺住不崩?有没有办法可以提前预测到,并加筑好“防御堡垒”?来看看解决方案吧。
为什么一定要做性能测试
“性能测试的重要性不言而喻,如果性能测试做的不好将会带来灾难性的问题。”
众所周知,性能异常包括5种典型场景:
- 瞬时的用户访问量激增;
- 服务端的流量满载;
- 系统资源长期居高不下被占用;
- 服务访问的过程中超出了最大的上限,服务过窄;
- 网站虽然可以访问,但是延时极具升高。
第一种情况往往会出现在抢购场景中,抢购前五分钟大量流量的汇聚往往会导致服务端前期的带宽不够用,用户在抢票的过程中体验会非常差,进而影响到平台的营业额。
第二种服务器的CPU满载的情况也很常见,一般来说,业务复杂的系统单机监控的性能消耗基本达到了20%左右,单机的剩余算率一般只有70%到80%,复杂的场景下频繁的访问可能会使CPU瞬时高达90%以上,基于此,如果在性能测试期间没有很好地测试出暴涨的场景,对于服务器来说就是一个比较大的灾难。
第三种情况即常见的负载均衡设备流量的满载,现在大部分企业使用的都是云厂商的负载均衡设备,基本上都存在PPS连接的上限,在没有做很好预估的情况下,当上限满载的时候,后续访问的用户就会出现连接错误的现象,典型的就是HTTP 503错误。
第四种情况即系统过载、超过访问上限,在测试过程中存在的主要问题是容量估算不足,现在大型业务的系统扩容切换至少需要90S左右才能完成业务的快速接管,因此前期性能测试的容量评估过程中做热切换和热部署的场景非常有必要,场景搭建好后,通过横向扩容可以快速接管业务,一些复杂的性能问题也能很快迎刃而解。
第五种情况下网站访问没有问题,但是网站访问延时极具升高,部分服务接口大面积超时,影响用户使用体验。
研发过程中,我们会发现无论是研发还是测试,一般罪魁祸首都是一些小范围的代码错误,进而会导致一些功能和性能的问题,造成极大的损失。因此,严格的需求评估是非常有必要的,如果能很好地分析出常见的和异常的业务场景,一旦上线后出了问题,也能游刃有余地去应对。
在整个需求过程中,运维人员不需要特别着急地做一些编码的操作。如上图所示,前期要确定测试场景的设计、测试流程的梳理、测试数据的管理以及执行顺序,随后由性能测试执行人员完成总结性操作,汇总出测试结果,通过记录各个节点出现的性能问题,形成整个测试的分析报告,包括调优数据、参数配置数据。
最终运维人员依托于线上的性能数据来配置指标梳理的方法,一般来说包括三种:正常运维的参数配置、系统异常下的参数调节、应急异常或灾难性问题下的调节方法。
如果性能测试做的不到位,那带来的直接经济损失将难以估量,以电商企业为例,来自亚马逊的调研数据显示,当电商的访问速度每下降100毫秒,营业额至少减少1%左右,相对618、双11这些场景来说,如果用户体验比较差,付款付不出去,损失是可想而知的。
选择哪一种测试方法有效?
“移动互联网时代,企业该如何为频繁的市场活动和产品快速迭代进行有效而准确的性能测试呢?”
随着移动互联网的急速发展,电商、在线教育、票务等企业业务数量急剧上升,超高并发量的数值一直在突破进阶。同时,业务复杂化下,整个IT系统的架构也在快速演变,从单主机到1000台应用主机转换、分布式 CDN 节点超过 4000+、链路节点设备层数突破10种、分布式微服务架构盛行。在此背景下,传统性能测试面临诸多问题:
搭建10000用户并发测试环境需要10台物理主机;
测试环境部署时间5天以上且环境复用率低;
10000并发的License授权费用超过百万;
工具脚本、数据、报告管理分散,存在较大安全隐患;
loadrunner、Jmeter等测试工具操作复杂、学习成本高,普通测试人员不易掌握。
传统性能测试式微之下,云压测快速汲取养分实现了赶超,性能测试迎来了创新与变革的春天。
2005年云压测概念横空出世,伴随着云计算技术的快速发展,使用云资源实现弹性、可扩展、自由伸缩分布式压力产生模式。利用云端的资源,云压测实现了一站式完成性能测试,可模拟系统各种异常场景,用户无需再购买包括服务器、机房在内的多种资源,能够节省大量的资源成本和人力成本。目前,国外如Soasta,其云压测产品已经成为传统性能测试平台的最强劲对手。
相对于传统的性能测试方案,展开来说,云压测具备4点优势:
- 简单易用:云压测的脚本3分钟就可以生成,因为测试资源全部部署在云端,可以实现秒级启动,同时能够实现测试数据的秒级回传以及性能问题的同步定位。
- 全栈监控:云压测产品都是基于分布式的云计算服务,能够基于位置快速进行响应,还能够实现同步监控数据回溯,达到全栈监控数据采集,全面覆盖网络层、服务器层、操作系统层以及应用层。
- 规模化部署:绝大多数云压测厂商的测试节点都能够覆盖全球,实现基于位置的按需定制,还可以实现全链路真实节点,达到千万级的并发请求。
- 性价比较高:SaaS服务天然具备灵活的优势,云压测产品都可以按需计费,也不需要硬件部署,很容易实现一体化测试管理服务,而且团队之间也可以实现编组协同,大大提升工作效率。
如何开启一场优质的性能测试?
“云压力测试平台能够帮助用户解决哪些性能问题?如何解决?”
一般来说,分析性能问题需要从网络层面、操作系统层面、应用服务器、服务器问题这四个层面入手。在网络层面,主要就是带宽不足、网络异常抖动,如果使用机房的IDC部署,还需要考虑交换机的收敛比;在操作系统层面,存在的典型问题是参数标准化的问题,比如说Sysctl以及一些网络参数的配置问题;在服务器端,CPU监控过程中需要区分哪些进程的CPU占用过高,如果进程占用过高,还要分析进程占用大概是一个什么样的状况,磁盘IO如果读写过高的时候,就要考虑是否有更好的SSD的硬盘。
如果想要更加系统地进行性能测试问题的分析,更加全面地探索到性能问题,那么一套系统完整的测试流程是不可或缺的。
完整的测试流程如上图所示,从需求分析开始到测试的规划、脚本的编写、测试的准备,然后进行一个全面的分析,最后出具评测报告,报告中会包括一些指标,如监控数据和配置数据的输出。
云压测中,需求分析的环节需要关注几个重要的点,包括网络的信息、防火墙的信息的收集,防毒墙、负载均衡的设备、软硬件加解密、应用结构化的部署,以及用户操作习惯的使用评估等,当这些点都分析的比较完整后,就可以做出来一些比较贴合实际的场景了。
在测试规划中,比较重要的是了解从各个区域访问的时间差异,比如说北上广深相对于一些偏远山区,在访问过程中这些地区的响应时间是不是基本上一致,如果不一致运维人员要需要分析一下服务器摆放位置、CPN配置合不合理等问题。
在脚本编写上,过程需要简单化,简单到让业务人员也可以参与编写,这样做的好处在于业务人员也能够参与到测试中。在分析测试场景的时候,离市场最近的业务人员要比一些常规的技术人员分析的更透彻。
测试准备的过程中,监控工具要做到尽量全面化覆盖,除了典型的五大件之外,还需要包括一些错位预制的快速输出。监控的软硬件机器一定要部署类似于自动报警的功能,一旦出现大面积问题,可以给运维人员快速的提示,以便其作出快速响应。
在全面分析环节,要注意的是,基础数据和测试数据的预估量和生产需要基本保持一致,这样测试结果就跟线上真实的访问结果基本上不会有太大出入,具有非常准确的参考价值。
分析过程可以借助工具来完成,提前分析好各个节点需要输出的内容,做好整个测试过程的条理化,最终出具的报告或者是调优指标参数才有一定的参考价值,整个测试的输出结果才能有望成为后期运维优质化部署的参考。
生产交易日志分析的重要性不言而喻,从上述图表来看,业务分布状态上存在很多插针的信息,这就可能是访问异常的场景,需要对响应时间过高的请求做一个完整的分析,包括平时基础量、交易高峰期、特殊交易日、生产故障问题、环境满载模拟等,如果这些全部模拟到位,基本就不会出现太大的纰漏了。
在生产环境压测中,测试数据准备的过程比较漫长,数据清理时可能会出现数据丢失或遗漏的问题,针对这一问题,小编在长期的性能测试经验中总结了四种方法:
- 数据预埋。即在生产的应用下挂测试库,这样即使测试性能稍稍偏低,也基本上可以测出真实访问过程的效果,而且数据基本做到了隔离,不会受到污染,方便后期清理。
- 非接口的标识改造。常见如在http请求头中的user-agent字段的标识做区分,在请求标识中,可以选择一些不常见的请求头,后端做业务解析,将这些数据做一些标识,提升后期数据清理的速度。
- 旁路数据路由。当业务流转非常清晰时,可以把正常的业务数据和压测数据进行分离处理,之后定向追踪、清理压测的数据表即可。如果线上只做查询类的交易,主要清流水表和记录表,对正常业务不会有影响。
- 接口字段标识改造。在关键数据表里预留压测字段的标识位,压测阶段就可以直接填充标识类的信息,后续可以直接据此来做数据清理。
基于上面的种种分析,相信大家对压力测试的环节和注意事项都已经有了一个比较深入的了解,那么,接下来回归到最初问题的探索,云压力测试平台究竟能帮助企业解决哪些性能问题?主要在于4点:
- 真实业务流量模拟。基于云压测,不仅能够模拟成百上千用户的真实访问,还可以实现弹性可变的用户行为模拟,进行快速的用户伸缩。同时还可以实现网络流量质量的急速验证,通过正常流量来验证网络流量满载的状况。如果企业使用的是类似F5物理硬件设备的负载均衡,还可以验证物理设备硬件的PPS值是否能够满足高并发需求。
- 资源监控。除了CPU、内存、磁盘的快速检测,还可以进行数据库资源使用监控,以及一些中间件资源监控。
- 操作系统应用优化。云压测平台可以在整个压测过程中为Limit参数配置提供非常好的测试依据,同时可以为Tomcat的连接数、Jboss连接数进行实时调优。
- 性能问题定位。结合一些常见的APM工具,可以快速地进行一些慢事务的追踪,分析出应用和数据库常出现的一些问题,进行场景模拟,例如缓慢事务场景模拟、网络层高吞吐测试场景模拟等。
写在最后
随着科技的进步,移动互联网实现了飞跃式发展,软件产品已经应用到各个领域,在疫情助推下,线上模式走红各行各业,更是颠覆了流量高并发场景的峰值和出现频率,在此背景下,如何保障系统能够承担高并发请求,为用户带来优质的服务体验,已经成为企业发展上的“兵家必争之地”,性能测试就是那把开拓市场的利器。