Spring Cloud Alibaba之配置管理组件 - Nacos

2023-11-14

[TOC]


使用Nacos管理配置

为什么要需要配置管理?

在微服务架构中,每个微服务都有可能会存在多个实例,为了保证同一微服务不同实例的配置文件内容一致,我们就需要有一个服务可以对微服务项目的配置文件进行统一管理,通常我们将其称之为统一配置管理中心。因为如果配置文件的内容不一致,有可能会导致同一微服务的不同实例在行为上发生差异,从而导致一些错误。

除此之外,在企业开发中还要求项目在不同环境使用不同配置,以及可以在不重启服务的情况下实现配置文件的动态刷新,为了实现这些需求我们也得使用到统一配置管理中心

目前业界比较流行的统一配置管理中心组件有Spring Cloud的Config、Spring Cloud Alibaba的Nacos以及携程开源的Apollo。本文主要介绍Nacos作为统一配置管理中心的使用,关于其他配置中心组件以及Nacos的基本使用可以参考如下文章:

接下来,我们看看如何使用Nacos管理配置文件,现在我有一段接口代码如下:

@RestController
@RequiredArgsConstructor
public class TestController {

    @Value("${your.configuration}")
    private String yourConfiguration;

    @GetMapping("/getConfiguration")
    public String getConfiguration(){
        return yourConfiguration;
    }
}

这段代码读取了一个配置项,此时该配置项存在于项目的application.yml文件中,如下:

your:
  configuration: your_value

那么我们要如何使用Nacos管理这段配置呢?首先需要为项目整合Nacos配置管理的功能,在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • Tips:该项目使用的Spring Cloud版本为Greenwich.SR1,Alibaba的版本为2.1.0.RELEASE

然后在resources目录下新建一个名为bootstrap.yml的文件,添加如下配置项:

spring:
  cloud:
    nacos:
      config:
        # 指定作为配置中心的nacos server地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yaml
      discovery:
        # 指定作为服务注册中心的nacos server地址
        server-addr: 127.0.0.1:8848
  application:
    name: content-center
  profiles:
    active: dev

到Nacos的管理页面的“配置列表”中新建配置:
Spring Cloud Alibaba之配置管理组件 - Nacos

新建的配置内容如下图:
Spring Cloud Alibaba之配置管理组件 - Nacos

注意,这里的Data ID是具有一定格式的,需要与项目中的配置对应上。如上图中的:content-center-dev.yaml,其中content-center是微服务名称,dev是环境,yaml是配置文件的格式。这里简单整理成了一张对照图,如下:
Spring Cloud Alibaba之配置管理组件 - Nacos

  • Tips:这里文件Data ID的后缀不一定必须是.yaml,也可以是.yml,因为这两种后缀其实都是表示同一种文件格式

到目前为止,我们就已经为项目整合了Nacos的配置管理功能,并在Nacos Server上新建了项目所需的配置。此时就可以将之前配置在application.yml文件中的配置项给删除掉。然后启动项目,访问/getConfiguration接口,返回结果如下则代表整合成功:
Spring Cloud Alibaba之配置管理组件 - Nacos


动态刷新配置及回滚

在实际的企业开发中,我们通常希望在配置中心上修改了配置项后,不需要重启项目就能够实现实时的动态配置刷新。对于整合了Nacos的微服务项目来说,想要实现这个功能是很简单的,只需要在读取了配置属性的类上加上@RefreshScope注解即可。如下示例:

// 该注解用于标识哪些地方需要动态刷新配置,可以写在类及方法上
@RefreshScope
@RestController
@RequiredArgsConstructor
public class TestController {

    @Value("${your.configuration}")
    private String yourConfiguration;

    @GetMapping("/getConfiguration")
    public String getConfiguration(){
        return yourConfiguration;
    }
}

添加完该注解后,重启项目,然后到Nacos上修改之前配置项的值,点击发布后会有一个内容比较的提示,可以看到我将之前的your_value改成了my_value
Spring Cloud Alibaba之配置管理组件 - Nacos

点击确认发布后,然后再访问/getConfiguration接口,返回的就是修改后的值了,而此时我们并没有重启项目:
Spring Cloud Alibaba之配置管理组件 - Nacos

