Nacos 2.x 系列【19】元数据管理

1. 概述

元信息:Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

Nacos架构图中,可以看到关于元数据的相关能力:

  • 元数据管理:提供元数据CURD 和打标能力
  • CMDB:解决元数据存储,与三方cmdb系统对接问题,解决应用,人,资源关系
    在这里插入图片描述

2. 元数据管理

本篇文档主要讲解元数据管理,关于CMDB的相关内容后续介绍,元数据管理主要包含了以下两个主要功能:

  • CRUD:元数据的增删改查操作
  • 打标服务:定义标签,可根据标签实现自定义访问策略,也可用于添加描述信息,为实现上层流量和服务灰度非常关键

2.1 服务元数据

服务元数据 (Service Metadata):服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。

服务的定义只是为服务设置了⼀些基本的信息,用于描述服务以及方便快速的找到服务,而服务的元数据是进⼀步定义了 Nacos 中服务的细节属性和描述信息。

主要包含:

  • 健康保护阈值ProtectThreshold):为了防止因过多实例故障,导致所有流量全部流入剩余实例,继而造成流量压力将剩余实例被压垮形成的雪崩效应。应将健康保护阈值定义为⼀个 01之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失了⼀部分流量,但是保证了集群中剩余健康实例能正常工作。
  • 实例选择器Selector):用于在获取服务下的实例列表时,过滤和筛选实例。该选择器也被称为路由器,目前 Nacos 支持通过将实例的部分信息存储在外部元数据管理 CMDB 中,并在发现服务时使用 CMDB 中存储的元数据标签来进行筛选的能力。
  • 拓展数据(extendData):用于用户在注册实例时自定义扩展的元数据内容,形式为 K-V 。可以在服务中拓展服务的元数据信息,方便用户实现自己的自定义逻辑。
    在这里插入图片描述

进入服务列表菜单,点击详情:
在这里插入图片描述
服务详情中,可以看下服务级别的元数据:
在这里插入图片描述
点击右上角的编辑服务,可以进行元数据的CRUD操作:
在这里插入图片描述

新增元数据的格式为JSON,示例中添加了标签、服务名称:

{
	"lable.address": "changsha",
	"name": "order"
}

2.2 实例元数据

和服务元数据不同,实例的元数据主要作用于实例运维相关的数据信息。

主要包含:

  • 权重Weight):实例级别的配置。权重为浮点数,范围为 0-10000。权重越大,分配给该实例的流量越大。
  • 上线状态Enabled):标记该实例是否接受流量,优先级大于权重和健康状态。用于运维人员在不变动实例本身的情况下,快速地手动将某个实例从服务中移除。
  • 拓展数据(extendData):不同于实例定义中的拓展数据,这个拓展数据是给予运维人员在不变动实例本身的情况下,快速地修改和新增实例的扩展数据,从而达到运维实例的作用。

在这里插入图片描述

可以通过以下几种方式进行管理:

  • 控制台
  • Open API
  • 客户端生成
2.2.1 控制台

进入服务列表菜单,点击详情,在下方可以看到注册的实例信息:
在这里插入图片描述
使用Spring Cloud Nacos框架集成时,默认会添加一个注册来源的元数据:

preserved.register.source=SPRING_CLOUD

点击编辑按钮,可以对实例的元数据进行CRUD操作:
在这里插入图片描述
可以根据元数据进行实例的条件查询:
在这里插入图片描述

2.2.2 客户端

客户端在注册时可以添加元数据,这在实际开发中是否有用,比如添加当前实例的启动时间、版本、服务描述等信息,方便运维管理。

可以在application.yml文件中添加元数据,示例如下:

spring:
  application:
    name: order-demo
  cloud:
    nacos:
      # 服务端用户名密码
      username: nacos
      password: nacos
      # 服务发现
      discovery:
        # 命名空间
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        # 服务端地址,默认:127.0.0.1:8848
        server-addr: 127.0.0.1:8848
        metadata:
          name: 订单服务
          version:  ${project.version}
          build.time: ${maven.build.timestamp}

示例中获取获取Maven中的信息,所以需要添加相应的构建插件:

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>3.0.10</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <useDefaultDelimiters>true</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>
    </build>

也可以自定义注册NacosDiscoveryProperties 配置类添加元数据,示例如下:

@Configuration
public class NacosConfig {

    @Bean
    public NacosDiscoveryProperties nacosProperties(Environment environment) {
        NacosDiscoveryProperties discoveryProperties = new NacosDiscoveryProperties();
        Map<String, String> metadata = discoveryProperties.getMetadata();
        metadata.put("startup.time",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        metadata.put("java.version",environment.getProperty("java.version"));
        metadata.put("os.name",environment.getProperty("os.name"));
        metadata.put("pid",environment.getProperty("pid"));
        return discoveryProperties;
    }
}

启动服务后台,查看控制台:
在这里插入图片描述

2.2.3 Open API

Nacos Open API 指南中,也提供了实例元数据的API
在这里插入图片描述

  • 32
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云烟成雨TD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值