流量回放新形态:基于网关 Access Log 发起

news2024/9/27 21:25:11

作者:休祯

背景

为什么需要流量回放

无论是面向即将上线的新版本做最后的性能测试,还是在遇到棘手的故障时帮助开发人员快速定位问题原因,流量回放技术都发挥着不可或缺的作用。使用真实世界的流量数据进行回放能使性能测试过程更加接近实际运行状态,确保新版本的性能真正满足用户的预期。同时准确的流量回放能够快速复原问题发生的现场,有效缩短故障响应和解决时间。

如何实现流量回放

传统上可以用一些开源工具实现流量回放功能,经典的有如 GoReplay,Tcpreplay, JMeter Access Log Sampler 等工具。它们或多或少有些使用痛点。

GoReplay

使用 GoReplay 可以准确地捕捉实时流量并回放。然而,作为先进工具的 GoReplay,仍有一些使用痛点:

  1. 需要具备较高权限以实时录制服务器特定端口的请求和响应,并可能会对服务器性能产生一定影响。

  2. 随着登录态信息的失效,原样回放的请求会失败。

  3. 需要搭建 Go 运行环境并手动开启录制,对于初次使用的工程师来说,具有一定的前置成本。

  4. GoReplay 天然不支持分布式流量采集和流量回放。

Tcpdump & Tcpreplay

Tcpdump 用于捕获网络流量,Tcpreplay 用于回放捕获的流量。Tcpdump 可以在指定的网络接口上捕获流量,保存为文件,而 Tcpreplay 可以将这些文件回放到网络上。它主要限于较低层面的网络通信回放,对使用者知识要求较高,需要较好地理解网络协议和 TCP/IP 模型,以确保正确地捕获和回放所需的流量。同时由于是在四层网络上做的流量捕捉与回放,不感知业务层,对请求的可视化与参数替换也有不小障碍。

JMeter Access Log Sampler

和前面的流量主动录制和回放不同,JMeter Access Log Sampler 以 JMeter 为基础直接从 Access Log 发起请求,它的便利性在于可以直接从 Access Log 中读取日志,并生成 HTTP 请求进行流量回放。但对新手而言 JMeter 有其学习难度,此外直接原样回放依然可能面临着登录信息过期的挑战,同时由于其只会原样回放日志,还需要投入额外的工作量在日志预处理上。

总而言之,一般的开源流量回放工具有以下几个使用痛点:

  • 不支持分布式流量采集和流量回放。

  • 流量录制动作需要较高权限,并对服务端有侵入。

  • 有前置学习成本或环境配置成本。

  • 未处理登录态失效的问题。

  • 没有参数化或者参数化困难,请求参数重写困难。

针对这几个痛点,PTS 推出基于 Access Log 回放流量的新功能。

PTS 新特性:Access Log 驱动的流量回放功能

解决痛点

针对以上流量回放开源工具的使用痛点,PTS 新功能分别以以下方式做了解决。

分布式流量采集和流量回放

PTS 流量回放新功能支持分布式流量录制能力。即便您的服务端有多台应用,只需要简单将您的网关 Access Log 投递到统一的 SLS 日志库,就能实现分布式的流量录制。同时 PTS 具备强大的分布式施压机调度能力,能调度多 region 的分布式部署的施压机发送请求,达到高倍量、真实来源的流量回放效果。

基于 Access Log 回放,服务端零侵入

新功能从旁路出发,仅依赖网关请求的 Access Log,无需在服务端挂载流量录制程序,无需额外权限,对服务端零侵入。

使用简单,所见即所得

新功能能够直接读取并解析您的 Access Log,将记录的每一次用户请求作为蓝本,同时结合阿里云 SLS 的强大日志分析处理能力,只需要您的日志存在 SLS 中,就可以轻松筛选需要的 Access Log 进行回放,实现真正意义上的“所见即所得”。

登录态难题,巧妙解决

流量回放实践中,维持用户的登录状态一直是测试中的一个痛点。新功能通过引入简易的登录接口配置机制,优雅地解决了这一难题。如您的接口需要登录后才能成功请求,您可在日志分析的结果页面简单配置登录接口和登录参数(如果您的 Access Log 中记录了登录请求,也可以直接选择登录接口,省去配置过程)。PTS 将在压测时请求该接口,并自动将 Cookie 导出供所选的接口使用,确保后续请求在正确的会话上下文中执行。