除了以上所介绍的动态刷新之外,还有一个比较重要的功能:配置回滚。如果有一天修改某些配置项并发布后发现手滑改错了,导致项目运行出问题,那么就可以使用回滚功能可以帮助我快速回滚到某个特定的版本上。我们可以在Nacos的“历史版本”页面中查询指定配置的历史版本,如下图:
Spring Cloud Alibaba之配置管理组件 - Nacos

点击“详情”可以查看到具体的配置内容:
Spring Cloud Alibaba之配置管理组件 - Nacos

点击“回滚配置”则可以回滚到指定的历史版本,例如我这里就回滚到初始版本:
Spring Cloud Alibaba之配置管理组件 - Nacos

提示回滚成功后访问/getConfiguration接口,会发现报错了:
Spring Cloud Alibaba之配置管理组件 - Nacos

这是目前Nacos 1.1版本的一个Bug,当选择回滚的版本是最初版本时就会发生这个问题。官方称会在1.2版本中修复该问题,而我目前使用的是最新的1.1.3版本,仍属于1.1版本(2019-09-10),所以该bug还存在。相关的issues如下:

在1.1版本下,只要回滚的不是初始版本则不会触发这个bug,回滚其他版本是可以正常使用的,所以该问题注意一下即可规避

注:触发该bug后,配置内容由于回滚失败会丢失,此时需要重新创建配置


配置共享

以上我们介绍了Nacos作为配置中心的基本使用,而本小节将介绍相同应用下的配置共享,所谓的配置共享就是一些配置项可以在相同应用的不同环境中进行共享。

例如以上示例中的${your.configuration}配置项,我们希望在所有的环境下该配置项都是相同的值,而又不想在每个环境的配置文件里面都配置一遍,也就是说这个配置项是所有环境通用的,那么这时候就需要将该配置项在所有环境中共享了。

想要实现配置共享只需要新建一个配置文件即可,首先我们来看一段日志信息,当我们启动项目时,控制台会出输出如下一段日志信息:

2019-09-11 20:47:42.197  INFO 13778 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='content-center-dev.yaml'}, NacosPropertySource {name='content-center.yaml'}]}

从该日志信息可以看到,项目在启动时会到Nacos上读取两个配置文件,即content-center-dev.yamlcontent-center.yaml,其中content-center-dev.yaml里保存的是开发环境下特定的配置,而content-center.yaml里保存的则是所有环境下通用的配置。项目在启动时具体读取哪个环境的配置文件是由bootstrap.yml文件中的spring.profiles.active配置项所决定的。

既然我们知道保存在content-center.yaml里的配置项会在所有环境中共享,那么只需要到Nacos上新建这个配置文件即可。如下示例:
Spring Cloud Alibaba之配置管理组件 - Nacos

新建完成后,修改项目中的spring.profiles.active为其他环境,然后重启项目,此时访问/getConfiguration接口,可以看到返回的是通用配置文件里所配置的值:
Spring Cloud Alibaba之配置管理组件 - Nacos

  • Tips:特定环境下的配置优先级高于通用环境配置,例如${your.configuration}配置项同时存在于content-center-dev.yamlcontent-center.yaml中,若spring.profiles.active的值为dev,那么读取的将是content-center-dev.yaml里所配置的值。

以上介绍了相同应用在不同环境下的配置共享,但如何实现不同应用之间的配置共享呢?例如我们经常会遇到微服务A和微服务B的数据库配置是一样的,如果能将这段相同的配置在这两个服务之间共享,那么就可以省去一些重复的工作。

目前Nacos提供了两种方式可以实现不同应用之间的配置共享,第一种方式是使用shared-dataids。接下来我们进行一个简单的演示,首先需要到Nacos上创建一些共享配置,如下示例:
Spring Cloud Alibaba之配置管理组件 - Nacos

其中common1.yaml配置内容如下:

common1:
  configuration1: common1_value

common2.yaml配置内容如下:

common2:
  configuration2: common2_value

