如何利用动态配置中心在JavaAgent中实现微服务的多样化治理

如何,利用,动态,配置,中心,javaagent,实现,服务,多样化,治理 · 浏览次数 : 10

小编点评

**Sermant 动态配置模型:实现微服务多样化治理的有效手段** **引言** 随着JavaAgent在微服务治理方面的广泛应用和发展,动态配置中心在运行时对微服务进行监控、管理和调整变得至关重要。Sermant是基于Java字节码增强技术的无代理服务网格,支持通过动态配置实现微服务的多样化治理。 **Sermant 动态配置模型** * 基于分层模型的配置管理方案 * 使用Group和Key对配置项进行隔离 * 通过不同的Group(分组信息)来对配置项进行隔离 * 通过不同的Key对配置项进行具体属性的标识 **最佳实践** * 创建尽量少的Group(分组信息)和Key(配置项名称) * 使用标签路由插件实现流量隔离 * 基于标签路由插件动态配置模型进行规则配置 **结论** Sermant 动态配置模型是实现微服务治理的重要手段之一,可以帮助对微服务的运行时状态进行动态调整,实现微服务的动态治理。

正文

本文分享自华为云社区《如何利用动态配置中心在JavaAgent中实现微服务的多样化治理》,作者:华为云开源 。

一、前言

随着JavaAgent在微服务治理方面的广泛应用和发展,我们可以在运行时对微服务进行监控、管理和调整,以满足不同的业务需求和运行环境。然而,随着微服务架构的复杂性增加,管理和配置微服务的治理变得越来越困难,因此利用动态配置中心在JavaAgent中实现微服务多样化治理变得至关重要。

Sermant是基于Java字节码增强技术的无代理服务网格,支持通过动态配置实现微服务的多样化治理。以下是Sermant的微服务架构:

10001.png

Sermant虽然不直接提供动态配置中心,但是Sermant基于不同的配置中心实现了动态配置功能,基于该功能Sermant不仅可以监听主流配置中心配置信息的修改、也可以针对不同的场景进行配置监听,例如:Sermant不仅可以监听服务的配置变更,还可以监听应用的全局配置变更。基于该功能可以更好的帮助开发人员和运维人员管理微服务治理的能力。

二、Sermant的动态配置模型

Sermant动态配置模型是一种基于分层模型设计的配置管理方案,它的核心组件包括Group和Key。Sermant通过不同的Group(分组信息)来对配置项进行隔离,使配置管理更具灵活性和可扩展性;同时,通过Key对配置项进行具体属性的标识,实现了对配置项的精准控制和高效维护。

在Sermant动态配置模型中,Group的数量不宜过多。Sermant动态配置模型中Group的实现是基于配置中心的数据模型,例如:Nacos的namespace,Nacos的namespace是用于实现租户隔离的,不宜过多,因此Sermant动态配置模型的Group数量也不宜过多。

与Group相比,Sermant动态配置模型允许创建多个Key,但单个实例订阅的Key不宜太多。这是因为在配置项的订阅和维护过程中,如果单个实例订阅的Key过多,可能会导致服务的性能出现问题,甚至引发配置更新不及时或者配置冲突的问题。因此,控制单个实例订阅的Key的数量是保证配置管理高效性和可用性的关键因素之一。

Sermant动态配置模型通过Group和Key的有机结合,实现了对复杂配置场景的全面覆盖和高效支撑。同时,通过控制Group和Key的数量,简化了配置项的订阅和更新流程,提高了系统的可用性和可维护性。

Sermant的动态配置模型如下图所示:

10002.png

  • 基于 Zookeeper 的配置模型实现

Zookeeper采用树状的数据模型,会将数据信息保存在一个个数据节点上,这些节点被称为Znode,Znode是Zookeeper中最小数据单位,一个Znode可以有多个子节点。可以通过路径确定的一个唯一的Znode,如/zookeeper/key1。如下图所示:

10003.png

Sermant的动态配置模型基于Zookeeper配置中心的实现方式如下所示:

Group(分组信息):Znode节点的父节点路径信息作为Group信息

Key(配置项名称):Znode节点的节点名称作为配置项的Key,节点数据作为具体的配置内容。

Znode节点可以通过不同的路径进行隔离,不同路径下可以存在节点名称相同的节点。保证Sermant通过不同的Group(分组信息)来对配置项进行隔离,同一个Group(分组信息)下可以有相同Key(配置项名称)。

  • 基于Nacos的配置模型实现

