sandbox repeater的qunar实践。
qunar目前使用sandbox repeater做录制回放,包括后续要做的全链路压测,所有使用到mock功能的地方。
mock功能最痛苦的地方在于对需要mock地方的梳理。目前对于跨应用链路的梳理业界已经比较成熟,比如阿里的鹰眼,skywalking等,qunar也有自己的链路追踪系统。所以跨应用的调用梳理和mock已经不是特别大的问题。
但是复杂业务场景很多jvm级方法也需要mock,这在qunar内部大量使用。那么如何梳理出jvm级的调用链路就很重要,目前业界没有特别成熟的方案。
想要获取jvm方法调用链路的主要思路有这么几个:
1.复用异常栈
java的异常中可以携带调用信息,只需要在合适的位置抛出异常(自抛自接,不能影响业务),然后将异常中的链路信息记录下来即可。
这是一个反向逻辑,如果把方法调用想象成一棵树,那么要找到叶子,在每个叶子处抛异常。这个找叶子的过程会有挑战。
2.jvm-sandbox
jvm-sandbox提供了事件响应机制,比如qunar正在使用的jvm-sandbox-repeater。无论是sandbox还是repeater都可以将jvm级方法录制下来。
参考官方文档
"javaSubInvokeBehaviors":[ 需要录制和mock的java方法的配需要
{
"classPattern":"com.qunar.flight.fuwu.*",
"includeSubClasses":false,
"methodPatterns":[