参考资料:全链路压测平台(Quake)在美团中的实践

全链路压测简介 - 性能测试 PTS - 阿里云

聊聊全链路压测 - 老_张 - 博客园

基于实际的生产业务场景和系统环境,模拟海量的用户请求和数据,对整个业务链路进行各种场景的测试验证,持续发现并进行瓶颈调优,保障系统稳定性的一个技术工程。总的来说,全链路压测基于真实的用户场景,实际线上环境,按照既定流量,对各个业务链路进行压力测试的过程。

全链路压测的原因

传统的压测只会涉及到核心服务,无法覆盖到所有的环节,而传统的压测通常会忽略掉一些基础服务如Nginx、Redis 缓存、数据库、磁盘、网络等,所以这些基础服务问题在单服务压测中往往不能被暴露出来。

全链路压测和传统压测的区别

压测类型 传统压测 全链路压测
压测方式 Jmeter、Locust、Loadrunner

压测集群、流量引擎、录制回放

开源:Takin

阿里:Amazon,PTS

美团:Quake

京东:ForceBOT

高德:TestPG

字节:Rhino

承接方式 需求响应式,被动 发现系统所有链路存在的瓶颈点,主动
压测环境 测试环境/性能环境 生产环境
环境特点 环境不稳定/配置低/压测结果参考性不高 环境稳定/完全真实环境/压测结果真实可靠
压测场景 单机单接口、单机单链路、单机混合链路 包含覆盖范围内的所有核心链路及场景
压测过程 可观测性较低,延时较高 实时可视化观测
测试结果 数据维度小,无法提供太多数据便于分析 提供多维度细粒度的数据,便于快速定位问题优化
投入成本 需要搭建单独的压测环境 完全线上生产环境进行,无须单独搭建环

全链路压测的过程

一、确定压测目标

压测目标主要包括压测范围、策略、目的,往往与业务、技术目标息息相关。例如:

  • 压测范围:用户注册加登录,为大规模拉新做准备。
  • 压测策略:高仿真生产环境压测,提前经历真实的业务高峰。
  • 压测目的:探测业务吞吐极限,验证架构能力、探测性能瓶颈。

二、梳理系统架构

梳理清楚端到端的请求链路、技术架构、分层结构、模块划分,以及RPC、消息、缓存、数据库等中间件的使用情况,分析潜在的瓶颈点,并针对性的增加监控指标、制定应急预案。

组件 分类 潜在的瓶颈、问题
SLB 负载均衡
  • 容量不足
  • 建连失败
ApiGateway API网关
  • 容量不足
  • 线程等待
  • 触发限流
UserService 微服务
  • 容量不足
  • 线程池资源耗尽
  • 日志资源耗尽
  • 触发限流
  • GC
SecurityService 微服务
  • 容量不足
  • 线程池资源耗尽
  • 日志资源耗尽
  • 触发限流
  • 消费延迟
  • GC
Redis KV缓存
  • 容量不足
  • 触发限流
  • 缓存击穿
  • 缓存热点
  • 连接池耗尽
  • 大对象
MySQL 数据库
  • 容量不足
  • 触发限流
  • 连接池耗尽
  • 慢SQL
Kafka 消息队列
  • 容量不足
  • 消息堆积
  • 磁盘写达到100%
SmsService 第三方依赖 第三方可能会拒绝参与压测

三、梳理业务模型

全链路压测针对的是现代越来越复杂的业务场景和全链路的系统依赖。所以首先应该将核心业务非核心业务进行拆分,确认流量高峰针对的是哪些业务场景和模块。全链路压测的链路代表要压测的业务范围,同一条链路需要构造海量的参数集合代表不同用户的不同行为,系统的基础数据、系统预热情况等代表系统的状态。链路范围、链路的访问量级、链路的参数集合、基础数据、预热情况一起构成了压测的业务模型。

四、准备压测脚本、改造升级环境

根据业务场景编写压测脚本并对生产环境进行隔离。

