Nacos能帮我们解决什么问题


配置作为代码如影随行的伙伴,伴随着应用的整个周期,配置一般通过如下几种形式存在。


1、硬编码

配置如果需要动态修改的话,需要当前应用去暴露管理该配置项的接口。

另外配置变更都是发生在内存中,并没有持久化。因此,在修改配置后需要重启应用,配置又会变回代码中的默认值了。

当有多台机器时,运维成本可想而知。


2、配置文件

相比"硬编码"它解决了第二个问题,持久化。但是另外两个问题,并没有解决。

动态修改是类似于"硬编码"中暴露管理接口的方式,代码中会多一步持久化新配置到文件的逻辑。

也可以直接去机器上修改配置文件,再重启应用。增加定时任务,让配置生效可以避免重启的操作。


3、DB配置表

这里的DB可以是mysql等关系型数据库,也可以是redis等非关系数据库。

将配置从应用中抽离出来,集中管理,能较大的降低运维成本。

那么,它能怎么解决动态更新配置的问题呢?据我所知,有两种方式。

其一,如同之前一样,通过暴露管理接口去解决,当然,也一样得增加持久化的逻辑,只不过,之前是写文件,现在是将最新配置写入数据库。不过,程序中还需要有定时从数据库读取最新配置的任务,这样,才能做到只需调用其中一台机器的管理配置接口,就能把最新的配置下发到整个应用集群所有的机器上,真正达到降低运维成本的目的。

其二,直接修改数据库,程序中通过定时任务从数据库读取最新的配置内容。

“DB 配置表”的形式解决了主要的问题,但是它不够优雅,带来了一些“累赘”。

关于配置的动态更新,对 Nacos Spring 的用户来说,在自身应用中就只是设置 “autoRefreshed” 的一个布尔值。然后在需要修改配置的时候,调用 Nacos 修改配置的接口,或使用 Nacos 的控制台去修改,配置发生变更后, Nacos 就会把最新的配置推送到该应用的所有机器上,简单而高效。


Nacos 有哪些典型的应用场景?- 配置管理


1、数据库连接信息

  • 将数据库连接信息等敏感配置从项目中剥离;
  • 数据库增加 IP 白名单连接限制;
  • 最小权限原则:每个账号只配置所必需的权限,避免删表删库等高危操作;
  • 定期修改数据库账号、密码。 使用 Nacos配置管理模块,将敏感配置信息都存放到 Nacos 中。 Nacos 配置管理,其中一个立身之本就是为敏感配置保驾护航。

它提供上述场景所需的功能,通过命名空间区分不同环境(开发、测试、预发、生产),通过“版本控制”保证变更可追溯,通过“快速回滚”保证错误变更时影响最小,通过的“灰度发布”功能保障配置安全平稳地变更,还有更多更全面功能(权限管控、变更审计等)即将支持。


2、限流阈值和降级开关

动态推送能力


3、流量的动态调度

动态调度流量,能秒级得将流量从一个区域调度到另外可用的区域的集群上。

将用户 ID 的分片和对应的路由规则存放在 Nacos 的中,配合统一接入层等的组件,就能将流量打散到各个集群上,进而让系统能承载更大的流量,以更好的支撑业务的发展。

另外,将其存放与 Nacos 中,也就具备了配置“动态化”的能力,一旦某区域出现基础设施无法及时恢复的问题时,只需在 Nacos 的控制台上修改 ID 分片的路由规则,就能将有问题的区域流量快速切换到其他可用的区域上,保障对业务几乎无损。


Nacos 概念


地域:

物理的数据中心,资源创建成功后不能更换。


可用区:

同一地域内,电力和网络互相独立的物理区域。同一可用区内,实例的网络延迟较低。


接入点:

地域的某个服务的入口域名。


命名空间:

可以用于配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。

Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。


配置:

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。

目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。

配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。


配置管理:

系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。


配置项:

一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。

例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。


配置集:

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。

例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。


配置集ID:

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。

Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。


配置分组:

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。

当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。


配置快照:

Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。

配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。


服务:

通过预定义接口网络访问的提供给客户端的软件功能。


服务名:

服务提供的标识,通过该标识可以唯一确定其指代的服务。


服务注册中心:

存储服务实例和服务负载均衡策略的数据库。


服务发现:

在计算机网络上,(通常使用服务名)对服务下的实例的地址和元数据进行探测,并以预先定义的接口提供给客户端进行查询。



Nacos支持三种部署模式


  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

单机模式下部署Nacos


1、下载源码或者安装包

wget https://github.com/alibaba/nacos/releases/download/1.1.0/nacos-server-1.1.0.tar.gz

2、解压后直接可以启动

tar -xvf nacos-server-1.1.0.tar.gz
cd nacos/bin

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

关闭服务器

sh shutdown.sh


3、现在使用ip加端口就可以访问控制台了

http://ip:port/nacos

在这里插入图片描述
集群部署



Nacos监控 prometheus+grafana


配置application.properties文件,暴露metrics数据
management.endpoints.web.exposure.include=*

访问{ip}:8848/nacos/actuator/prometheus,看是否能访问到metrics数据


搭建prometheus采集Nacos metrics数据

1、下载安装包


wget https://github.com/prometheus/prometheus/releases/download/v2.17.1/prometheus-2.17.1.linux-amd64.tar.gz

tar xvfz prometheus-2.17.1.linux-amd64.tar.gz

cd prometheus-2.17.1.linux-amd64


2、修改配置文件prometheus.yml采集Nacos metrics数据

 - job_name: nacos
   metrics_path: '/nacos/actuator/prometheus'
   static_configs:
   - targets:['{ip1}:8848','{ip2}:8848','{ip3}:8848']

注意格式,我这里是单机部署,只写了本机。
在这里插入图片描述


3、启动prometheus

nohup ./prometheus --config.file=./prometheus.yml &

通过访问http://{ip}:9090/graph可以看到prometheus的采集数据,在搜索栏搜索nacos_monitor可以搜索到Nacos数据说明采集数据成功
在这里插入图片描述


搭建grafana图形化展示metrics数据

1、和prometheus在同一台机器上安装grafana,使用 yum 安装grafana

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.4-1.x86_64.rpm
yum install grafana-5.2.4-1.x86_64.rpm

yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.4-1.x86_64.rpm

启动:

service grafana-server start


2、配置prometheus数据源

访问grafana

http://{ip}:3000

创建数据源
在这里插入图片描述

Name要小写
Type 选择prometheus
URL给自己的ip
其他默认,点击绿色按钮。

在这里插入图片描述

导入Nacos grafana监控模板
在这里插入图片描述
到这里就结束了,监控指标和配置grafana告警请参见官网


程序启动默认占用的端口是8848(珠穆朗玛峰的高度),我们可以对端口进行修改,用编辑器打开bin目录下的startup.cmd文件 添加一行代码

set "JAVA_OPT=%JAVA_OPT% --server.port=9090

还可以在conf文件下的application.properties中添加

server.port=9090
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