自动请求参数化,白屏化参数配置和参数替换

新功能解析您的 Access Log, 解析请求路径、请求 body 参数和 URL 参数,自动组装参数为参数文件,并在用到参数的地方做了参数替换,构造 PTS 压测场景。依托 PTS 的白屏化压测场景编辑能力,您能直接看到请求参数,并可以方便地利用用新的参数文件替换请求参数,重写请求。

其他亮点

自动化场景组装:化繁为简,大大提高压测场景配置效率

以往构建一个 PTS 压测场景可能涉及几十个接口的梳理和一个个配置,工作量巨大。新功能巧妙地从 Access Log 中自动提取请求 URL、请求参数等关键信息,您只需要在日志分析的结果页面简单选择您要压测的接口,点击确定后,即可一键组装成 PTS 压测场景。这一自动化过程将大大降低您的场景配置负担,使得原本需要数天的工作量缩短至几分钟甚至更短,极大地提升了工作效率。您可以将更多精力聚焦于测试策略优化与结果分析,而非琐碎的场景搭建上。

强大的接口 RPS 级别的压力控制能力,精确放大和缩小压测流量

面对业务的快速增长,模拟更高并发量的需求日益凸显。新功能不仅支持基于 Access Log 的精确回放,还提供了灵活的流量倍量回放能力。PTS 从您的 Access Log 中分析每个接口的每秒最大请求数,基于这个数值,您可以根据需要轻松方法和缩小压力,灵活应对各种量级的流量回放场景。

操作步骤

  1. 开通 SLS 日志服务 [ 1] ,将 Access Log 投递到 SLS 中。如您使用阿里云 MSE 网关,阿里云 ALB 网关或阿里云 CLB 网关,可直接开启日志投递。如果您使用自建网关,请注意 Access Log 需要符合一般规范。详见使用须知 [ 2]

  2. 登录 PTS3.0 控制台 [ 3] -创建场景-Access Log 压测。

在这里插入图片描述

  1. 确保已开通 SLS 日志服务,选择 Access Log 所在 SLS 日志 region,SLS 日志 project,SLS 日志库。设置查询参数,时间段,查询需要回放的 Access Log。

a. 确保能查出 Access Log 并且 Log 符合一般规范 [ 4]

在这里插入图片描述

  1. 点击左下角选择目标接口,等待日志分析完成。视查出的日志总数多少,耗时在 10 秒到两分钟不等。

5. 查看日志分析结果,并选择待压接口。

在这里插入图片描述

a. 如果日志中包含请求域名,且字段名在 [“host”, “http_host”, “authority”] 中,PTS 将会自动补全 host。同时你也可以自行修改。当前仅支持单 host,所有接口共享这个 host。

b. PTS 统计该时段内接口的请求总数,最大 QPS,分别在左右两侧列出排序图,可点击接口旁的灰色圆圈选择待压接口。已选的接口会展示在【已选目标接口】区域,点击可取消选择。

6. 登录态配置:如果请求选择的接口需要登录态信息,则需要配置登录接口。

a. 如果展示出的接口有做登录的接口,如 POST /login,可以选择【从接口选择】选项。 PTS会自动将该接口作为登录接口,使用日志中的参数,导出Cookie登录态使用,无需您手动配置。

b. 您也可以手动配置登录接口

  1. 输入登录接口地址,如 http://example.com/login

  2. 配置请求接口的 body 参数,如登录的 username,password。可以用 ${} 引用参数,用到的参数需要点击配置参数文件去做配置,上传或选择 csv 格式的参数文件,然后配置参数名。

在这里插入图片描述

7. 如果请求选择的接口不需要登录,则勾选【目标接口无需登录】。

在这里插入图片描述

  1. 点击确定后,跳转到 PTS 场景编辑页面,可在此页面进一步编辑生成的场景,也可以直接进行调试和压测。

在这里插入图片描述

a. 点击【数据导出】可编辑使用的 Cookie 数。如需要使用其他登录态比如 token,点击登录接口后,设置出参,并在数据导出节点配置导出。

