上一篇文章介绍了ApiHelp的Api性能监控的相关功能和以及操作过程ApiHelp介绍。后面就开始正式的分享记录该功能的实现过程。本篇文章主要讲解ApiHelp内部实现架构设计,以及相关技术。
架构图:
ApiHelp内部分为4个组件和5种日志文件。
4个组件分别为 Run组件、View组件、Monitor组件、Enhance组件。
5种文件为:perf.log、trace.log、http.log、sql.log、run.log
【4个组件】:
Run组件:主要用于启动ApiHelp视图工具vm,需要注意的是该工具使用到了jvm种tool.jar内的相关工具方法,但是因为tool.jar并不属于jre内,所以jvm并不会加载到该类方法,所以run在启动是,进行了vm类加载器扫描范围的配置。
View组件:视图组件,主要用于视图展示、操作,以及日志文件分析功能。
Monitor组件:核心组件,主要实现调用enhance组件核心增强方法 以及 具体的监控工作,API执行过程中,记录相关的监控数据内容。(后续会介绍具体的监控设计手段)
Enhance组件:核心组件,用于目标程序相关类方法增强工作,达到监控目的。(后续详细介绍)
【5种日志】
perf.log : 用于记录当前请求API性能相关信息数据。
trace.log:用于记录当前API调用trace相关信息数据。
http.log:用于记录当前API相关http调用信息数据。
sql.log:用于记录当前API相关sql执行信息数据。
run.log:用于记录当前监控操作过程日志。
总结 架构和设计思路:
ApiHelp的设计思路 是通过外部程序组件view,将monitor组件attch到目标vm中,此时monitor就可以运行在目标vm内,通过enhance组件,对需要监控的类方法进行字节码增强,用于记录相关性能的信息,比如记录方法的执行时间等。最终被增强的目标类方法,执行时的记录数据会被monitor进行记录到本地日志文件中,最终由view组件进行解析和展示。
技术方案:
该工具实现的需要的技术不是很多,但是需要有一定的jvm原理知识,比如 java Attach技术、 虚拟机类加载原理、class字节码执行指令过程、ASM框架技术、等等,更多的知识点在后续分析中再介绍。