创建共享配置完成后,修改项目中的bootstrap.yml文件如下:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        # 指定共享配置的DataId,多个使用,分隔
        # 越靠后,优先级越高;common2.yml > common1.yaml
        # .yaml后缀不能少,目前只支持yaml/properties
        shared-dataids: common1.yaml,common2.yaml
        # 指定哪些共享配置支持动态刷新,多个使用,分隔
        refreshable-dataids: common1.yaml
        server-addr: 127.0.0.1:8848
        file-extension: yaml
  application:
    name: content-center
  profiles:
    active: dev

从以上的配置示例可以看出,其实shared-dataids的主要作用就是用来指定共享配置的Data ID,使得该微服务可以读取这些共享配置。同理,其他微服务若想读取这些共享配置,只需在项目的bootstrap.yml文件中添加相应的shared-dataids配置即可,如此一来就实现了多个微服务之间的配置共享。

然后我们来写两个简单的接口验证一下是否能正常读取这两个共享配置的值,代码如下:

@RefreshScope
@RestController
@RequiredArgsConstructor
public class TestController {

    @Value("${common1.configuration1}")
    private String common1Configuration;

    @Value("${common2.configuration2}")
    private String common2Configuration;

    @GetMapping("/getCommonConfiguration1")
    public String getCommonConfiguration1() {
        return common1Configuration;
    }

    @GetMapping("/getCommonConfiguration2")
    public String getCommonConfiguration2() {
        return common2Configuration;
    }
}

启动项目,访问结果如下:
Spring Cloud Alibaba之配置管理组件 - Nacos
Spring Cloud Alibaba之配置管理组件 - Nacos


第二种方式也是差不多的,只不过使用的配置项是ext-config,修改项目中的bootstrap.yml文件如下:

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        ext-config:
          # 需共享的DataId,yaml后缀不能少,目前只支持yaml/properties
          # 越靠后,优先级越高 优先级common2.yaml > common1.yaml
          - data-id: common1.yaml
            # common1.yaml所在的group
            group: DEFAULT_GROUP
            # 是否允许刷新,默认false
            refresh: true
          - data-id: common2.yaml
            group: DEFAULT_GROUP
            refresh: true
  application:
    name: content-center
  profiles:
    active: dev

ext-config提供了较为细化的配置方式,并且可以指定配置组。到目前为止,我们介绍了三种从Nacos上读取配置的方式,其优先级如下:

shared-dataids < ext-config < 自动

除此之外,当存在相同的远程配置和本地配置时,远程配置优先级要高于本地配置文件。但可以通过添加如下配置调整,需要注意的是这段配置需要放在远程配置才会生效:

spring:
  cloud:
    config:
      # 是否允许本地配置覆盖远程配置,默认true
      allow-override: true
      # 是否一切以本地配置为准,默认false
      override-none: false
      # 系统环境变量或系统属性才能覆盖远程配置文件的配置
      # 本地配置文件中配置的优先级低于远程配置,默认true
      override-system-properties: true

为什么要使用bootstrap.yml

在介绍为项目整合Nacos做配置管理服务的时候,示例里将Nacos Config的相关配置都写在一个bootstrap.yml文件里,但是为什么要使用bootstrap.yml呢?使用application.yml不可以吗?

这是其实是因为bootstrap.yml会被优先读取,也就是说如果项目里同时存在一个bootstrap.yml和一个application.yml的话,那么bootstrap.yml将会优先于application.yml被Spring Boot读取。这样才能实现连接外部的配置管理服务器,从远程读取一些必要的配置,避免项目在启动时缺失必要配置项而导致启动失败。

这里实际涉及到一个引导上下文的概念,它是ApplicationContext的父上下文,并且是由Spring Cloud提供的, 它所在的位置如下图所示:
Spring Cloud Alibaba之配置管理组件 - Nacos

引导上下文在prepareEnvironment的阶段就会被创建,创建时会读取bootstrap.yml的内容作为引导配置, 因此bootstrap.yml优先于application.yml加载。引导上下文与操作系统的引导程序非常类似,而bootstrap.yml就相当于设置引导程序的相关指令。


关于Nacos的数据持久化

Nacos会将数据持久化到本地,当Nacos作为服务发现组件时,默认会将服务的注册信息存储在如下目录中:

类Unix系统:~/nacos/naming
windows系统:C:\用户\{用户名}\nacos\naming

具体文件如下图所示:
Spring Cloud Alibaba之配置管理组件 - Nacos

打开其中一个文件,可以看到服务注册信息的格式如下:

{
    "metadata": {},
    "dom": "DEFAULT_GROUP@@content-center",
    "cacheMillis": 10000,
    "useSpecifiedURL": false,
    "hosts": [],
    "name": "DEFAULT_GROUP@@content-center",
    "checksum": "f797b857f5312a616a875924ecf6481a",
    "lastRefTime": 1564815242804,
    "env": "",
    "clusters": ""
}

当Nacos作为配置中心时,配置数据会分为两份并存储在两个地方,其中一份存储在内嵌的derby数据库中,这是Apache开源的一个完全由Java编写的内嵌数据库,而derby会有一个数据目录,如下:

$NACOS_HOME/data/derby-data

我们可以使用IDEA连接derby来查看相关的数据表及存储内容,在右边菜单栏中点开Database -> 点击+符号添加数据库连接 -> Data Source -> Apache Derby。如下图所示:
Spring Cloud Alibaba之配置管理组件 - Nacos

注意,此时需要将Nacos Server给停止掉,否则是无法连接的。停止Nacos Server之后,填写相关的连接信息,Path填的是derby的数据目录,用户和密码默认都是nacos。如下图所示:
Spring Cloud Alibaba之配置管理组件 - Nacos

连接成功后,可以看到derby中的数据表如下:
Spring Cloud Alibaba之配置管理组件 - Nacos

其中CONFIG_INFO表存储了配置数据,打开该表可以看到内容如下:
Spring Cloud Alibaba之配置管理组件 - Nacos

需要注意的是derby并不能用于生产环境,因为它是一个内嵌数据库,无法实现高可用和集群部署,所以一般搭建生产可用的Nacos时会将数据库改为使用MySQL等非内嵌数据库。

而另一份数据存储在如下目录,主要是一些快照等数据:

类Unix系统:~/nacos/config
windows系统:C:\用户\{用户名}\nacos\config

快照主要用于提升性能以及做容灾备份,具体文件如下图所示:
Spring Cloud Alibaba之配置管理组件 - Nacos

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Cloud Alibaba之配置管理组件 - Nacos 的相关文章

  • 如何从Firebase Firestore实时更新文档中获取修改后的字段或数据? [复制]

    这个问题在这里已经有答案了 我有多个文档 我的问题是我无法获取修改的特定数据 我正在获取完整的文档 db collection employees whereEqualTo OID OID addSnapshotListener new E
  • 如何使用Spring WebClient进行同步调用?

    Spring Framework in 休息模板 https docs spring io spring framework docs current javadoc api org springframework web client R
  • 使用 JDBC 获取 Oracle 11g 的最后插入 ID

    我是使用 Oracle 的新手 所以我将放弃之前已经回答过的内容这个问题 https stackoverflow com questions 3131064 get id of last inserted record in oracle
  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从

