而配置中心,就是来解决这个问题,配置中心可以有效帮助开发者更快捷地更新和管理配置,减少因配置错误而导致的服务中断,从而提高系统的可用性和可靠性。 在开源生态中,主流的配置中心还是Java阵营的Nacos和Apollo,但都提供了 .NET 的SDK便于快速接入,当然.NET 阵营也有一个配置中心新秀:AgileConfig。 但相较而言,Nacos架构更加简洁且部署方便,并且已有对应商业版本在阿里云上稳定运行,因此接下来本文将重点介绍.NET 如何集成 Nacos 配置中心。 至于服务配置,虽然Kubernetes的ConfigMap和Secret也能实现,但总归是不太方便管理。基于Nacos 的配置中心可以实现中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷,让服务按需弹性扩展变得更加容易。 集成 Nacos (视频)
1、配置中心概述 配置中心是集中管理配置信息的组件。它通常提供配置变更、配置推送、历史版本版本管理、灰度发布、配置变更审计等功能。 它涉及将软件包(JAR、WAR等)分发到多台机器中,如果需要修改配置信息,则不能按集中式的管理办法来实施,需要有一个专业的配置中心来实现分布式系统的配置信息变更,比如:线程池、连接池大小、开关、预案、限流配置 2.3、使用配置中心 在微服务架构下,可以使用诸如Spring Cloud Config、Apollo、Nacos等专业的配置中心来管理配置信息。 通过配置中心,可以动态刷新(自动或手动)配置信息到应用程序中,使修改及时生效。 3、对比主流配置中心 开源的配置中心有很多,比如,360的QConf、淘宝的DIamond、百度的Disconf、携程的Apollo、Apache Commons Configuration、Owner
配置管理:可以将应用程序的配置信息存储在Nacos的配置中心,通过Nacos实现动态配置管理和灰度发布,从而实现应用程序的动态调整和部署。 Dubbo:Nacos是Dubbo 2.7.x版本的服务注册中心和配置中心,可以通过Nacos实现服务的动态发现和配置管理。 Nacos在单个集群中同时支持AP和CP两种模式,之所以这么设计是因为Nacos目前在业内主要有两种应用,分别是注册中心和配置中心。 对于配置中心来说,他的主要职责就是提供统一的配置,一致性是他的一个重点考量,即使损失一点可用性(晚一点推送)也是可以接受的,但是不同的机器接收到配置不一样,这个是不能接受的。 四:nacos是如何实现配置文件变化云端可以感知到的? 客户端与配置中心的数据交互方式其实无非就两种,要么推 ,要么就是拉 。
1、 当一个系统中的配置文件发生改变的时候,经常的做法是重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候 ,系统会自动更新获取新的配置。 将配置文件放入git或者svn等服务中,通过一个Config Server服务来获取git或者svn中的配置数据,其他服务需要配置数据时在通过Config Client从Config Server获取。 ConfigServerApplication.class, args); } } 5、 创建bootstrap.yml文件 #服务端口 server: port: 8100 #服务注册中心 6、 启动注册中心Eureka,然后在启动sc-config-server项目 ?
配置中心化 现实场景 传统应用打包部署, 会在不同的环境配置不同的包, 如Local环境, Dev环境, 测试环境, UAT环境, 生产环境分别制作不同的发布包, 每个包里环境特定配置.每一次部署都要修改配置文件 由此分布式配置中心应运而生, 现在市面上开源的配置中心有 1.Spring出品: Spring-cloud/Spring-cloud-config https://github.com/spring-cloud github.com/knightliao/disconf 3.携程出品: Apollo https://github.com/ctripcorp/apollo/ 今天和大家聊的是第三个由上海携程出品的开源分布式配置中心 静态配置管理 2. 动态配置管理 3. 统一管理,不同环境不同配置 4. 配置缓存 5. 配置校验 6. 配置生效时效 7. 配置更新推送 8.配置定时拉取 9.用户权限管理 10. 配置版本管理 12. 配置合规检测 13. 实例配置监控 14. 灰度发布 15. 告警通知 16.
先去Consul配置一些配置 配置完成后,自己的项目自己配置好。 # register: true # 自动注册 service-name: ${spring.application.name} #实例名称 # 配置中心 profile-separator: '-' # 这里的原理还不太清楚,源代码默认是","但init方法写的是如果format是key_value则是"-" # 找到配置中心文件的路径就是 @Test public void TectConsulGetConf() throws InterruptedException { // todo 不知道为什么Consul配置中心在配置内容发生变更的时候 defaultContext + "/" + dataKey )); System.out.println("所以我们拿到的Consul配置中心的配置就是
本文围绕其“配置管理”功能来解答。 配置,作为代码如影随形的小伙伴,伴随着应用的整个生命周期,我们当然对它也非常的熟悉,想想配置一般都通过哪几种形式存在? 配置动态变更,可以是通过类似“硬编码”暴露管理接口的方式,这时,代码中会多一步持久化新配置到文件的逻辑。或者,简单粗暴点,直接登录机器上去修改配置文件,再重启应用,让配置生效。 Nacos 配置管理 Nacos 真正将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。 Nacos 提供的配置管理功能,将配置相关的所有逻辑都收拢,并且提供简单易用的 SDK,让应用的配置可以非常方便被 Nacos 管理起来。 然后在需要修改配置的时候,调用 Nacos 修改配置的接口,或使用 Nacos 的控制台去修改,配置发生变更后, Nacos 就会把最新的配置推送到该应用的所有机器上,简单而高效。
注册中心 1. 服务注册与发现流程 角色说明 服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能。 启动时,也会将自己的服务注册到服务注册中心; 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息) [] args) { SpringApplication.run(ServiceProviderApplication.class, args); } } 页面查看 配置中心 config: server-addr: 127.0.0.1:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml ${file-extension}:表示配置内容的数据格式,可以在配置文件中通过配置项 spring.cloud.nacos.config.file-extension 来配置,例如 properties
动态配置服务 动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。 配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。 Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。 Nacos 服务发现产品对比 Nacos除了服务的注册发现之外,还支持动态配置服务。动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。 一句话概括就是Nacos = Spring Cloud注册中心 + Spring Cloud配置中心。 面试分析 为什么要将服务注册到nacos?
Nacos配置中心 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。 设置配置中心 1、设置Nacos配置文件 注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。 本例中,就是去读取userservice-dev.yaml: ③业务中读取nacos配置中心的配置 这里的读取都实现了配置热更新,即更新nacos配置文件无需重启服务 有两种方式,二选一即可。 注意:这里的prefix="变量是配置文件中的前缀名",String dateformat需要取名和配置文件中一致 nacos配置文件: 配置类: ```java import lombok.Data
{file-extension} file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 ,目前只支持 properties 配置内容的编码方式 spring.cloud.nacos.config.encode UTF-8 配置的编码 获取配置的超时时间 spring.cloud.nacos.config.timeout 3000 单位为 ms 配置的命名空间 spring.cloud.nacos.config.namespace 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源隔离等。 3.9 更多 配置项 键 默认值 描述 服务器地址 spring.cloud.nacos.discovery.server-addr nacos注册中心地址 服务名 spring.cloud.nacos.discovery.service 如果未配置此项,则默认采用第一个网络接口的地址。
releases Apollo 仓库地址: https://gitee.com/apolloconfig https://github.com/apolloconfig 本地Quick Start安装 Apollo配置中心使用篇 artifactId>apollo-client</artifactId> <version>${apollo.version}</version> </dependency> 2.3 配置项目 AppId 方式一、application.properties app.id=javaclient-test 方式二、 META-INF 图片 方式三、VM options配置 -Dapp.id=javaclient-test -Didc=dev1 -Dapollo.configService=https://127.0.0.1:8080 方式四、application.yml配置 app: id: javaclient-test 2.4 配置服务器 方式一、VM配置 方式二、dock 方式三、application.yml配置 apollo: meta: http://127.0.0.1:8080 bootstrap:
所以还是多关注一下互联网的架构,而不是技术的细枝末节 本篇涉及到的内容包括: 游戏中配置中心的进化 什么样的配置中心才叫好 流行架构 zookeeper 配置中心 什么是配置中心? 配置中心进化史 这儿谈的进化史,是一款月流水过亿的游戏配置中心填坑的过程。当然,那时我们还不叫配置中心,也不知这世上还有个配置中心的术语。不要笑,我们那时就是这么的无知无敌。 而且rsync不再是定时去同步,而是当配置变动时,再去主动触发 配置中心标准 什么样的配置中心才是好的配置中心 不能单点,以上面的进化实例,明显如果配置中心挂了,那整个游戏就失去了动态能力,如果本地没有动态配置文件备份 实时推送;现在很多配置中心使用zk之类框架,主要就是用它的发布订阅实现实时推送能力 客户端支持 配置中心拥有这些能力,还需要客户端的支持 配合配置中心的实时/灰度推送,在参数变化时调用客户端自行实现的回调接口 参考资料 服务化体系之-配置中心,在ZK或etcd之外
Apollo 配置中心应运而生! Apollo 配置中心功能特点 正是基于配置的特殊性,所以 Apollo 从设计之初就立志于成为一个有治理能力的配置管理平台,目前提供了以下的特性。 Apollo 配置中心适用范围 既然 Apollo 定位于配置中心,那么在这里有必要先简单介绍一下什么是配置。配置有以下几个属性。 Apollo 配置中心基本使用 Apollo 基础模型 用户在配置中心对配置进行修改并发布; 配置中心通知 Apollo 客户端有配置更新; Apollo 客户端从配置中心拉取最新的配置、更新本地配置并通知到应用 上图是 Apollo 配置中心中一个项目的配置首页,在页面左上方的环境列表模块展示了所有的环境和集群,用户可以随时切换。
Nacos作为配置中心-基础配置 新建module:cloudalibaba-config-nacos-client3377 pom文件 版本号已经由父工程控制 <? /dependency> </dependencies> </project> YML文件 俩个yml文件: Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } } 配置配置中心文件 :localhost:3377/config/info Nacos中的匹配规则 Nacos作为配置中心-分类配置 问题 多环境多项目管理 问题1: 实际开发中,通常一个系统会准备 dev开发环境
,核心任务LongPollingRunnable ClientWorker#checkConfigInfo方法主要作用是更新配置信息,目前已经获取到的配置信息会缓存到一个Map<String, CacheData ,当获取不到服务器上的配置的时候,会读取本地快照; FailoverFile在客户端不会自动生成,它是在服务端生成的,当更新了一条配置之后,就会反应到这个文件中。 tenant去拉取就好了,如果每次都直接去服务器来配置信息,但这样会有一些性能问题: 配置信息变动的可能性很小,如果每次都需要全量去拉取,拉取的信息基本都是一样的,这很浪费资源; 如果从服务端拉取数据的频率太高 配置实时更新 先推荐一篇文章:Nacos配置实时更新原理分析 这篇文章已经写的非常详细了,不过那篇文章有点长,这里总结一下,为了自己以后看的时候方便。 在客户端向服务端拉取配置信息之前,需要先向服务端发送一个配置Key列表,然后服务端返回一个发生了变更的配置Key列表 ClientWorker#checkUpdateConfigStr // timeout
目前Apollo在github有22.6k颗星,在官网登记的使用的公司有451家,算是很流行的配置中心的框架技术。所以接下来跟着我一起学习Apollo配置中心吧。 ? 二、为什么使用配置中心 首先,没有配置中心之前传统的配置都是写在配置文件中,比如各种yml、perproties、xml文件。 实际上配置中心在市面上已经有很多,比如Nacos、Consul、spring-cloud-config、Apollo等等。 用户在配置中心对配置进行修改并发布。 配置中心通知Apollo客户端有配置更新。 Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用。 有些公司体量大一些会自己公司开发一套配置中心,其实实现起来也不是特别难,我上一间公司就自己实现,使用MQ消息队列+数据库,再自己简单地搭了一个增删改查、刷新配置的web页面,就完成了一个配置中心。
1.nacos添加配置 2.项目引入依赖 <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter </artifactId> <version>0.2.1</version> </dependency> 3.配置 spring: application: name:
1、设置配置中心的验证 一般情况下配置文件都是很重要、很敏感的,所以需要为Config Server加上验证功能。 "配置服务器"的用户名和密码 在服务器端的配置文件中设置"配置服务器"的用户名和密码 #用户名 security.user.name=username security.user.password=password 1.3、在客户端的配置文件中设置"配置服务器"的用户名和密码 spring.cloud.config.username=username spring.cloud.config.password=password 2、加/解密配置文件 2.1、配置对称加密密钥 2.1.1、设置对称加/解密配置文件 如果要使用对称加密,则需要设置对称加密的密钥。 设置方式简单,在配置文件bootstrap.properties(需要自己创建)中加入以下代码: #设置对称加密密钥 encrypt.key=liu 2.1.2、添加配置 spring.application.name
首先我们来看一下,微服务架构下关于配置文件的一些问题: 配置文件相对分散,在一个微服务架构中,配置文件会随着微服务的增多变得越来越多,而且分散在各个微服务中,不好统一管理和配置。 配置文件无法实时更新,我们修改好了配置文件之后,必须重新启动微服务才能使配置文件生效,这对一个正在运行的项目来说是非常不友好的。 基于上面这些问题,我们就需要引入配置中心来解决。 name: nacos-config-server cloud: nacos: config: server-addr: 127.0.0.1:8848 # 配置中心 配置格式:对应配置文件中的${spring.cloud.nacos.config.file-extension}, 配置内容:根据你的配置格式按对应的格式填写即可。 test") public String hello() { return config; } } } 我们通过@Value注解可以获取到配置中心的值