关于服务治理:Sermant-的整体流程学习梳理
作者:用友汽车信息科技(上海)有限公司 刘亚洲 Java研发工程师 一、sermant架构Sermant整体架构包含Sermant Agent、Sermant Backend、Sermant Injector、动静配置核心等组件。其中Sermant Agent是提供字节码加强根底能力及各类服务治理能力的外围组件,Sermant Backend、Sermant Injector、动静配置核心为Sermant提供其余能力的配套组件。 二、java agent和bytebuddy组合应用场景比拟典型的就是skywalking、sermant、arthas、mockito。如果说java agent开了一扇门,那么bytebuddy在开的这扇门中关上了一片新的天地。 三、Sermant的入口后面咱们说AgentLauncher是java agent的入口,为什么这么说呢? <manifestEntries> <Premain-Class>com.huaweicloud.sermant.premain.AgentLauncher</Premain-Class> <Agent-Class>com.huaweicloud.sermant.premain.AgentLauncher</Agent-Class> <Can-Redefine-Classes>true</Can-Redefine-Classes> <Can-Retransform-Classes>true</Can-Retransform-Classes></manifestEntries>答案能够从pom.xml中找到答案,这里能够看到基于Premain-Class和Agent-Class的两个类都指向了AgentLauncher这个类。因而咱们能够十分确认的必定它就是javaagent入口类。相似于java程序有一个main的执行入口,而java agent有一个本人的入口类premain。 因而能够看到它的入口执行main: /** * premain * * @param agentArgs premain启动时携带的参数 * @param instrumentation 本次启动应用的instrumentation */public static void premain(String agentArgs, Instrumentation instrumentation) { launchAgent(agentArgs, instrumentation, false);}/** * agentmain * * @param agentArgs agentmain启动时携带的参数 * @param instrumentation 本次启动应用的instrumentation */public static void agentmain(String agentArgs, Instrumentation instrumentation) { launchAgent(agentArgs, instrumentation, true);}基于premain模式的和基于agent模式,区别在于是否为isDynamic。从这里咱们能够看到这里提出了两个类值得咱们去关注:AgentCoreEntrance、CommandProcessor,也即sermant这个我的项目的两个重点类。 更多须要理解的,能够参考byte-buddy这个开源我的项目。 ...