Nacos数据模型为层次模型,对于Nacos配置管理,通过Namespace、Group、Date ID能够定位到一个配置集。如下图所示:

10004.png

Namespace(命名空间)主要用于不同环境的配置隔离,Group(配置分组)主要用于不同的项目或者应用,配置集可以包含了系统的各种配置信息,每个配置集的ID即Data Id。配置集中包含的一个个配置内容就是配置项。它代表了一个具体的可配置的参数与其值域,通常以key=value的形式存在

Sermant的动态配置模型基于Nacos配置中心的实现方式如下:

Group(分组信息):将Nacos的Namespace(命名空间)和配置分组(Group)组合起来作为Sermant的动态配置模型的分组信息。

Key(配置项名称):Nacos的配置集ID(Data Id)作为Sermant的动态配置模型的配置项名称。

配置集(Data Id)可以通过不同的Namespace(命名空间)和配置分组(Group)进行隔离,不同的Namespace(命名空间)和配置分组(Group)下可以存在名称相同的配置集(Data Id)。保证Sermant通过不同的Group(分组信息)来对配置项进行隔离,同一个Group(分组信息)下可以有相同Key(配置项名称)。

  • 基于 ServiceComb Kie 的配置模型实现

ServiceComb-Kie(ServiceComb Key-Value Store)的数据模型基于键值对(Key-Value)的方式来存储和管理配置信息。ServiceComb-Kie基于标签来控制配置的生效范围,通过标签和Key可以确定唯一的键值对。

Sermant的动态配置模型基于ServiceComb-Kie的实现方式如下:

Group(分组信息):ServiceComb-Kie的标签信息作为Sermant的动态配置模型的Group信息。

Key(配置项名称):ServiceComb-Kie的配置项名称作为Sermant的动态配置模型的Key。

ServiceComb-Kie的配置项可以通过不同的标签信息进行隔离,不同标签下可以存在相同配置项名称的配置,同样的标签信息下可以配置不同的配置项。保证Sermant通过不同的Group(分组信息)来对配置项进行隔离,同一个Group(分组信息)下可以有相同Key(配置项名称)。

三、Sermant动态配置模型的最佳实践

动态配置是Sermant的核心功能之一,可以帮助Sermant统一管理微服务治理能力,例如:灰度发布、限流降级、链路追踪等。如下图所示:

10005.png

使用Sermant动态配置进行微服务服务治理时,要避免创建过多的Group(分组信息)和Key(配置项名称),减少配置的复杂性和混乱度,降低监听过多配置带来的性能消耗,也可以提高配置的可维护性和可读性。

接下来我们通过标签路由插件讲解Sermant动态配置的最佳实践方式。

1) 标签路由插件的功能

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

2) 标签路由插件的动态配置模型

标签路由插件基于Sermant的动态配置模型进行规则配置。在微服务场景中标签路由插件动态配置模型实现如下:

Group(分组信息):基于应用名称appName和环境名称environment组成,例如:app=${appName}&environment=${ environment }

Key(配置项名称):针对服务粒度的规则,key值为servicecomb.routeRule.${srviceName},${ srviceName }为目标应用的微服务名称。针对全局粒度的规则,key值为servicecomb.globalRouteRule。

标签路由插件基于zookeeper配置中心的配置模型实现如下所示:

10006.png

通过标签路由插件基于Sermant动态配置模型的实现我们可以看出,Sermant动态配置模型的Group(分组信息)支持基于应用名称和环境名称生成,此时针对于单个微服务应用只需要创建一个Group(分组信息),可以避免创建过多的的Group(分组信息)。Sermant动态配置模型的Key(配置项名称)支持基于微服务场景和服务名称生成,此时可以针对单个服务、也可以针对所有服务进行动态配置,保证单个实例不需要监听多个配置项,避免监听多个配置项导致服务性能下降、配置更新不及时或者配置冲突等问题。

四、总结

JavaAgent中的动态配置在实现微服务的多样化治理中扮演着重要的角色,是实现微服务治理的重要手段之一。通过动态配置,可以对微服务的运行时状态进行动态调整,从而实现微服务的动态治理。例如,可以根据实际负载情况通过动态配置来调整微服务的负载均衡策略,实现更加精细化的负载均衡。

