解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件
💡
原文中文,约4000字,阅读约需10分钟。
📝
内容提要
本文介绍了Sermant的动态接入能力,通过JavaAgent的静态加载和动态加载方式实现服务治理能力的接入。文章分析了动态加载方式的局限性,并解决了动态安装过程中的重转换和插件安装卸载时的互相影响问题。Sermant通过字节码增强锁和类文件转换器实现了不重复执行字节码增强和保证其他插件不失效的机制。文章总结了Sermant的热插拔能力的核心机制,并鼓励开发者和使用者参考官方文档和使用手册,期待更多的热插拔能力的分享。
🎯
关键要点
- Sermant是基于Java字节码增强技术的无代理服务网格,提供服务治理功能。
- 从1.2.0版本开始,Sermant实现了在服务不停机状态下进行安装和卸载的能力。
- JavaAgent有静态加载和动态加载两种方式,静态加载在应用启动时修改字节码,动态加载在运行时修改字节码。
- 动态加载方式存在局限性,如不能修改类的继承关系和添加静态代码块。
- Sermant通过字节码增强锁和类文件转换器解决了动态安装过程中的重转换和插件安装卸载时的互相影响问题。
- 在动态安装时,Sermant使用可重入的类转换器,确保不重复执行字节码增强。
- 在插件卸载时,Sermant释放AdviceKey锁,确保其他插件不失效。
- Sermant致力于提供高性能、可扩展、易接入的服务治理体验,欢迎开发者参与。
➡️