头图

9月底,Sermant社区正式发布了2.1.0 Release版本,本次版本更新为大家带来了许多新的重要特性。在此前版本xDS协议支持的基础上,2.1.0版本新增了路由和负载均衡的CRD的支持,同时路由插件也适配了当前的xDS协议。此外新增了RocketMQ灰度发布插件,首次支持了消息队列的灰度发布;用户体验上,我们对Backend的Agent管理功能再次进行了完善,现在可以直接在Backend上直接对插件进行动态热插拔。

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

一、Agent服务治理能力提升

1.1 Sermant框架新增支持xDS协议路由配置

Sermant框架层基于xDS协议实现了路由配置的获取能力,插件可以调用xDS路由配置服务接口获取Kubenetes Service的路由配置。Istio通过下发DestinationRuleVirtualService 自定义资源文件下发路由配置。Sermant基于xDS协议和Istio的控制平面协议进行通信获取路由配置。

该特性对标准的VirtualService 和DestinationRule下发的路由header、路径匹配等规则实现了支持。如下所示 

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name:
spring-test-virtualservice
spec:
  hosts:
  -
spring-test
  http:
  - name:
"v1-routes"
    match:
    -
headers:
       
version:
         
exact: v1
      uri:
       
exact: /test
     
ignoreUriCase: false
    route:
    -
destination:
       
host: spring-test
       
subset: v1
       
port:
         
number: 8003
     
weight: 100
  - name:
"base-route"
    route:
    -
destination:
       
host: spring-test
       
subset: base
       
port:
         
number: 8003

1.2 Sermant框架新增支持xDS协议负载均衡配置

Sermant框架层基于xDS协议实现了负载均衡配置的获取能力,插件可以调用xDS负载均衡配置服务接口获取Kubenetes Service的负载均衡配置。Istio通过下发DestinationRule自定义资源文件下发负载均衡配置。Sermant基于xDS协议和Istio的控制平面协议进行通信获取负载均衡配置。

该特性对标准的DestinationRule下发负载均衡策略实现了支持。如下所示
 

  apiVersion: networking.istio.io/v1alpha3
  kind: DestinationRule
  metadata:
    name:
  spring-test-destinationrule
  spec:
    host:
  spring-test.default.svc.cluster.local
   
  trafficPolicy:
     
  loadBalancer:
       
  simple: ROUND_ROBIN
    subsets:
    - name: v1
      labels:
       
  version: v1
     
  trafficPolicy:
       
  loadBalancer:
         
  simple: RANDOM
    subsets:
    - name:
  base
      labels:
       
  version: base

1.3 路由插件新增对xDS协议的支持

在2.1.0版本中,路由插件中的HTTP调用兼容了xDS协议,包括SpringCloud、HttpClient、HttpAsyncClient、OkHttp、HttpURLConnection,支持通过请求header和路径进行流量路由。在混合部署模式下的Sermant和envoy互调以及Proxyless模式下的挂载Sermant微服务之间的调用都已支持。

该能力开启与否只需在配置文件中进行开关控制,微服务部署按照Istio标准部署方式,只需要把envoy注入关闭即可。具体使用方式可参考路由插件说明
image.png

1.4 RocketMQ灰度发布

本次版本新增了消息队列灰度发布插件,在灰度流量的基础上增加环境灰度判断,通过在消息中设置不同属性标签消息以达到灰度效果。该特性可以使用灰度版本的微服务实例中生产者和消费者来生产灰度消息或者消费灰度消息,满足灰度发布在业务场景中定向生产和消费的需要,降低开发风险和试错成本,助力快速敏捷迭代。

在生产消息时,根据当前实例信息是否满足灰度环境及请求是否为灰度请求来设置灰度环境标签、灰度流量标签。

在消费消息时,如果当前实例信息满足灰度环境,那么当前实例归为灰度消费者,并在消费组名称后面拼接灰度环境标签,仅消费灰度环境标签、灰度流量标签消息;如果当前实例信息不满足灰度环境,那么当前实例归为基线消费者,基线消费消息时包含base、auto两种种模式:

  • base模式下,可根据配置过滤灰度组对应的标签的消息,如果没有配置,则默认消费所有消息;
  • auto模式下,在没有灰度消费组情况下,根据配置过滤灰度组对应标签的消息,然后定期检查当前服务地址、topic及消费组下是否有灰度消费组正在消费消息,如果存在,则不消费灰度消费组包含的灰度标签消息。
    image.png

二、  Sermant Backend治理能力提升

2.1 Sermant Backend对插件的热插拔管理的支持

在1.2.0 release版本后,我们支持了Sermant Agent框架和插件的动态安装和动态卸载,使得Sermant拓展出更多的Sermant的使用场景,例如故障注入等。

此前动态热插拔使用命令或脚本来执行,本次版本更新针对这一特性,在Sermant Backend新增了对插件热插拔、热更新管理的可视化支持。用户可以直接在Backend的实例状态管理页面中对指定服务实例上的插件进行一键卸载、安装、更新操作,同时还支持批量操作。命令执行成功后,可以在实例状态页面查看已经安装的插件的信息;在事件管理页面也可以收到插件安装、卸载的事件详情。
image.png

image.png

image.png
该特性提升了用户插件动态安装卸载的场景的便利性,丰富了Backend的观测管理能力,用户可以直观地对已经挂载Sermant的实例做热插拔插件的操作。

三、总结

本次版本还修复了社区中提出的issue,例如优雅上下线的偶发调用失败问题、Backend使用Redis存储心跳时的查询失败问题等。具体Release Note可以查阅GitHub发布页

我们最新发布的2.1.0版本深化了xDS协议的支持以及在插件中的应用,强化了灰度发布在消息队列场景的使用,并且提升了Backend在动态热插拔插件使用时的体验。未来我们将持续演进,给社区带来更多新的内容。


Sermant 作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。
• Sermant 官网:https://sermant.io
• GitHub 仓库地址:https://github.com/sermant-io/Sermant
• 扫码加入 Sermant 社区交流群
image.png


华为云开源
6 声望3 粉丝