重磅更新!Sermant 1.2.0 release版本新特性速览
本文分享自华为云社区《重磅更新!Sermant 1.2.0 release版本新特性速览》,作者:华为云开源。
10月,Sermant社区正式发布了1.2.0 release版本,距离上一次的大版本发布仅三个月。本次新版本带来了多个令人兴奋的新特性,主要包含Sermant Agent框架能力的优化和提升以及新增了流量标签透传插件,将极大地提升用户和开发者的体验,帮助大家将Sermant运用到更多的流量治理场景中。
(Sermant官网:https://sermant.io/zh)
一、Sermant Agent框架能力提升
1.2.0 release版本中,对诸多能力进行了优化或新增,包括支持Sermant Agent框架和插件的动态安装和动态卸载、支持动态配置服务对接Nacos配置中心、更好的类隔离能力、JDK11和JDK17的兼容等。在框架加持这些新版本特性后,可以使Sermant的开发和体验更加友好,同时也拓展出更多的Sermant的使用场景。
1.1 Sermant Agent框架以及插件的动态安装/卸载
新版本中,Sermant将原本默认的通过premain来启动Sermant Agent的方式改进为支持premain和agentmain两种方式启动,其中premain方式与此前版本使用方式一致。
新增的agentmain启动方式是为了支持Agent和插件的热部署方式,premain方式需要在应用程序启动时挂载Agent,而agentmain可以在应用程序运行时进行动态挂载Agent,也可以在运行时动态地卸载Sermant,在故障注入等需要动态进行字节码增强的场景中起到非常重要的作用。动态安装/卸载插件和动态安装/卸载Agent一样,用于服务治理场景中需要在应用运行时动态添加或移除额外功能的场景,例如在故障注入场景中通过动态地挂载不同的插件来实现注入不同的故障类型。
下图为Sermant的热插拔能力的示意图,在初始状态可以通过动态挂载Agent的能力安装字节码增强框架,然后可以通过动态挂载/卸载插件的能力在运行态增减所需服务治理能力,也可以直接将整个Agent进行卸载。
图 - Sermant Agent框架和插件的热插拔示意图
此项关键能力的更新使得Sermant的部署形态更加多样,适用场景更加广泛,使用者不再仅限于在启动时再挂载Sermant,业务可以实现不停机注入服务治理能力。
1.2 支持动态配置服务对接Nacos配置中心
动态配置中心为Sermant动态配置服务的配套组件,动态配置服务允许Sermant从动态配置中心拉取配置以实现丰富多样的服务治理能力。以往版本Sermant的支持的动态配置中心有Zookeeper和Kie,新版本适配了nacos的数据模型,支持从nacos下发配置并监听。
- Sermant动态配置模型基于Nacos配置中心的实现方式
Nacos自身的数据模型如下,通过Namespace、Group、Date ID能够定位到一个配置集:
图 - Nacos数据模型
Sermant动态配置的Group(分组信息):将Nacos的Namespace(命名空间)和配置分组(Group)组合起来作为Sermant的动态配置模型的分组信息。
Sermant动态配置的Key(配置项名称): Nacos的配置集ID(Data Id)作为Sermant的动态配置模型的配置项名称。
配置集(Data Id)可以通过不同的Namespace(命名空间)和配置分组(Group)进行隔离,不同的Namespace(命名空间)和配置分组(Group)下可以存在名称相同的配置集(Data Id)。保证Sermant通过不同的Group(分组信息)来对配置项进行隔离,同一个Group(分组信息)下可以有相同Key(配置项名称)。
- 使用Nacos作为Sermant的动态配置中心
将Sermant 1.2.0 release包中的/agent/config/config.properties配置文件中的相关配置修改如下,即可使用Nacos作为动态配置中心:
- # 指定配置中心的服务端地址,修改为nacos的地址
- dynamic.config.serverAddress=127.0.0.1:8848
- # 指定动态配置中心类型, 取值范围为NOP(无实现)、ZOOKEEPER、KIE、NACOS
- dynamic.config.dynamicConfigType= NACOS
Sermant中动态配置的模型和接口是统一抽象的,开发者对于动态配置节点的监听器的开发与此前版本保持一致。动态配置中心在Sermant中的角色和作用可以阅读相关博客《如何利用动态配置中心在JavaAgent中实现微服务的多样化治理》。
1.3 更好的类隔离能力
Sermant在1.2.0版本中对此前的类隔离框架和机制做了全面的优化,不仅保证了不向宿主服务引入类冲突问题,避免在开箱即用时对宿主服务造成负面影响,同时也了保障框架与插件、插件与插件之间不会引入类冲突问题,避免插件开发者因为和其他服务治理插件产生类冲突问题而苦恼。
- 新版本的类隔离结构
图 – Sermant的类隔离结构
- SermantClassLoader,破坏双亲委派,用于加载Sermant框架核心逻辑,并在AppClassLoader下隔离出Sermant的类加载模型。避免受到宿主服务自身复杂类加载结构的影响,减少应对不同类加载结构服务的适配需求。
- FrameworkClassLoader,破坏双亲委派,主要作用是隔离Sermant核心能力所引入的三方依赖,避免向宿主服务及服务治理插件引入类冲突问题。目前的主要场景 ①用于隔离Sermant的日志系统,避免对宿主服务的日志系统产生影响 ②隔离Sermant框架的核心服务(心跳、动态配置、统一消息网关)所需三方依赖。
- PluginClassLoader,遵循双亲委派,主要用于隔离Sermant各服务治理插件,避免不同服务治理插件之间产生类冲突问题。
- ServiceClassLoader,破坏双亲委派,主要用于隔离插件中的依赖,通过该类加载器加载插件服务的相关lib(插件服务会在插件加载时被Sermant初始化),开发者可任意引入三方依赖,无需关心对插件主逻辑的影响。
其中的PluginClassloader和ServiceClassloader不仅在类隔离中起到至关重要的作用,更是一种长远的考虑,为每个插件设计独立的类加载器,使得Sermant可以平滑的进行插件动态安装&卸载以及插件热更新。更详细的类隔离机制的介绍可以参阅相关博客《Sermant类隔离架构解析——解决JavaAgent场景类冲突的实践》。
二、插件能力提升
2.1 流量标签透能力
在微服务架构中,流量标签用于对流量进行标记和分类,能够在微服务之间实现更精细的路由、负载均衡和流控等流量治理能力。Sermant新版本插件部分本次主要新增了流量标签透传插件。该插件着手于解决流量标签在各种不同传媒介中(通信协议、进程内外)进行透传的问题,基于此能力可以实现全链路灰度发布、基于流量标签的流量控制等高阶服务治理功能。
- 流量标签透传插件简介
Sermant对于流量标签透传分为两大类:跨进程透传和进程内透传。跨进程透传是指在不同的服务实例进程中传递流量标记,例如http请求的客户端和服务端。进程内透传是指在一个服务实例的进程内传递流量标签,包括线程内传递和跨线程传递。
图 – Sermant中http/rpc请求的标签透传过程
图 – Sermant中消息队列的标签透传过程
新版本发布的流量标签透插件实现了上述两类标签的透传,并且支持了http协议、rpc协议、消息队列中间件,目前支持的组件包括Apache HttpClient、OKHttp、Dubbo、GRPC、Kafka等。
- 流量标签透传插件使用方式
该插件的使用支持静态配置和动态配置,只需将需要透传的流量标签做好配置,标签即可在全链路中进行透传,具体使用方式可参考官网使用文档。
流量标签透传作为JavaAgent中进行流量治理的基础能力,可以将其运用在全链路灰度发布、标签流控等复杂的流量治理场景,相关介绍可以参阅相关博客《流量治理的基石——基于字节码增强的全链路流量标签透传》
三、总结
本次更新主要带来了Sermant Agent框架和插件的动态挂载/卸载的支持、动态配置服务对nacos的支持、类隔离机制的优化以及流量标签透传能力的支持等。基于上述能力,Sermant可以在诸如故障注入、流量治理、动态配置等服务治理的场景发挥更关键的作用。
结束语
Sermant作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。
- Sermant 官网:https://sermant.io/zh
- GitHub 仓库地址:https://github.com/huaweicloud/Sermant

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OpenSergo & Dubbo 微服务治理最佳实践
01 Why 微服务治理? 现代的微服务架构里,我们通过将系统分解成一系列的服务并通过远程过程调用联接在一起,在带来一些优势的同时也为我们带来了一些挑战。 如上图所示,可以看到词云中所展示的都是目前微服务架构在生产上所遇到的挑战。比如,最常见的流量激增的场景,近一年内 AIGC 突然爆火,相关网站/服务都存在过因为激增流量导致服务不可用的情况,可能会让我们错过一个最佳的增长窗口。 再比如缺乏容错机制,某视频网站的某个服务异常,随调用链扩散,导致全站入口不可用,影响千万用户,产生实质性的经济损失。这些生产故障频频发生,也是在提醒我们稳定性是用好微服务的重大挑战之一。 为了保障微服务的稳定性,我们就需要做一些架构的演进。 我们先看一下左侧的微服务 3 大件,这个大家已经很熟悉了,通过这三者的配合,我们的应用就能够正常使用了,但是距离生产可用其实还有很大一段距离,各个企业和社区为了消除这其中的距离都有一些探索和实践,比如 Dubbo 社区在 Dubbo3 中引入一系列诸如流量管理、高可用性的能力来保障微服务的稳定性,这些措施可以统称为微服务治理。 所以其实可以看出大家已经意识到,从把微服务跑...
- 下一篇
深秋 寒露:是时候和 Zadig 说再见了
阅读原文/Zadig 在 Github/Zadig 在 Gitee 推荐阅读:是时候和 Jenkins 说再见了/Zadig vs. Jenkins 详细比对:时代的选择与开发者之选/平台工程和 AI 时代的新 10 亿开发者 2023 年 11 月 1 日 秋风起,露成霜,正是一年最美时 Zadig 团队踏入了 创业的第五个年头 开源的第 888 天 然而今天 我们要向 Zadig 说再见了 深秋外象趋冷 实则万物蛰伏 在孕育着新的生机 今天,我们向 Zadig 1.0 告别 迎来全新的 Zadig 2.0! 回顾开源的这两年多时间里 Zadig 1.0 已完成了 2 万 6 千多次的企业下载 发布了 21 个开源版本,10 个企业版本 在 2 千多家企业和团队深度使用 我们创作了 157 篇原创技术和产品文章 制作了 52 个独创的短视频 与 100 多位国内外商业、技术和产品领域的同仁伙伴建立了深厚的链接 今天,Zadig 已不再是婴儿 是一个坚定自信的少年 走进数千家企业和团队的日常工作中 让他们的工作更加高效愉悦 这段旅程,Zadig 背后的团队和社区一起 合作共创 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8