头图

作者:张豪鹏 华为云高级软件工程师

一、     背景

Sermant是基于Java字节码增强技术的无代理服务网格,业务应用通过JavaAgent的方式将Sermant挂载至目标进程中。其中动态配置是Sermant框架中的关键能力,它能够在微服务挂载Sermant运行的过程中动态地调整服务治理规则,实现运行时的管控。关于动态配置中心的介绍可以参考《如何利用动态配置中心在JavaAgent中实现微服务的多样化治理》。

为了用户能够在统一的控制台方便快捷地管理动态配置,在Sermant 2.0.0之后的版本里,Sermant Backend(下文简称Backend)新增了配置管理功能,目前已经支持了Zookeeper、Nacos和KIE三种配置中心类型。

本文以动态调整灰度发布场景的治理规则为例来展示Backend是如何管理插件的动态配置的。

二、     配置管理功能在灰度发布场景中的应用

灰度发布是一种常用的软件发布策略,旨在逐步将新功能或更新从一小部分用户扩展到更大范围的用户。这样可以在有限的风险下测试新功能的表现,并根据反馈进行调整。在灰度发布场景中新版本或功能只会被部署给一小部分用户或流量,然后逐步增加到更多的用户或流量中,出现问题时可以及时进行调整或回滚,保障整体系统的稳定性和可靠性。

Sermant的标签路由插件可以通过对服务提供者以服务粒度或者全局粒度配置路由规则,通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为流量染色、蓝绿发布、灰度发布、全链路灰度、同可用区优先调用等场景的能力基础。

在部署了Backend后,就可以通过Sermant来对各个插件的配置进行动态管理。标签路由插件支持下发动态配置来修正流量路由的方向和比例,实现上述的灰度发布功能。下面我们来以此场景来展示Backend是如果做到变更路由规则的。

首先,当没有新版本发布时,流量会路由至基线版本(1.0.0)的下游服务,如下图所示:

图片

图 – 无新版本发布时的流量分布
如果此时需要发布新的1.0.1版本并引入小规模的灰度流量。那么在Provider的1.0.1版本发布后,我们可以通过路由规则将10%流量分配至version为1.0.1的Provider,用于验证新版本功能,并保证如果新版本出现问题时只会影响少部分请求。此时可以通过Backend的配置管理功能来新增路由规则。

首先,在Backend的主页面点击配置管理进入配置管理页面,配置管理页面默认会展示路由插件配置,配置管理页面支持通过Group规则、key规则进行模糊查询,如下图所示:

图片

图 – 配置管理页面
然后,在配置管理页面点击新增按钮进入配置详情页面来新增配置,配置的插件类型选择路由插件。输入上游服务的应用名称、环境名称、下游服务的服务名称和规则内容,并发布配置。标签路由插件的详细路由规则请参考标签路由插件的官方文档。路由插件规则配置如下图所示:

图片

图 – 新增路由规则配置
配置发布之后,请求流量将会按照路由规则进行分配。效果如下图所示:

图片

图 – 发布路由规则配置后的流量分布
如果新版本的Provider功能验证没有问题之后,需要逐步将流量规模扩大,最终以1.0.1版本来替换原有的1.0.0版本。这里以最终流量全部路由切换到version为1.0.1的Provider为例,展示如何调整路由规则中的流量比例。

在配置管理页面通过插件类型查询上面配置的路由插件配置,如下图所示:

图片

图 – 路由插件配置查询结果
点击查看按钮跳转到配置详情页面,在配置详情页面修改路由插件的路由规则,具体修改内容如下图所示(weight是权重值,通过修改weight可以调整路由比例):

图片

图 – 修改路由插件配置
路由规则修改发布之后,标签路由插件会安装新的路由规则进行流量分发,所有的流量将会路由到version为1.0.1的Provider,效果如下所示:

图片

图 – 新的路由规则发布后的流量分布
当provider服务全部升级到1.0.1版本时,若不需要再通过路由插件进行流量控制(如路由方式不变化也可不删除),此时,可以删除路由插件配置。在配置列表页面查询到要删除的配置时,可以点击删除按钮删除配置。如下图所示,为了防止用户误删,点击删除按钮时会提醒“是否要删除当前配置项”,确认之后才会进行删除操作。

图片

图 – 删除路由插件配置
删除路由插件之后,请求流量会按原来的负载均衡规则路由至provider服务实例上,效果如下图所示。

图片

图 – 升级完成后的流量分布

三、     各插件配置管理在Backend的适配

以上是Sermant路由插件结合Sermant Backend来进行使用的示例。对开源仓库的原生Sermant插件,我们已经都做了页面的适配,各插件的有语义参数都支持在输入框中进行输入并自动生成合法的配置组和配置键,可以对配置进行管理。对于开源开发者自己开发的插件如果也想集成这套能力,可以参考Backend相关的开发者指南,添加相应的UI模版即可快速集成。

四、     总结

Sermant中的动态配置在实现微服务的多样化治理中扮演着重要的角色,是实现微服务治理的重要手段之一。在2.0.0版本之后新增的Backend的可视化配置管理功能给Sermant的微服务动态治理带来了极大的便利性,Backend从观测变成了观测和管控一体化的平台,提升了Sermant使用者的服务治理体验。


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

Sermant 官网:https://sermant.io
GitHub 仓库地址:https://github.com/sermant-io/Sermant
扫码加入 Sermant 社区交流群

图片


华为云开源
1 声望1 粉丝