b. 点击任意接口,可为接口添加 Header。

c. 下滑到压力模式配置,可以配置施压模型和施压量级。如果需要内网环境才能请求,也可以在此配置 VPC 信息。

在这里插入图片描述

  1. 开始压测。

在这里插入图片描述

可以在压测中页面看到请求 QPS 时序变化图,请求成功率,接口维度的 metrics 信息。还能进行场景调速,实现 API 维度的速率调整。

从请求采样日志中可以看到,请求已经带上登录接口返回的 cookie 和从日志中抓出来的参数,回放了 Access Log 中记录的请求。

在这里插入图片描述

  1. 查看压测报告。可在压测报告中看到全场景维度,api 维度的 metrics 信息和时序图,请求采样日志等等。

在这里插入图片描述

点击此处立即开通性能测试 PTS,领取 5000 VUM 额度免费试用!加入钉钉群(群号:44850859)获得在线技术支持。

相关链接:

[1] SLS 日志服务

https://sls.console.aliyun.com/

[2] 使用须知

https://help.aliyun.com/zh/pts/how-to-initiate-pressure-testing-from-access-log#c34e461632ctg

[3] PTS3.0 控制台

https://ptsnext.console.aliyun.com/#/create/scene

[4] 一般规范

https://help.aliyun.com/zh/pts/how-to-initiate-pressure-testing-from-access-log#c34e461632ctg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu22.04手动安装fabric release-2.5版本

这个过程稍微有点复杂,但完整操作完成以后会对Fabric网络有更加深入的理解,方便后续自己手动搭建Fabric网络。这个过程需要手动逐个下载Fabric源代码、使用命令下载Fabric镜像和用Git下载例子程序。 Fabric源代码主要用途是用来编译cryptogen、configtx…

ElasticSearch(六)— 全文检索

