Skip to content

流量回放实现原理

Mingliang Tan edited this page Feb 15, 2019 · 4 revisions

流量回放基于流量录制的代码实现,大部分流量录制需要关心的问题流量回放都关心。比如 rpc 调用链跟踪,libc 拦截等。

所以流量回放和录制公用了同一套代码,用 build tag 做区分。但是流量回放还有一些独有的问题需要解决:

原理

1、ElasticSearch => Session:mid 查询最近的录制的流量,Session 是录制结果

2、Session => ReplayingSession:ReplayingSession 是回放请求,绝大部分是 Session 上的 CallFromInbound 和 CallOutbound。但是还会额外指定一下哪些目录需要重定向,哪些文件需要mock等。

3、ReplyaingSession => ReplayedSession:这个是 koala-replayer.so 在 inbound 上启动的 http 接口。接收回放请求,执行回放,并同步返回回放的结果,都是JSON的。

4、ReplayedSession => Report:回放的结果是二进制的,而且没有经过diff比对。在 midi 里还要对结果进行解析然后比对,生成报告。

Clone this wiki locally