头图

2025年伊始,Sermant社区正式发布了 2.2.0 Release版本,这也是Sermant加入 CNCF基金会 后发布的第一个特性版本。本次更新在流量治理、外部Agent统一管理等方面推出了新的重要特性:

(1)在已有xDS服务的基础上,Sermant框架新增了对流控CRD配置的支持,并在流控插件做了适配。

(2)支持在Sermant Agent中挂载外部Agent,并且可通过Sermant Backend统一管理和观测。其中对OpenTelemetry做了兼容性支持。

(3)SpringBoot注册插件新增支持Nacos作为服务注册中心,用户在架构升级时可在ZooKeeper和Nacos中按需选型。

(4)指标服务在2.2.0版本正式发布,支持使用Prometheus监控Sermant和宿主微服务的运行状况,当前路由插件 已接入指标服务。

除此之外,本次版本更新还对社区提出的已知问题和部分功能进行了修复和优化。(Sermant官网:https://sermant.io/)。

一、 流量治理能力提升 -- Sermant新增支持基于xDS协议的流控能力

在上一版本,Sermant实现了基于xDS协议的路由和负载均衡能力,本次更新新增基于xDS协议的流控能力。

在Istio中,流控规则可以通过DestinationRuleVirtualServiceEnvoyFilter 自定义资源文件来进行配置。本次版本中,Sermant框架层基于xDS协议实现了上述流控配置的获取能力,并且在流控插件中接入了xDS协议,实现了重试、熔断、限流和错误注入功能。

基于xDS协议,Sermant框架层新增了对标准的VirtualService 、DestinationRule和EnvoyFilter下发的流控规则的支持,用户可通过原生的Istio流量管理的使用方式来进行配置。

例如,重试和错误注入可以通过VirtualService进行配置,该配置可以被Sermant框架层获取:

1. apiVersion: networking.istio.io/v1alpha3  
2. kind: VirtualService  
3. metadata:  
4.   name: spring-test-virtualservice  
5. spec:  
6.   hosts:  
7.   - spring-test  
8.   http:  
9.   - name: "v1-routes"  
10.     match:  
11.     - headers:  
12.         version:  
13.           exact: v1  
14.       ignoreUriCase: false  
15.     route:  
16.     - destination:  
17.         host: spring-test  
18.         subset: v1  
19.         port:  
20.           number: 8003  
21.     retries:  
22.       attempts: 2  
23.       perTryTimeout: 2s  
24.       retryOn: gateway-error  
25.     fault:  
26.       delay:  
27.         percentage:  
28.           value: 50  
29.         fixedDelay: 5s  
30.       abort:  
31.         percentage:  
32.           value: 50  
33.         httpStatus: 503

其他的流控相关配置与之类似,更多指导请参考基于xDS服务的流控能力 说明。

流控插件基于上述能力,新增实现了基于xDS协议的流控功能(下称xDS流控)。在Kubernetes场景下,微服务通过接入该能力,可以有效提升系统的可靠性,降低故障区域对业务的影响。

本次2.2.0版本,xDS流控支持对HttpClient、OkHttp、HttpURLConnection框架发起的HTTP调用加入流控能力,包括重试、熔断、错误注入,支持对SpringBoot等服务端框架执行限流能力,如下图所示:

• 重试:支持基于错误码、响应头、异常等条件对调用失败的流量执行重试功能。

• 熔断:在客户端,支持对同一被调用服务的并发量熔断和离群实例摘除能力。

• 错误注入:对客户端的HTTP调用请求添加延时或异常操作。

• 限流:基于令牌桶算法,在服务端实现实例级别的限流能力。

使用基于xDS的流控能力需在Sermant的配置文件中开启开关,同时微服务按照Kubernetes+Istio下的标准方式进行部署(只需要把envoy注入关闭即可)。具体使用方式可参考流控插件 说明。

二、外部Agent统一管理能力提升

2.1 Sermant新增支持挂载外部Agent

在JVM启动时,宿主微服务是支持多个JavaAgent同时挂载生效的。通过挂载多个Agent可以快速集成多种监控、运维、服务治理的功能,例如直接使用OpenTelemetry实现链路追踪,直接使用Sermant实现流量治理。但是多个JavaAgent同时运行可能会引入兼容性问题。

为了更好的管理多个Agent, Sermant新增支持挂载外部 Agent,并特别对OpenTelemetry做了兼容性支持和验证,在多场景功能需求和模块化解耦等方面可以体现其降低开发成本和集成开源生态的价值:

• 多场景功能需求:分布式追踪、性能监控、服务治理。

• 模块化解耦:不同Agent职责分离,并按需加载。

• 防止多个JavaAgent冲突:提前识别兼容性,可以在确保无冲突的前提下,让其他JavaAgent和Sermant得以协同工作,互不干扰。

在Sermant使用外部Agent的方式主要分为静态挂载和动态挂载:

• 静态挂载:支持手动配置、借助Sermant Injector自动挂载(推荐)。

• 动态挂载:支持使用脚本手动挂载、借助Sermant Backend轻松完成挂载(推荐)。

其中通过Sermant Injector和Backend挂载外部Agent是比较推荐的使用方式,下文会做详细说明,其他挂载方式请参考在Sermant中使用和管理外部JavaAgent 文档。

2.2 借助Sermant Injector挂载外部Agent

Sermant Injector基于Kubernetes准入控制器(Admission Controllers)特性开发而来,在2.2.0版本新增了外部Agent的自动挂载能力。

此前版本在部署Injector后,只需在部署微服务的yaml中添加sermant-injection: enabled即可实现自动挂载Sermant Agent。本次2.2.0版本新增的外部Agent动态挂载功能允许用户通过添加env.sermant.io/external.agent.injection: "OTEL"来实现自动挂载,其中Agent的名称可以由用户定义。由于Sermant对OpenTelemetry 做了兼容性验证,“OTEL”特指OpenTelemetry Agent。具体Injector使用请参考在Sermant中使用和管理外部JavaAgent 文档。上述部署微服务的yaml示例如下所示:

1. apiVersion: apps/v1  
2. kind: Deployment  
3. metadata:  
4.   name: spring-test  
5.   labels:  
6.     app: spring-test  
7. spec:  
8.   replicas: 1  
9.   selector:  
10.     matchLabels:  
11.       app: spring-test  
12.   template:  
13.     metadata:  
14.       labels:  
15.         app: spring-test  
16.         sermant-injection: enabled  
17.       annotations:  
18.         env.sermant.io/external.agent.injection: "OTEL"  
19.     spec:  
20.       containers:  
21.       - name: spring-test  
22.         image: spring-test:1.0.0  
23.         ports:  
24.         - containerPort: 8003

2.3 借助Sermant Backend挂载外部Agent

Sermant Backend是Sermant运行时的管理和可观测平台,在2.2.0版本 Backend新增了管理外部Agent的能力,方便用户在运维场景下快速挂载外部Agent和状态观测:

• 支持在前端控制台实现挂载外部Agent的能力。

• 支持在实例状态标签页展示已挂载的外部Agent信息,包括Agent名称和版本信息。

• 支持在事件管理标签页展示挂载外部Agent的具体事件信息。

三、服务架构升级能力提升 -- SpringBoot注册插件新增对Nacos注册中心的支持

SpringBoot注册插件提供服务注册与发现能力,方便用户在不修改代码的前提下快速接入注册中心,同时提供超时重试能力,实现服务调用的高可用,具体使用请参考Spring B oot注册插件 说明。

SpringBoot注册插件在之前版本仅支持ZooKeeper注册中心,但考虑到Nacos在国内互联网、政企等场景下的广泛使用以及社区的需求规划,在本次的2.2.0版本中SpringBoot注册插件新增支持Nacos注册中心,扩充了注册插件的应用场景。

企业的集中式网关架构可以借助SpringBoot注册插件实现去网关并接入Nacos等注册中心,逐步向云原生无代理服务网格架构演进,并具有如下优势:

• 代码无侵入,降低企业接入成本。

• 服务治理功能升级只需更新Sermant,业务应用不用重新出包,降低升级成本。

• 微服务可以灰度接入,保证架构升级的平滑演进,如下图所示。

四、可观测性能力提升 -- 指标服务

为满足用户对Sermant运行状态和性能的实时监控需求,以及对插件行为的深入洞察,Sermant2.1.0版本发布了指标服务的Beta版本,在经过社区的验证和不断优化后,本次版本正式发布指标服务,其实现架构如下图所示:

Sermant指标服务允许用户通过Prometheus等监控工具收集和展示Sermant的核心指标和插件的自定义指标,目前支持采集以下指标类型:

• Counter:计数器,只增不减

• Gauge:反应系统的当前状态

• Timer:用于记录时间

• Summary:记录数据的分布情况

用户可以在开发的插件中接入指标服务采集不同类型的自定义指标,通过这些指标,用户可以实时了解服务的健康状况,并及时发现潜在问题,确保服务稳定性。关于指标服务的详细指导请参考指标服务 文档。

目前路由插件已接入指标服务,实现了路由过程可观测的能力。以router\_request\_count指标为例,该指标的类型是Counter,用于记录服务路由请求的次数,用于对下游服务实例的负载压力进行观测,效果如下图所示。具体指标和使用请参考路由指标采集文档

五、总结

本次版本修复了社区中提出的Bug,例如流量标签透传插件可能重复添加header的问题、路由插件HttpServletRequest无法获取InputStream的问题等;还对已有能力进行了优化,例如基于xDS路由能力的性能提升、动态挂载插件支持自定义安装路径等。具体Release Note可以查阅GitHub发布页

本次版本更新在流量治理、外部Agent统一管理等方面做了大量工作,包括基于xDS协议的流控能力、支持挂载外部Agent、SpringBoot注册插件支持Nacos注册中心、指标服务等,进一步提升了Sermant服务治理能力的完备性。未来我们将在云原生领域持续演进,为社区用户带来更好的体验。

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

----------------------------------------------------------------

Sermant——CNCF官项目

官网:https://sermant.io

GitHub仓库地址:https://github.com/sermant-io/Sermant

扫码加入Sermant社区交流群


华为云开源
6 声望3 粉丝