springcloud技术栈分两个分支:Netflix Alibaba (springcloud是一个协议)
Nacos(配置中心 注册中心)
Netflix (config Eureka)
一、Nacos配置中心
1. 配置中心简介
应用程序在启动和运行的时候,往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。
配置主要有以下几个特点:
① 配置是独立于程序的只读变量
配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置。
② 配置伴随应用的整个生命周期
配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。
③ 配置可以有多种加载方式
常见的有程序内部硬编码、配置文件、环境变量、启动参数、基于数据库等。
④ 配置需要治理
同一份程序在不同的环境 (如:开发、测试、生产)、不同的集群(如:不同的数据 中心)经常需要有不同的配置,所以需要有完善的环境,集群配置管理。
假如没有配置中心:在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后, 配置文件也必须跟着迁移(分割),这样配置就分散了。不仅如此,分散中还伴随着冗 余。
配置中心:管理分散的配置
服务中心:管理服务的配置
建立配置中心后:创建配置中心,将配置从各个应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。 配置中心的服务流程:首先,用户在配置中心更新配置信息;然后,服务群及时得到配 置更新通知,并从配置中心获取最新配置。总体来说,配置中心就是一种统一管理各种应用配置的基础服务组件。
配置中心在微服务中的地位:在系统架构中,配置中心是整个微服务基础架构体系中的一个组件,它的功能看上去并不 起眼,无非就是配置的管理和存取,但它是整个微服务架构中不可或缺的一环。
主流配置中心对比:
Disconf:百度开源的配置管 理中心,目前已经不维护了。
Config: Spring Cloud生态 组件,可以和Spring Cloud体 系无缝整合。
Apollo: 携程开源的配置管 理中心,具备规范的权限、流 程治理等特性。
Nacos: 阿里开源的配置中心, 也可以做DNS和RPC的服务发 现。
2. Nacos简介
Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
nacos官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网
Nacos的功能:
①动态配置服务:
动态配置服务让用户能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
②服务发现及管理
动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以房子将请求发往不健康的主机或服务实例。借助Nacos,可以更容易地为服务实现断路器。
③动态DNS服务
通过支持权重路由,动态DNS服务能让用户轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单NDS解析服务。动态DNS服务还能让用户更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
3. Nacos安装
下载地址 https://github.com/alibaba/nacos/releases
解压:unzip nacos-server-xxx.zip 或者 tar -zxvf nacos-server-2.4.3.tar.gz -C /usr/local
启动/关闭服务器
到bin目录下启动命令(standalone代表着单机模式运行):sh startup.sh -m standalone
启动完成后查看nacos启动状态:tail -f /usr/local/nacos/logs/start.out
关闭命令:sh shutdown.sh
访问Nacos控制台
访问:
默认用户名:nacos
默认密码:nacos
application.properties中改连接数据库的配置:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos
从conf/mysql-schema.sql 中获取SQL建表的脚本。
OPEN API配置管理测试
服务注册 curl -X POST 'http://192.168.153.132:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现 curl -X GET 'http://192.168.153.132:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置 curl -X POST "http://192.168.153.132:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置 curl -X GET "http://192.168.153.132:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
在postman中测试以上请求,注意请求地址的ip要改成nacos服务器的ip:
服务注册:
服务注册后在nacos中可以看到:
服务发现:
发布配置
可以看到:
获取配置:
4. Nacos的操作与使用
控制台界面发布配置操作:
代码中依赖:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.1</version>
</dependency>