Sermant运行流程学习笔记,速来抄作业
内容提要
本文介绍了Sermant的整体架构和java agent与bytebuddy的使用场景。AgentLauncher是java agent的入口类,premain方法是入口执行的主要方法。文章还介绍了spi的加载过程和插件的安装过程。最后以标签路由为例,介绍了下游拦截处理的过程。整体流程需要实践和深入了解。
延伸解读
Sermant 架构中各组件的角色
Sermant 整体架构包含 Sermant Agent、Sermant Backend、Sermant Injector 和动态配置中心。其中 Sermant Agent 是核心,提供字节码增强基础能力及各类服务治理能力;其他组件为配套,如 Backend 用于后台展示,Injector 可能负责注入,动态配置中心提供配置管理。理解这些组件的分工有助于把握 Sermant 的整体运作。
Java Agent 与 ByteBuddy 的典型应用
Java Agent 与 ByteBuddy 的组合在多个知名项目中得到应用,如 SkyWalking、Sermant、Arthas 和 Mockito。Java Agent 提供了在 JVM 启动或运行时修改字节码的能力,而 ByteBuddy 则简化了字节码生成和操作。这种组合使得无侵入式的监控、诊断和测试成为可能,Sermant 正是利用这一机制实现服务治理。
Sermant 入口类与启动模式
AgentLauncher 是 Sermant 的 Java Agent 入口类,其 premain 和 agentmain 方法分别对应静态和动态启动模式。通过 pom.xml 中的 Premain-Class 和 Agent-Class 配置可以确认这一点。premain 方法调用 launchAgent,其中 isDynamic 参数区分启动方式。入口类进一步涉及 AgentCoreEntrance 和 CommandProcessor 两个关键类,它们是理解 Sermant 启动流程的重点。
插件安装与字节码增强流程
Sermant 的插件安装通过 ByteEnhanceManager 初始化 Instrumentation,并利用 ByteBuddy 的 AgentBuilder 进行构建。自定义插件需实现 PluginDeclarer 接口,并通过 PluginCollector 获取声明器。安装时,遍历 BuilderAction 处理 builder,最终调用 installOn 完成增强。动态插件通过 enhanceDynamicPlugin 方法添加,整个过程体现了 Sermant 对插件化字节码增强的支持。
Q&A
Sermant的整体架构包含哪些组件?
Sermant的整体架构包括Sermant Agent、Sermant Backend、Sermant Injector和动态配置中心等组件。
Java agent与bytebuddy的组合使用场景有哪些?
Java agent与bytebuddy的组合使用场景包括skywalking、sermant、arthas和mockito。
AgentLauncher在Sermant中有什么作用?
AgentLauncher是Java agent的入口类,负责执行premain方法,作为Java agent的主要执行入口。
SPI的加载过程是如何进行的?
SPI的加载过程会初始化所有服务,并启动事件以收集服务启动信息,确保服务能够正常启动。
如何定义自定义插件?
自定义插件需要实现PluginDeclarer接口,并通过插件收集器获取插件声明器。
标签路由下游拦截处理的过程是怎样的?
标签路由下游拦截处理涉及多个Declarer和Interceptor的相互配合,以实现精准筛选工作。