随机推荐

  • bcd码和十进制码之间的转换

    BCD码转十进制 static u8 BCDToInt u8 value unsigned char temp 0 temp value gt gt 4 10 temp value 0x0F return temp 十进制转BCD码 sta
  • java awt linux_解决在linux下awt调用错误的问题

    在java中使用awt在服务器上处理图片的时候发现有错 第一遍执行 500 Servlet Exception java lang InternalError Can t connect to X11 window server using
  • MyBatis自动生成实体类

    MyBatis MySQL生成实体类 需要的工具jar包 mybatis generator core 1 3 2 jar mysql connector java 5 0 4 jar 第一步 编写一个MybatisGeneratorUti
  • android 之 如何让app没有图标

    我们有时候需要让我们的app没有图标 不要问我没有图标要干啥 我只是说的一个需求 单讲技术不说别的 首先我们要获得 PackageManager 的对象 PackageManager packageManager getPackageMan
  • Caffeine缓存的使用

    1 springboot集成Caffeine
  • KeePass搭建一个私人密码库

    文章作者 GoodBoyboy 文章链接 https blog goodboyboy top posts 2546190081 html 版权声明 本博客所有文章除特别声明外 均采用 CC BY NC SA 4 0 许可协议 转载请注明来自
  • 线程(进程)的同步与互斥实例

    1 有一个队列 线程1负责从网络接收分组 并将收到的分组放到队列尾 然后再次从网络中接收下一个到达的分组 并进行同样的队列操作 线程2从此队列头中取出一个分组进行处理 处理完毕后 再次从队列中取出一个分组进行处理 处理完毕后再次从队列头取出
  • [转]Python实现多功能音乐播放器

    前言 就是用Python做一个简易的音乐播放器 废话不多说 咱们直接开干 当然 今天做这个肯定不是最简单的 最简单的音乐播放器 9行代码足以 import time import pygame file r 歌曲路径 pygame mixe
  • torch.hub.load()解析,如何加载本地权重

    用yolov5训练了一个权重 项目只能部署在本地 官方文档 torch hub load repo or dir model args source github force reload False verbose True skip v
  • Python 第一阶段

    第一章 安装 1 1 开发环境 官网 https www python org稳定版 Stable Releases检验 cmd 命令 python version 1 2 开发工具 PyCharm官网 https www jetbrain
  • (Struts2学习篇) Struts2配置文件之 struts-default.xml

    对struts default xml的一些注释
  • zmq+protobuf 的坑点难点

    zmq protobuf 的坑点难点 之前项目要用到zmq protobuf的方式传递数据 软件采用前后端分离的方式开发 其中前端是异地同事用python开发的 后端是我们这边用C 开发的 1 中间有遇到问题是前后端传送zmq信息时 发现字
  • DRM驱动(七)之atomic_commit

    上节已经把应用的参数check了一遍 这次就可以把对应的参数配置到硬件里进行刷图操作了 int drm atomic commit struct drm atomic state state struct drm mode config c
  • Qt 控制台运行无法弹出小黑框

    Qt Console Application Qt 主要是GUI界面的设计 但在学习的时候控制台运行显得更加方便一些 小编在第一次新建控制台运行的时候 点击运行没有弹出小黑框 解决方法 主要是因为没有执行qmake 就需要在Qt的pro文件
  • RocketMQ 用法详解,你学会了吗?

    大家好 我是指北君 消息中间件是我们工作中使用最频繁的一类中间件 它具有低耦合 可靠投递 广播 流量控制 最终一致性等一系列功能 成为异步RPC的主要手段之一 当今市面上有很多主流的消息中间件 如老牌的ActiveMQ RabbitMQ 炙
  • C++的使用小教程2——基于范围的for循环

    C 的使用小教程2 基于范围的for循环 1 常规的for循环 2 基于范围的for循环 在学习了python之后 一直觉得python的语法很方便 特别是python中遍历数组的方式 无需配置特别的参数就可以完全遍历 C语言是很难实现的
  • zookeeper和Eureka

    简介 Zookeeper 主要为大型分布式计算提供开源的分布式配置服务 同步服务和命名注册 曾经是Hadoop项目中的一个子项目 用来控制集群中的数据 目前已经升级为独立的顶级项目 很多场景下也用它作为Service发现服务解决方案 Eur
  • freessl生成免费ssl

    利用freessl免费生成https https freessl cn acme deploy 官网说明地址 https blog freessl cn acme quick start 下载acme工具包 curl https get a
  • 拟合是什么意思

    在机器学习和统计学中 拟合 Fitting 是指使用模型来适应数据的过程 它表示通过对模型参数进行调整 使模型能够最好地拟合给定的数据集 当我们说一个模型 拟合 了数据时 意味着该模型通过学习数据的模式和结构 能够产生与实际观测数据相匹配的
  • Spring Cloud Alibaba之配置管理组件 - Nacos

    TOC 使用Nacos管理配置 为什么要需要配置管理 在微服务架构中 每个微服务都有可能会存在多个实例 为了保证同一微服务不同实例的配置文件内容一致 我们就需要有一个服务可以对微服务项目的配置文件进行统一管理 通常我们将其称之为统一配置管理