Skip to content

请求匹配

Mingliang Tan edited this page Feb 15, 2019 · 1 revision

回放的时候需要对知道什么样的请求过来,给什么样的响应回去。

理论上来说,一个程序执行的过程中时间顺序是确定的,通过录制的时序就可以做回放。但是在现实的场景中,这种实现非常脆弱且不满足需求。因为大部分重构都需要调整调用顺序,如果回放完全基于调用顺序,则无法满足重构的功能回归的需求。

匹配的算法如下:

块匹配算法

  • n-gram 分词:n 取值是 16 个 byte
  • 按 phrase 模式进行分词后的匹配打分
  • 分词后的首个 chunk 进行加权匹配,因为 http 头部的 url 最有区分度
  • 首个 chunk 要求是连续16个 readable bytes,过滤掉了二进制内容。主要是匹配 thrift 请求过滤到 size 的差异引起的问题
  • 优先按顺序向后搜索(阈值 0.85),如果第一轮匹配不上则回到头部从头搜索(阈值0.1)
  • 基本上就是一个比较简单的全文检索的实现模式,分词+打分

余弦相似度匹配

  • 分词:把连续的可见字符分为一个 token,不可见字符单字符一个 token。
  • 向量:对录制的流量、回放的流量进行分词,并计算向量
  • 余弦相似度:计算回放流量和所有的录制流量的余弦相似度,取相似度最大 且 大于相似度阈值的录制流量,作为返回值
Clone this wiki locally