一、match系列查询 前面讲到的query中的查询,都是精准查询。可以理解成跟在关系型数据库中的查询类似。match系列的查询,是全文检索的查询。会通过分词进行评分,匹配,再返回搜索结果。 1.1 match 查询 "query": {&qu…

按图搜索新体验:阿里巴巴拍立淘API返回值详解

阿里巴巴拍立淘API是一项基于图片搜索的商品搜索服务,它允许用户通过上传商品图片,系统自动识别图片中的商品信息,并返回与之相关的搜索结果。以下是对阿里巴巴拍立淘API返回值的详细解析: 一、主要返回值内容 商品信息 商品列表…

20240725项目的maven环境报红-重新配置maven

1.在编辑器里面打开项目,导入源码 (1)找到项目的地址C:\Users\zzz\IdeaProjects\datasys,然后右击用idea编辑器打开。 (2)idea中上菜单栏打开open,然后输入file,选择源代码文件 2.…

primetime如何合并不同modes的libs到一个lib文件

首先,用primetime 抽 timing model 的指令如下。 代码如下(示例): #抽lib时留一些margin, setup -max/hold -min set_extract_model_margin -port [get_ports -filter "!defined(clocks)"] -max 0.1 #抽lib extract_mod…

算法学习笔记(8.8)-多重背包

目录 Question: 思路解析: 代码示例 多重背包的优化问题: 1.二进制优化 代码示例: 2.单调队列优化(滑动窗口) 代码示例 Question: 4. 多重背包问题 I - AcWing题库https://www.acwing.com/problem/content/description/4/ 多重背包简单来说其…

深入理解 Java 虚拟机第三版(周志明)

这次社招选的这本作为 JVM 资料查阅,记录一些重点 1. 虚拟机历史 Sun Classic VM :已退休 HotSpot VM:主流虚拟机,热点代码探测技术 Mobile / Embedded VM :移动端、嵌入式使用的虚拟机 2.2 运行时数据区域 程序计…

基于java多媒体网络教学平台设计与开发

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

使用 Visual Studio 2022 自带的 cl.exe 测试编译 opencv helloworld

1. 参考博客&#xff1a;https://blog.csdn.net/yangSHU21/article/details/130237669( 利用OpenCV把一幅彩色图像转换成灰度图 )( 代码用的此博客的&#xff0c;就改了下图片文件路径而已 )。 2. 编译探索步骤&#xff1a; test.cpp&#xff1a; #include <iostream>…

三维点云深度网络 PointNeXt 的安装配置与测试

Title: 三维点云深度网络 PointNeXt 的安装配置与测试 文章目录 前言I. 环境创建1. 容器创建2. 容器中安装 CUDA Toolkit 11.3 II. 安装过程1. 安装 PointNeXt2. 解决安装问题 III. 数据准备1. 数据准备的执行2. 数据准备的原理 IV. 运行测试1. 显存溢出2. 训练3. 测试4. 标注颜…

UDP/TCP协议解析

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

mysql一个小问题引发的思考-mysql类型转换-查询缓存 及 MYSQL查询缓存以及自动选择不使用查询缓存的情况

一、mysql一个小问题引发的思考-mysql类型转换-查询缓存 最近在做的一个项目中有一个SQL语句发现点问题&#xff0c;大概如下&#xff1a; select * from table where cid0 or find_in_set(1, cid); 数据表中的字段cid是字符串类型&#xff0c;原来的后端同学未提过此字段还能是…

Pytorch使用教学3-特殊张量的创建与类型转化

1 特殊张量的创建 与numpy类似&#xff0c;PyTorch中的张量也有很多特殊创建的形式。 zeros:全0张量 # 形状为2行3列 torch.zeros([2, 3]) # tensor([[0., 0., 0.], # [0., 0., 0.]])ones:全1张量 # 形状为2行3列 torch.ones([2, 3]) # tensor([[1., 1., 1.], # …

IEC104转MQTT网关轻松将IEC104设备数据传输到Zabbix、阿里云、华为云、亚马逊AWS、ThingsBoard、Ignition云平台

随着工业4.0的深入发展和物联网技术的广泛应用&#xff0c;IEC 104&#xff08;IEC 60870-5-104&#xff09;作为电力系统中的重要通信协议&#xff0c;正逐步与各种现代监控、管理和云平台实现深度融合。IEC104转MQTT网关BE113作为这一融合过程中的关键设备&#xff0c;其能够…

人工智能:大语言模型提示注入攻击安全风险分析报告下载

大语言模型提示注入攻击安全风险分析报告下载 今天分享的是人工智能AI研究报告&#xff1a;《大语言模型提示注入攻击安全风险分析报告》。&#xff08;报告出品方&#xff1a;大数据协同安全技术国家工程研究中心安全大脑国家新一代人工智能开放创新平台&#xff09; 研究报告…

LeetCode24 两两交换链表中的节点

前言 题目&#xff1a; 24. 两两交换链表中的节点 文档&#xff1a; 代码随想录——两两交换链表中的节点 编程语言&#xff1a; C 解题状态&#xff1a; 没画图&#xff0c;被绕进去了… 思路 思路还是挺清晰的&#xff0c;就是简单的模拟&#xff0c;但是一定要搞清楚交换的…

路由表与IP数据报的转发

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、相关知识 1、路由类型 路由表中有3类路由&#xff1a;直连路由、静态路由、动态路由 直连路由&#xff1a;一般指去往路由器接口直接连接网络的…

Godot游戏制作 05收集物品

创建新场景&#xff0c;添加Area2D节点&#xff0c;AnimatedSprite2D节点 &#xff0c;CollisionShape2D节点 添加硬币 按F键居中&#xff0c;放大视图。设置动画速度设为10FPS&#xff0c;加载后自动播放&#xff0c;动画循环 碰撞形状设为圆形&#xff0c;修改Area2D节点为Co…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作

目录 项目论文介绍 论文中实际开展的工作 非扩散性的肖像动画 基于扩散的肖像动画 方法论 基于Ubuntu的部署实践开始 1. 克隆代码并准备环境 2. 下载预训练权重 3. 推理 快速上手 驱动视频自动裁剪 运动模板制作 4. Gradio 界面 5. 推理速度评估 社区资源 政安…

Apollo部署与简易架构梳理

文章目录 apollo 安装apollo的基本架构组件机制component编译与加载 节点通讯数据的传输消息读写的实现消息的写端消息读端 常用术语ComponentChannelTaskNodeReader/WriterService/ClientParameter服务发现CRoutineSchedulerMessageDag文件Launch文件Record文件Mainboard Moni…