生产环境压测的三大前提:

  • 压测标记不丢失

    压测流量在任何环节能够被正确的识别出来。

  • 压测流程不中断

    压测流量能够正常的调用下去,整个流程不被阻断,返回符合预期的业务结果。

  • 压测数据不污染

    压测数据不对线上正常的业务造成数据污染。全链路场景往往包含多个读写场景,为了隔离压测数据,存储中间件识别到压测标之后,将数据写入影子库表,与真实的数据区分开。

五、正常流量联调

通常通过执行功能回归用例完成联调,是需要将正常回归流量打上流量标,这样在查找调用链路时可以精准定位。

  • 验证探针对正常业务逻辑无影响,用例的测试结果均符合预期
  • 验证探针对依赖组件的适配情况,无遗漏的RPC调用、采集的数据准确无误;调用链完整性是全链路压测数据安全的核心。
  • 将探针采集的调用链数据进行聚合(建议500+以上),抹平不同参数、不同逻辑分支带来的调用链差异性。使用聚合后的依赖拓扑图辅助梳理组件依赖可以极大程度的避免组件遗漏。
  • 根据正常流量联调的结果,需要梳理出影子库表的范围、第三方服务的依赖情况。

六、准备压测数据

  1. 确认影子库表范围。

  2. 确认偏移字段、脱敏字段。

  3. 新建影子库表。

  4. 执行数据迁移。

  5. 准备接口参数数据。

七、联调压测流量

与正常流量联调的方式基本一致,联调过程中需要将压测流量打上流量标,在查找调用链时可以精准定位。

八、单链路小流量试压,单链路压测

不同的业务、压测目标往往对应不同的压测节奏和方法,不可一概而论。除了注意以下要点之外,还需根据业务、架构、人员等自身情况,制定不同的压测计划,在尽量避免线上故障的前提下,发现更多的线上问题。

  • 制定明确的压测计划、压测通过标准,相关人员必须现场支持,分工明确,统一指挥。
  • 线上压测应在业务低峰时段进行,并制定应急预案。
  • 应当具备监控大盘,密切关注相关监控指标。
  • 遵循循序渐进的原则,单链路压测>小流量验收>全链路验收

九、全链路小流量试压,全链路压测并验收

  1. 阶梯加压与容量规划。

    定位性能瓶颈;拿到各应用的性能基线数据与容量,获取限流阈值。

  2. 瞬时加压。

    验证系统预热是否合理,比如数据库连接、RPC连接、业务缓存、JIT预编译等。

  3. 稳定性测试。

    验证系统资源使用是否合理,是否存在内存泄漏等情况。

  4. 故障演练。

    通过人工注入故障,暴露架构的稳定性问题,提升系统的健壮性。

  5. 验证限流、降级、预案的有效性,产出最终的交付物。

