Sermant运行流程学习笔记,速来抄作业

💡 原文中文,约5400字,阅读约需13分钟。
📝

内容提要

本文介绍了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的相互配合,以实现精准筛选工作。

🏷️

标签

➡️

继续阅读