而使用Sermant的动态配置模型进行微服务治理,不仅可以实现微服务的动态治理,还可以减少JavaAgent在微服务治理时由于Group太多或者实例监听的配置项过多带来的消耗,可以提高配置的可维护性和可读性。此外,Sermant的动态配置模型还支持主流的配置中心ServiceComb Kie、Zookeeper、Nacos,可以满足不同微服务治理场景下的使用,让用户更方便地进行微服务治理和运维操作。

点击关注,第一时间了解华为云新鲜技术~

 

与如何利用动态配置中心在JavaAgent中实现微服务的多样化治理相似的内容:

如何利用动态配置中心在JavaAgent中实现微服务的多样化治理

Sermant的动态配置模型不仅可以实现了微服务的动态治理,还可以提高配置的可维护性以及可读性,帮助用户更方便地进行微服务治理和运维操作。

Vue Router 4与路由管理实战

这篇文章介绍了如何在Vue.js应用中利用Vue Router实现单页面应用的路由管理,包括配置路由、导航守卫的使用、路由懒加载以优化性能以及动态路由的实现方法,旨在提升用户体验和应用加载效率

cmake构建32位应用程序

1. 背景介绍 2. 工具介绍 3. 环境搭建 4. MinGW编译器版本 1. 背景介绍 最近需要使用第三方动态库文件G33DDCAPI.dll进行二次开发。由于这个动态库文件生成的时间比较早,且只提供了32位的版本,并没有提供源代码。如果希望利用这个动态库进行开发,有两种解决方法: 编译64位应

#Powerbi 利用动态格式字符串功能,实现百分数智能缩位(powerbi4月重磅更新功能.)

以下内容(基于POWERBI 23年4月更新的最新版本) 实际业务中,日常报表一般都有一个较为规范的百分数缩位要求,如果统一要求保留一位小数,那么在有些时候,我们会面临被缩成0.0%的尴尬,例如原有的百分比为"0.02%",如果保留一位的话,powerbi会返回一个值为"0.0%"。 这时候如果我们

Vue.js 动画与过渡效果实战

title: Vue.js 动画与过渡效果实战 date: 2024/6/4 updated: 2024/6/4 description: 这篇文章介绍了如何在网页设计中使用过渡动画和组件效果,以及如何利用模式和列表展示信息。还提到了使用钩子实现组件间通信的方法。 categories: 前端开发

5分钟教你搭建邮件服务器的实用指南

今天我写了一篇实用的文章,重点是教你如何免费搭建一个邮件服务器,这个服务器不仅可以用于发送邮件,还可以供我的待办机器人使用。一开始我试图找一些免费的 API 接口来实现这个功能,但遗憾的是,并没有找到合适的。对于程序员来说,能自己动手实现绝对是最好的选择,幸运的是,我有一台空闲的服务器可以利用。如果...

弹性伸缩:高可用架构利器(架构+算法+思维)

1 介绍 云计算资源弹性伸缩是一种根据业务需求动态调整计算资源规模的技术。它可以根据系统的性能指标(如CPU使用率、内存占用率、磁盘IO、网卡读写率、请求响应时间等)或者预定义的规则(如时间周期、业务事件等),自动增加或减少计算资源的数量,以满足业务负载的变化。这种技术可以确保系统在高峰时期拥有足够

动手学Avalonia:基于硅基流动构建一个文生图应用(一)

文生图 文生图,全称“文字生成图像”(Text-to-Image),是一种AI技术,能够根据给定的文本描述生成相应的图像。这种技术利用深度学习模型,如生成对抗网络(GANs)或变换器(Transformers),来理解和解析文本中的语义信息,并将其转化为视觉表现。文生图可以用于创意设计、图像编辑、虚

如何利用窗口函数实现精确排名计算?

前言 SQL语句中,聚合函数在统计业务数据结果时起到了重要作用,比如计算每个业务地区的业务总数、每个班级的学生平均分以及每个分类的最大值等。然而,今天小编将为大家介绍窗口函数,与聚合函数相比,它们也是一组函数,但在使用方法和适用场景上有所不同。在本章节中,我将重点介绍窗口函数中的RANK和DENSE

如何利用 Seaborn 实现高级统计图表

本文分享自华为云社区《使用 Seaborn 实现高级统计图表从箱线图到多变量关系探索》 ,作者:柠檬味拥抱。 在数据科学和数据可视化领域,Seaborn 是一个备受欢迎的 Python 可视化库。它建立在 Matplotlib 的基础之上,提供了更简洁、更美观的图形界面,同时也具备了一些高级统计图表