记得刚开始学习性能测试相关知识的时候,我一直有个疑问:性能测试能对测试工程师本人和企业带来什么价值?随着不断的学习成长和工作中的应用实践以及和很多业内同行沟通交流,我总结了如下几点性能测试的优点和价值:
随着互联网行业不断发展,系统架构越发复杂,业务场景越发多样化,对性能测试的要求也越来越高。传统压测方式已经无法满足业务和技术的发展需要,全链路压测,就是在这样的背景下应运而生的。作为性能测试领域新阶段的最佳实践,全链路压测在更多公司被探索和应用的过程中,也遇到了种种挑战。
相比于传统的压测方式,全链路压测在性能测试领域,有其独到的特殊性:
压测类型 | 传统压测 | 全链路压测 |
---|---|---|
压测工具 | Jmeter、Locust、Loadrunner | 压测集群、流量引擎、录制回放 |
承接方式 | 需求响应式,被动 | 发现系统所有链路存在的瓶颈点,主动 |
压测环境 | 测试环境/性能环境 | 生产环境 |
环境特点 | 环境不稳定/配置低/压测结果参考性不高 | 环境稳定/完全真实环境/压测结果真实可靠 |
压测场景 | 单机单接口、单机单链路、单机混合链路 | 包含覆盖范围内的所有核心链路及场景 |
压测过程 | 可观测性较低,延时较高 | 实时可视化观测 |
测试结果 | 数据维度小,无法提供太多数据便于分析 | 提供多维度细粒度的数据,便于快速定位问题优化 |
投入成本 | 需要搭建单独的压测环境 | 完全线上生产环境进行,无须单独搭建环境 |
以我之前工作过的某银行信用卡中心为例,当时也是传统压测占大多数。要完成一次完整的压测,需要经历下述多个环节才可以完成:
上述过程还只是在测试环境进行压测,不仅耗时费力,还无法对生产环境的性能评估有足够的建议参考。每次上线特别是大促阶段,还是提心吊胆的怕出问题。
虽然全链路压测解决了传统压测过程中的种种痛点,可以为线上性能评估提供更多详实的参考建议。但在落地过程中,全链路压测依然要解决很多问题,主要有如下几点挑战:
我在上家公司推动落地生产全链路压测的过程中,就遇到了上述的几点挑战,且这个过程也踩了不少坑。当时我就在想,能不能有这么一个产品:既可以不对现有业务进行改动,又可以方便快捷的完成链路梳理、流量评估、数据隔离,同时还要能做到全链路监控和压测过程的服务保护?一次偶然的机会,我了解到了开源全链路压测平台Takin。
最开始了解到Takin,还是因为全链路压测相关的事情。大概20年初,我正忙于前司的全链路压测落地的事情,网上找了很多方案和实践,但大多都是空泛的概念。后来接触到数列科技,看了他们的产品功能介绍,和他们技术负责人也聊过几次,给了我很多启发。
恰好今年,他们的全链路压测产品Takin开源了,下载试用了一番,体验不错,是从实际的生产实践角度出发来解决实际的问题。
Takin是国内知名的系统高可用专家数列科技的核心产品,是基于Java语言开发的一套生产全链路压测系统,可以在无业务代码侵入的情况下,嵌入到各个应用程序节点,实现生产环境的全链路性能测试,适用于复杂的微服务架构系统。它的实现原理如下:
从我个人的使用体验来说,6月25日开源的版本,从下载安装配置,到正常的run起来,大概用了1天左右。相比于复杂的全链路压测实践来说,这点时间已经很短了,但对于没有太多生产全链路压测实践或者技术比较薄弱的测试同学来说,难度稍微有点高。
前两天和他们技术负责人聊了会儿,了解到他们已经在做了一次重大更新,不仅优化了安装部署的步骤,修复了老版本的一些问题,这次还开源了链路自动梳理和多环境模式压测支持的功能。下面是他们本次更新做的一些优化点:
相比于之前,这次的更新对很多测试同学来说,差不多几个小时就能安装部署好,run起来。
生产环境进行全链路压测,实际上对于大部分企业来说,是很难落地的,一方面是业务量级是否真的需要,另一方面是投入产出比。不过测试环境做全链路压测,对于很多测试同学来说,反而是很好的选择。数列科技这次开源的更新内容里,针对不同环境开展压测,做了专门的优化更新,大概原理如下:
主要特点如下:
关于Takin,更多的信息可以看他们的官方文档和Github,地址如下: