全新升级!Sermant 2.2.0 Release 版本正式发布
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 中,流控规则可以通过DestinationRule、VirtualService和 EnvoyFilter自定义资源文件来进行配置。本次版本中,Sermant 框架层基于 xDS 协议实现了上述流控配置的获取能力,并且在流控插件中接入了 xDS 协议,实现了重试、熔断、限流和错误注入功能。
基于 xDS 协议,Sermant 框架层新增了对标准的 VirtualService 、DestinationRule 和 EnvoyFilter 下发的流控规则的支持,用户可通过原生的 Istio 流量管理的使用方式来进行配置。
例如,重试和错误注入可以通过 VirtualService 进行配置,该配置可以被 Sermant 框架层获取:
其他的流控相关配置与之类似,更多指导请参考基于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 示例如下所示:
2.3 借助 Sermant Backend 挂载外部 Agent
Sermant Backend 是 Sermant 运行时的管理和可观测平台,在 2.2.0 版本 Backend 新增了管理外部 Agent 的能力,方便用户在运维场景下快速挂载外部 Agent 和状态观测:
• 支持在前端控制台实现挂载外部 Agent 的能力。
• 支持在实例状态标签页展示已挂载的外部 Agent 信息,包括 Agent 名称和版本信息。
• 支持在事件管理标签页展示挂载外部 Agent 的具体事件信息。
三、服务架构升级能力提升 -- SpringBoot 注册插件新增对 Nacos 注册中心的支持
SpringBoot 注册插件提供服务注册与发现能力,方便用户在不修改代码的前提下快速接入注册中心,同时提供超时重试能力,实现服务调用的高可用,具体使用请参考SpringBoot注册插件说明。
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 社区交流群
评论