服务端的性能测试,尤其是业务性能测试,是用来评估性能容量、诊断性能瓶颈和应用错误,或是验证高可用的能力,以此达到降低成本、提升用户体验的目的。但是,当需要有进一步的定位和刨析时,这类性能测试就会显得有点捉襟见肘。本文将介绍PTS + ARMS的经典组合,在性能容量评估、性能瓶颈诊断和应用错误诊断方面的实践方案。
性能测试PTS(Performance Testing Service)
脱胎于阿里全链路压测平台,是简单、直接的云化性能测试工具,可帮助用户轻松模拟海量访问的真实业务场景,支持所需资源随时发起,免去搭建和维护成本。
业务实时监控服务ARMS (Application Real-Time Monitoring Service)
是一款APM类的全链路(Tracing)监控产品。用户可基于ARMS的前端、应用和自定义监控,快速构建实时的业务监控能力。
适用行业
PTS + ARMS 组成的经典压测监控方案,不仅已服务于淘宝、天猫等阿里巴巴集团内部用户,也正应用于其他多个行业,包括电子商务、互联网金融、游戏、新媒体、政府及大型央企等,支持新版本性能基线测试、大促场景测试和线上容量规划等场景。
典型应用场景
- 评估性能容量
以某知名在线教育平台为例,用户希望以最小的成本应对常态化的选课高峰,同时,在流量峰值的情况下,用户体验不能下降。
根据木桶原理,容量最小的系统也就是木桶最短的板决定了站点的能力。用户需要做的是识别短板,通过调整长短板之间的机器配比达到拉平系统水位的目的,那么即使是同样数量的机器也可以提供更大的业务吞吐量,甚至不用额外扩容。
通过PTS集成云监控和ARMS监控,不仅可以准确判断特定配置下的系统性能容量瓶颈,同时还能定位性能基线的配置短板,如系统性能、数据库瓶颈、代码问题等。性能容量评估分为以下3个步骤:
- 使用PTS快速构建高仿真业务压测;
- 通过PTS控制台一站式观察压测发起侧(客户侧)及服务侧(云监控)的端到端全监控,了解高压下的业务表现和各核心系统的性能水位情况;
- 再通过ARMS集成,快速找到应用瓶颈点,列出接口快照,结合系统性能诊断慢快照具体耗时原因,如系统性能,慢SQL,或其他代码问题。
- 诊断性能瓶颈
除了调整容量配比,PTS + ARMS还可以通过探测和识别系统瓶颈点,以提高站点性能的方式,进一步提升同样机器数量情况下的整体容量水位。
以在线教育平台上通过浏览器登录为例,最常见的一个操作流程是:登录 -> 根据用户的属性信息列出可选的课程列表 -> 用户通过查询条件进行准确的查询或者筛选 -> 选中最终的课程进行提交。
这个流程,作为一个事务,是有严格的先后顺序的。在PTS中就是一个串联链路。借助PTS对cookie的友好支持,整个链路都可以通过PTS配置出对应的压力测试流量,并借助ARMS进行监控,从而观察、分析性能瓶颈。
此外,用户还可以通过PTS发现接口调用性能瓶颈拐点,一键跳转到ARMS中,并基于具体线程刨息,发现具体代码栈内的性能瓶颈拐点,从而为优化代码性能,提供代码栈级别的证据。
性能瓶颈诊断分为以下3个步骤:
- 使用PTS快速构建压测并一站式观察相关应用的接口调用耗时,寻找性能瓶颈点;
- 使用ARMS观察对应应用的接口耗时,并找到对应的慢接口调用的线程进行刨析;
- 通过线程刨析找到对应接口的线程快照,分析性能瓶颈。
- 诊断应用错误
诊断应用错误是企业级互联网应用正式上线前的另一大场景。这类错误虽然一般不会直接影响调用耗时从而造成性能瓶颈,但是仍然会由于业务错误引发糟糕的用户体验。
应用在基线性能下除了耗时以外,通常还可能被返回各类调用错误,典型的有:
- 超时错误(timeout):当后端服务来不及响应时,可能会在客户端造成timeout 错误;
- 熔断错误:该类错误主要是被各类熔断组件触发(如Sentinal), 保护后端应用性能;
- 其他系统组件引起的错误:如性能超载引起的IOException等。
通过PTS + ARMS的经典组合,可以在压力增加时,有效发现以上的各类错误。
此外,基于PTS的施压侧监控和多维度监控特性,还可以通过ARMS集成关联到具体的错误异常详情,定位到具体错误抛出的详细代码,从而以指数级别提高压测场景下的接口错误诊断效率,错误接口诊断分为以下3个步骤:
- 使用PTS,观察压测增加时是否发生业务异常/错误;
- 使用ARMS,观察对应应用的总体错误调用,判断问题点。
- 打开错误的异常详情,通过异常的快照详情判断根系错误根因。
可见,PTS通过集成ARMS的监控能力,可将关键的服务端性能指标整合到压测的整体监控中,以达到更快速、更便捷地识别问题的目的,降低用户的运维负担。
云服务器99元拼团购!拉新还可赢现金红包!300万等你瓜分!
马上一键开团赢红包: http://click.aliyun.com/m/100...
本文作者:中间件小哥
本文为云栖社区原创内容,未经允许不得转载。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。