-
Notifications
You must be signed in to change notification settings - Fork 172
请求匹配
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。
- 向量:对录制的流量、回放的流量进行分词,并计算向量
- 余弦相似度:计算回放流量和所有的录制流量的余弦相似度,取相似度最大 且 大于相似度阈值的录制流量,作为返回值