开源测试工具 jvm-sandbox-repeater 源码阅读笔记--起始篇

ELes for PPmoney · 2019年08月31日 · 3726 次阅读

开篇背景

最近阿里开源了一个可以免侵入代码对实现流量录制回放的工具jvm-sandbox-repeater,由于工作需要捣鼓了一段时间,为了更深入地学习这个开源工具,在这里以写笔记的方式记录下自己源码阅读的理解。在记录自己阅读情况的同时,也想分享自己的学习经验,可以供有需要的人做个参考。

因为我的 java 基础并不扎实,所以肯定会存在理解错误的情况。请大家看文章的时候带着辩证的眼光去看,有疑问有遗漏欢迎提出一起讨论,有错误的地方恳请指正。

阅读建议

阅读之前建议大家先上手使用一下这个工具,对这个工具的使用模式有了大致的了解了再进行源码阅读。预习资料:

那么接下来我们进入正题。

模块结构

elesgongdeMac-mini:jvm-sandbox-repeater gongying$  tree -L 1
.
├── LICENSE  
├── Readme.md  
├── bin      
├── docs  
├── hessian-lite
├── pom.xml 
├── repeater-client     
├── repeater-console 
├── repeater-module  
├── repeater-plugin-api    
├── repeater-plugin-core   
├── repeater-plugins
└── travis.sh

核心模块

repeater-module

repeater 模块,负责的是模块对外的交互、插件装配以及一些 spring 的类信息捕捉。

repeater-plugin-api

repeater 插件 api 库,主要定义了一些实体类、api、spi 和 exception,这里的每个类以及方法都有详细注释说明用途,是一个非常重要的阅读源码入口

repeater-plugin-core

repeater 插件 core 库,实现了 api 中的接口逻辑,是 repeater 中最核心模块,从这里可以了解到 api 中不同用途的接口是怎么样实现的,并且可以从这里了解整个录制回放过程的实现链路。

repeater-plugins

repeater 的插件库,以 repeater-plugin-core 为基础,针对不同类型的协议、不同类型的中间件进行拓展形成插件。每一个插件都是一个模块,而且实现代码非常少。官方有提供插件开发解析(传送门),从这篇解析我不得不感叹这个 repeater 插件 api 库的设计真是太棒了!少量的代码就能实现有效的拓展。

辅助模块

repeater-console

repeater 服务端模式下的服务端应用,提供内存模式下的保存录制记录、回放记录的方法。
另外也包含了官方文档示例中使用的应用接口。

repeater-client

从 java 回放器的备注信息上来看,是在一个为了支持在 attach 模式下也能获取到 spring 内部 bean 的模块,需要引入应用代码中使用。

hessian-lite

序列化工具库,repeater 主要使用的序列化类型是 hessian 序列化,录制结果保存与读取、回放结果保存与读取都使用到了这个工具库。

bin

脚本库,包含打包脚本、健康检查脚本以及一些 standlone 模式下的配置文件等。
本地开发可以直接使用install-local.sh完成打包 + 本地部署。
bootstrap.sh中可以看到如何启用调试模式,如果以 agent 模式启动,建议将 suspend=n 改为 suspend=y 即可

${JAVA_HOME}/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 \
     -javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=8820\;server.ip=0.0.0.0 \
     -Dapp.name=repeater \
     -Dapp.env=daily \
     -jar ${HOME}/.sandbox-module/repeater-bootstrap.jar

docs

使用说明文档。

模块间的关系

待填坑

共收到 0 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册