测试学习——全链路压测相关推荐

  1. 高德全链路压测——语料智能化演进之路

    背景 高德地图作为日活过亿的国民级出行生活服务平台,承载着海量用户服务的是后台的超大规模集群.从用户角度,如果出问题,影响会很大.3机房异地部署造成线上环境复杂,链路复杂.在这样的条件下,如何避免因故 ...

  2. 罗辑思维在全链路压测方面的实践和工作笔记

    业务的知名度越高,其背后技术团队承受的压力就越大.一旦出现技术问题,就有可能被放大,尤其是当服务的是对知识获取体验要求颇高的用户群体. 提供知识服务的罗辑思维主张"省时间的获取知识" ...

  3. 【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选

    戳蓝字"CSDN云计算"关注我们哦! 作者 |  牛兔 转自 | CSDN企业博客 责编 | 阿秃 阿里妹导读:全链路压测是阿里的首创,我们将从工作内容.操作过程.运行总结等多个方 ...

  4. 分布式系统全链路压测方法

    目录 前言 测试策略 核心目标 技术选型 报告输出 总结 前言 继上一篇JMeter的基本使用介绍(使用Apache JMeter做压力测试),本文介绍如何做分布式系统的全链路压测.压测也叫基准测试( ...

  5. 你“被”全链路了么?全链路压测实践之理论

    要说当下研发领域最热门的几个词,全链路压测 肯定跑不了.最近的几次大会上,也有不少关于全链路的议题.之前有朋友在面试过程中也有被问到了什么是全链路压测,如何有效的开展全链路压测.今天我们就来聊聊全链路 ...

  6. UGeek大咖说 | 顺丰科技:全链路压测中的可观测性实践

    导语 UGeek大咖说是优维科技为技术爱好者研讨云原生技术演进趋势而创办的系列活动,邀请一线互联网大厂的核心骨干主讲,分享原厂实践.本年度主题为可观测,我们希望通过一场场有趣.有料.有深度的活动,让运 ...

  7. 全链路压测体系建设方案的思考与实践

    在阿里淘宝 双11 的过程中,长期以来都是在生产环节做全链路压测的,通过实践我们发现在生产环境中做压测,实际上会和一个 IT 组织的结构.成熟度.流程等紧密相关,所以我们把全链路压测从简单的制作范围内 ...

  8. 有赞11·11:全链路压测方案设计与实施详解

    2017年双十一即将来临,对于买家来说是一年一度的购物狂欢,可是对于电商公司的技术人员来说,却是一年一次的大考.如何用更少的预算完成指定当前业务规模的流量高峰,是技术的永恒主题. \\ 由InfoQ举 ...

  9. “敏捷版”全链路压测

    作者:子矜 审核&校对:风云.雨芙 编辑&排版:雯燕 客户的故事 全链路压测被誉为大促备战的 "核武器" ,如果之前有关注过阿里双 11 相关的技术总结,对 &qu ...

  10. dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案

    最近忙于公司的全链路压测平台调研和技术规划文档输出工作,参考了全网能搜到的业内大厂的全链路压测方案,这里做个汇总,以及将个人认为可以落地的方案做一个关键点整理. 技术链接 滴滴全链路压测解决之道 阿里 ...

最新文章

  1. R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0、具体列的NA值替换(replace)为0、若干列的NA值替换(replace)为0
  2. php将科学计算法得出的结果转换成原始数据
  3. dojo/aspect源码解析
  4. 英才计划计算机潜质测评试题,湖北省2020年“英才计划”潜质测试的通知
  5. linux删除目录下文件的几种方法
  6. linux下安装gcc及设置多版本gcc多版本共存(如果enable静态库,会报错,不知道为什么,忽略静态库就没问题了)...
  7. 关于Java锁机制面试官会怎么问,深刻易懂
  8. java中的测试类_java中测试类的方法
  9. node实现敏感词过滤及敏感词库
  10. 手机APP逆向工具介绍
  11. java 舆情分析_基于jsp的舆情监测系统-JavaEE实现舆情监测系统 - java项目源码
  12. (6)微信UI自动化-搜索指定联系人(C#)
  13. 大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业
  14. 帝国cms如何给网站添加百度统计代码,百度统计安装教程步骤分享
  15. 干货|遗传+禁忌混合算法(HA)算法求解柔性作业车间调度问题(FJSP)附java代码-第一部分
  16. w7电脑蓝屏怎么解决_电脑突然蓝屏,教您电脑突然蓝屏怎么解决
  17. html js设置颜色渐变效果,Javascript 颜色渐变效果的实现代码
  18. 黑苹果入门:必备工具篇
  19. 海乐淘商城系统--01前缀(功能介绍以及关于架构)
  20. 【buildroot】buildroot常用文件夹

热门文章

  1. J2EE框架技术(SpringMVC) 知识点笔记(1)
  2. 火山PC模拟鼠标操作
  3. 曼昆微观经济学第8版笔记和课后习题答案
  4. 机器学习处理信号分离_机器学习和深度学习现如今能应用在雷达信号处理,或者信号处理的哪些方面?...
  5. catia中尺子没了怎么调出来_CATIA点线面工具栏怎么调出来
  6. Word文件标尺工具被隐藏,怎么恢复
  7. 学习 Java,使用哪个版本最好
  8. 信息学奥赛一本通pdf_信息学奥赛冠军的竞赛“秘籍”
  9. 500 G JAVA视频网盘分享(JEECG开源社区)
  10. 用 Javascript 生成二维码