作者:萧长军(琼谷)。
大家好,我是来自阿里云云原生应用平台的小长军,他的名字叫琼谷,这次分享的主题是“可观测性加持的下一代性能测试服务”。 说到性能测试,大家都不陌生,性能测试已经成为评估系统功能,识别系统弱点,执行系统调优,并验证系统稳定性等等。
性能测试的一般流程是构建数据、配置场景、发起压力测试、产生压力测试结果,但测试的同学们也知道性能测试不是那么简单,我们仍然面临以下问题:
1、冲击范围评估前如何准确控制应力试验半径。
2、对业务系统相关指标进行压力测试和监控,分析当前系统性能。
3. 如果压力测试没有达到预期,还需要分析性能瓶颈。
第四,应根据当前的压力测试结果给出可支持的最大容量或当前性能。
这些问题是每个测试团队需要面对的,也是在当前技术发展下如何更好地解决的
为了解决上述挑战,我们提出了性能压力测试可观测性和压力测试环节的可观测性来解决上述问题
首先,在压测之前,执行一个拨测,通过拨测发起请求,构建整个压测链路拓扑,通过链路拓扑整体查看整个压测的影响范围。 其次,可以观察性能指标,获得压测环节涉及的监测指标,自动生成各业务实例的压测和水位,边压边观察压力。 然后,将压测请求的指标和链路事件进行聚合,实现链路分析和智能分析,观察性能瓶颈。 最后,进行梯度压力测试,通过上述压力测试指标和各服务实例的资源水平,验证系统的服务能力。 构建性能压力测试可观测性,实现从压力测试到数据分析的数据分析。 在此基础上,我们构建了性能测试 PTS 30 具有可观测性的下一代性能压力测试服务。
性能测试 PTS 30平台整体架构分为七个部分,自下而上,底层压测引擎支持自研PTS引擎,与开源JMe压测引擎完全兼容,未来将支持K6引擎,方便用户将配置的压测平滑迁移到PTS平台。 将压测指标数据写入 Prometheus 和 Logs,开放给用户查询,并提供 Grafana ** 供用户调用,满足用户对数据灵活处理的需求。
在压力测试准备阶段,PTS接入应用实时监控服务ARMS,集成了ARMS的多种功能,包括获取应用列表、调用接口、数据库调用、容器、基础设施、链路等数据。
在压力测试执行阶段,压测引擎透传链路标记,打通ARMS调用链,通过流式处理聚合进程。 在压测过程中,提供多种实例指标的 Grafana** 通过 ARMS 智能洞察和调用链分析能力,分析性能瓶颈,在压测过程中可以边按边调整速度。
压力测试结束后,自动生成详细的压测报告,提供性能基线对比和全景快照。
整体压测的每个阶段都可以通过云原生大模型提供的自然语言交互来支撑,满足业务上云、大推广活动、规格选择等场景。 通过以上能力,性能测试PTS 30 具有以下特征:
应用实时监控服务ARMS对压测完全可观察,对大语言模型的压测智能化,完全拥抱开源引擎,实现压测脚本任务托管。 下面重点介绍了这些功能中的每一个:
性能测试PTS接入ARMS OpenTelemetry服务,连接ARMS OT探针后即可使用,无需额外配置。 在启动压测之前,会通过拨测能力进行压测脚本测试和链路检测,可以自动准确地识别请求链路经过的组件,并根据拨测请求建立链路拓扑图,不会涉及正常请求通过的链路, 这样我们就可以直观地感知压力测试通过的环节,明确压力测试的影响范围。
性能测试 PTS 集成 Grafana 在压测过程中,会根据压测环节动态生成压测数据,实现对环节各项指标的全程监控。 如果以下监视被覆盖**:
商**:监控核心业务指标,如场景请求量、业务转化率等。 压力测试**:监控压测服务指标,如TPS、RT、成功率、异常请求数、总请求数、90 95 99 RT等。 应用程序监控**:变更了请求链接中涉及的应用监控指标,包括应用维度中的应用实例数、请求数、错误数、RT数等指标。 集装箱监控**:容器服务监控涵盖API服务器、节点、Pod等核心实例组件,涵盖QPS、成功率、Pod数量、资源使用情况等指标。 此外,还有接入层负载均衡实例、数据库实例等。 通过以上**,可以监测压力测试环节每个实例的水位和状态,通过这个**可以边观察边调整速度,达到最优压力测试的目的。
性能测试中遇到的很多问题都是压测结果不如预期,需要对当前系统或整个环节的性能瓶颈进行分步分析。 性能测试PTS集成了应用实时监控服务ARMS中的智能洞察能力,在压测过程中自动筛选异常事件,录入异常事件详情,并可插入接口、异常原因、完整的异常堆栈、异常发生次数、异常发生率、异常时间范围、调用链等事件涉及的信息, 点击调用链分析,可以输入调用链详情,查看异常分析报告,如在上述场景中,检测到数据库连接超时的异常事件。经过跟踪分析,指出异常时间数据库连接池的最大利用率为100%(最大活跃连接数和最大可用连接数),并给出增加连接池配置的建议。该功能大大提高了性能分析的效率,并实现了持续的性能调优。
基于上述配置和指标数据,我们还计划推出自动化容量规划和验证。 让我们从压力测试梯度的三个阶段开始:
首先,如果资源负载不高,则TPS和资源使用率呈线性增加。
二是持续加压资源负载饱和时,随着并发的增加,TPS趋势保持稳定,CPU开始飙升。
3. 当资源负载已满且并发超过系统可承载的最大容量时,TPS趋势和CPU波动较大,服务不可用。
借助这种容量评估方法,可以在压测前配置预期的并发性,结合上面自动识别的链路组件,可以同时配置每个实例的预期最大资源水位阈值,并逐步加压资源阈值,达到资源阈值, 如果达到预期的流量,可以计算出容量规划所需的资源实例数。进一步加压以达到资源负载限制,计算资源实例数支持的最大并发,并评估容量。
通过与ARMS产品的深度集成,使压测完全可观察,实现持续监控和反馈,做更深入的性能分析,优化性能问题,从而实现压测输出价值的最大化。 性能测试 PTS 30 还结合阿里云的云原生大语言模型,通过自然语言交互实现智能压测。
生成式AI分析性能测试指令,创建压测任务,调试脚本,执行压测任务。 从端到端的角度来看,通过查看动态图标,观察应用系统的整体性能状态。 找到性能瓶颈并发现瓶颈的根本原因。 您还可以使用大模型对压力测试报告进行深入的分析和解释,并给出压力测试总结。
除了能力升级,开源、开放一直是PTS性能测试产品的核心价值。 目前性能测试PTS支持托管JMe压测引擎,平台已经具备可观测性、智能化等能力,最大化压测价值。
脚本上传后,平台会对脚本进行解析,并自动完成其依赖的JAR包,降低用户配置成本,提高压测成功率。 JMer压测配置也进一步优化,提供便捷的瀑布式配置、自上而下的沉浸式配置,将基础配置与可选的高级配置分离,降低用户对配置的理解成本,降低压测场景下的配置难度。 JMe 压力测试也支持与可观测性集成的能力,它在压力测试后自动生成报告,重用平台压力测试**,并提供性能分析结果。 在复用JMmeter压测引擎的同时,可以通过平台获得更稳定、更大规模、更有价值的压测体验。
性能测试PTS保持开放,提供OpenAPI,提供集成和被集成的能力,使能云服务,向用户推荐合适规格的实例。 例如,在函数计算产品上,您可以使用性能测试PTS提供的函数性能检测来获取单个实例的性能上限,降低并发配置难度,为用户推荐合适的实例类型,降低使用函数计算的成本。 在MSE微服务引擎产品上,支持Dubbo等服务性能测试,发现服务性能问题,支持云原生网关性能测试,获取网关性能上限。
目前,PTS可在全球22个地区发起压力测试,支持百万级最大并发和数千万级最大TPS,满足全球大规模压力测试的实时启动,服务全球数万余家企业。