重磅更新!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
- 扫码加入 Sermant 社区交流群
重磅更新!Sermant 1.2.0 release版本新特性速览的更多相关文章
- Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...
- c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】
引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...
- C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系
C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...
- 0.9.0.RELEASE版本的spring cloud alibaba sentinel+gateway网关实例
sentinel除了让服务提供方.消费方用之外,网关也能用它来限流.我们基于上次整的网关(参见0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway网关实 ...
- 0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway网关实例
gateway就是用来替换zuul的,功能都差不多,我们看下它怎么来跟nacos一起玩.老套路,三板斧: 1.pom: <?xml version="1.0" encodin ...
- 0.9.0.RELEASE版本的spring cloud alibaba sentinel+feign降级处理实例
既然用到了feign,那么主要是针对服务消费方的降级处理.我们基于0.9.0.RELEASE版本的spring cloud alibaba nacos+feign实例添油加醋,把sentinel功能加 ...
- 0.9.0.RELEASE版本的spring cloud alibaba sentinel限流、降级处理实例
先看服务提供方的,我们在原来的sentinel实例(参见0.9.0.RELEASE版本的spring cloud alibaba sentinel实例)上加上限流.降级处理,三板斧只需在最后那一斧co ...
- 0.9.0.RELEASE版本的spring cloud alibaba sentinel实例
sentinel即哨兵,相比hystrix断路器而言,它的功能更丰富.hystrix仅支持熔断,当服务消费方调用提供方发现异常后,进入熔断:sentinel不仅支持异常熔断,也支持响应超时熔断,另外还 ...
- 0.9.0.RELEASE版本的spring cloud alibaba nacos+feign实例
这里的feign依然是原来的feign,只不过将注册中心由eureka换成了nacos.服务提供方参见0.9.0.RELEASE版本的spring cloud alibaba nacos实例,消费方跟 ...
- 0.9.0.RELEASE版本的spring cloud alibaba nacos实例
简而言之,nacos与eureka的不同之处有三:后台老板.部署方式.功能.nacos是阿里的,eureka是奈飞的:nacos有自己的安装包,需要独立部署,eureka仅作为一个服务组件,引入jar ...
随机推荐
- 【源码解读(一)】EFCORE源码解读之创建DBContext查询拦截
引言 在网上很少看到有关于系统讲解EFCore源码的,可能大概也许是因为EFCore的源码总体是没有asp.net web的源码流程清晰,正如群友所说,EFCore的源码大致看起来有点凌乱,与其说凌乱 ...
- We Need More Bosses 题解
We Need More Bosses 题目大意 给定一张图,找到两个点,使得这两个点之间的所有路径必须经过的边最多. 思路分析 我们先来思考一下如果已知两个点,怎么求两个点之间必须经过的边的数量. ...
- [最优化DP]决策单调性
决策单调性的概念&证明工具: 决策单调性,是在最优化dp中的可能出现的一种性质,利用它我们可以降低转移的复杂度. 首先dp中会有转移,每个状态都由若干个状态转移而来,最优化dp比较特殊,只能由 ...
- VS Code C# 开发工具包正式发布
前言 微软于本月正式发布Visual Studio Code C#开发工具包,此前该开发套件已经以预览版的形式在6月份问世.经过4个月的测试和调整,微软修复了350多个问题,其中大部分是用户反馈导致的 ...
- 自定义MyBatis拦截器更改表名
by emanjusaka from https://www.emanjusaka.top/archives/10 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请留下原文地址. 自定义MyBati ...
- TOPSIS模型
TOPSIS模型主要是用于评估类模型 一些基本概念: 因为TOPSIS模型是用于评价类的模型,所以会有一些指标的概念,所有指标并非越大越好,例如我们在评价一人的时候会有成绩.和他人发生争吵的次数这两个 ...
- Android WebAPIOperator
package com.example.myapplication2.models.CommonClasses; import org.json.JSONObject; import java.io. ...
- SQL改写案例4(开窗函数取中位数案例)
周总找我问个报表SQL实现逻辑的案例,废话不说给他看看. 原SQL: SELECT d.tname 姓名, d.spname 岗位, d.sum_cnt 报单单量, d.min_cnt 放款单量, d ...
- SpringBoot 项目优雅实现读写分离
一.读写分离介绍 当使用Spring Boot开发数据库应用时,读写分离是一种常见的优化策略.读写分离将读操作和写操作分别分配给不同的数据库实例,以提高系统的吞吐量和性能. 读写分离实现主要是通过动态 ...
- 01_实验一_操作系统的启动start
实验一 操作系统的启动 从源代码到可运行的操作系统(前置知识) API 与 SDK 以 C 语言编写的操作系统为背景进行介绍,EOS 是由 C 语言编写的 操作系统和应用程序之间一个重要的纽带就是应用 ...