写点什么

重磅更新!Sermant 1.2.0 release 版本新特性速览

作者:华为云开源
  • 2023-10-28
    广东
  • 本文字数:3067 字

    阅读完需:约 10 分钟

重磅更新!Sermant 1.2.0 release版本新特性速览

10 月,Sermant 社区正式发布了1.2.0 release版本,距离上一次的大版本发布仅三个月。本次新版本带来了多个令人兴奋的新特性,主要包含 Sermant Agent 框架能力的优化和提升以及新增了流量标签透传插件,将极大地提升用户和开发者的体验,帮助大家将 Sermant 运用到更多的流量治理场景中。

(Sermant 官网:Sermant

一、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 作为动态配置中心:

  1. # 指定配置中心的服务端地址,修改为 nacos 的地址

  2. dynamic.config.serverAddress=127.0.0.1:8848  

  3. # 指定动态配置中心类型, 取值范围为 NOP(无实现)、ZOOKEEPER、KIE、NACOS  

  4. 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 作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。



发布于: 刚刚阅读数: 5
用户头像

华为云开源官方博客--携手共建云原生根社区 2023-03-13 加入

还未添加个人简介

评论

发布
暂无评论
重磅更新!Sermant 1.2.0 release版本新特性速览_云原生_华为云开源_InfoQ写作社区