全链路压测实战 30 讲
高楼
盾山科技 CEO,7DGroup 创始人
21053 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
全链路压测实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

22 | 压测平台:如何解决 GoReplay 动态数据关联?

你好,我是高楼。
在第 6 讲,我们说过目前主流的流量回放工具都无法轻易解决 session 的问题,所以从系统安全的角度来说,工具需要做对应的改造。
这节课,我们来聊一下 GoReplay 如何通过改造解决回放过程中动态数据关联的问题。

关联是什么?

我们可以把关联简单地理解为把服务端返回的某个值,传递给后续的调用使用。我们可以在很多场景用到它。举个例子,我们常见的“Session ID”就是一个典型的需要关联的数据。它需要在交互过程中标识一个客户端身份,这个身份要在后续的调用中一直存在,否则服务端就不认识这个客户端了。
对每一个性能测试工具来说,关联是应该具备的基本功能,GoReplay 也不例外。
但是有很多新手同学对关联的逻辑并不是十分理解,甚至有人觉得关联和参数化(流量数据)是一样的,因为它们用的都是动态的数据,并且关联过来的数据也可以用到参数化(流量数据)中。其实,这二者还是有所不同的,因为关联的数据后续脚本中会用到,但参数化就不会。
现在有很多全链路压测都是由单接口基准创建的,这样一来,关联就用得比较少。因为接口级的基准场景都是一发一收就结束了,不需要将数据保存下来再发送出去。
那么正常情况下,什么样的场景需要关联呢?一般情况下, 它们需要满足下面几个条件:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

GoReplay是一个强大的工具,可以通过中间件来解决回放过程中动态数据关联的问题。文章首先介绍了关联的概念和适用场景,指出了关联需要满足数据由服务器端生成、在每次请求时动态变化、在后续请求中需要再发送出去等条件。然后详细介绍了如何通过中间件来实现动态数据关联,中间件可以实现自定义逻辑,如认证、重写和筛选请求等。通过传入Middleware参数,可以发送命令给GoReplay,拉起一个进程执行命令。文章还提供了一个简单的使用bash echo中间件的示例。整体来说,本文通过介绍关联的概念和中间件的使用,为读者提供了解决动态数据关联问题的思路和方法。文章内容详实,通过实际示例演示了中间件的基本功能和使用方法,为读者提供了解决动态数据关联问题的思路和方法。文章还提到了GoReplay中间件的原理和常用用法,以及通过扩展Middleware实现关联功能的例子。文章最后提出了课后题,鼓励读者思考和交流讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全链路压测实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 坂田隐士
    Goreplay是按时间戳发送请求而不是等待响应后发送,如果某些关联响应不能在录制的响应时间内返回,后续的回放就会失败,即使middleware脚本做了关联也会受影响。h这个有解决方法吗

    作者回复: GoReplay 支持用任何语言编写中间件的协议,同时中间件程序还需要格外注意一点,就是中间件和 Gor 的所有通信都是异步,因此,我们不能保证原始请求和响应消息会一个接一个地出现。如果业务逻辑依赖于原始响应或回放响应,那么中间件应用程序就应该处理好状态,也就是要做好动态数据的处理动作。

    2021-12-20
    1
  • 冒冒
    感觉技术难度有点高啊,有没有从入门开始的课程

    作者回复: 工作中需要的技术就是这样的。入门的学习得靠自己努力了。

    2021-12-15
  • aMaMiMoU
    老师,您好: 如果是通过goreplay或者tcpcopy在线引流的方式直接把捕获的流量打到目标待压测端,是否就不再需要处理中间态的关联动态数据了呢?因为实时捕获的请求里是包含了服务端响应的动态数据包。

    作者回复: 实时引流可以不用处理,但录制回放就需要考虑了。

    2021-12-09
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部