0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nacos是什么?Nacos配置管理技巧你知道吗

电子设计 2018-10-29 08:53 次阅读

Nacos 是阿里巴巴今年7月份开源的项目,如其名, Naming Configuration Service ,专注于服务发现和配置管理领域。本系列文章,将从 5W1H(What、Where、When、Who、Why、How)全面剖析 Nacos,给大家安利一下 Nacos。本文作为 Nacos 系列文章的开篇,也就从 “What” 开始。我们开始关注一个开源项目的时候,通常最先冒出的 2 个问题是:

它是什么?

它帮我们解决什么问题?

Nacos 是什么?上面已经大概介绍了,更多详细内容可以从 官网 或 Github 了解。

Nacos 能帮我们解决什么问题?本文围绕其“配置管理”功能来解答。

配置,作为代码如影随形的小伙伴,伴随着应用的整个生命周期,我们当然对它也非常的熟悉,想想配置一般都通过哪几种形式存在?

硬编码

配置文件

DB 配置表

硬编码

配置项作为类字段的形式存在,如:

这种形式主要有三个问题:

如果配置是需要动态修改的话,需要当前应用去暴露管理该配置项的接口,至于是 Controller 的 API 接口,还是 JMX ,都是可以做到。

另外,配置变更都是发生在内存中,并没有持久化。因此,在修改配置之后重启应用,配置又会变回代码中的默认值了,这是一个坑啊,笔者就曾经掉进去过,爬了好一会才上岸。

最后一个问题,就是当你有多台机器的时候,要修改一个配置,每一台都得去操作一遍,运维成本可想而知,极其蛋疼。

配置文件

Spring 中常见的 properties、yml 文件,或其他自定义的,如,“conf”后缀等:

# application.properties

connectTimeoutInMills=5000

相比“硬编码”的形式,它解决了第二个问题,持久化了配置。但是,另外两个问题并没有解决,运维成本依旧还是很高的。

配置动态变更,可以是通过类似“硬编码”暴露管理接口的方式,这时,代码中会多一步持久化新配置到文件的逻辑。或者,简单粗暴点,直接登录机器上去修改配置文件,再重启应用,让配置生效。当然,你也可以在代码中增加一个定时任务,如每隔 10s 读取配置文件内容,让最新的配置能够及时在应用中生效,这样也就免去了重启应用这个“较重”的运维操作。

通过增加“持久化逻辑”、“定时任务”让“配置文件”的形式比“硬编码”前进了一小步。

DB 配置表

这里的 DB 可以是 MySQL 等的关系型数据库,也可以是 Redis 等的非关系型数据库。数据表如:

它相对于前两者,更进一步,将配置从应用中抽离出来,集中管理,能较大的降低运维成本。

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

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

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

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

Nacos 配置管理

Nacos 真正将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。

应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。Nacos 提供的配置管理功能,将配置相关的所有逻辑都收拢,并且提供简单易用的 SDK,让应用的配置可以非常方便被 Nacos 管理起来。

如果是在 Spring 中使用 Nacos,只需三个步骤即可:

添加依赖

添加 @EnableNacosConfig 注解启用 Nacos Spring 的配置管理服务。以下示例中,我们使用 @NacosPropertySource 加载了 dataId 为 example 的配置源,并开启自动更新:

通过 Spring 的 @Value 注解设置属性值。

注意:需要同时有 Setter方法才能在配置变更的时候自动更新。

以上的三个步骤,对应用本身几乎没有任何的侵入,1 个依赖 2 注解,寥寥数行,就把配置通过 Nacos 管理起来了。

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

想想之前,为了实现此功能,写了多少冤枉代码,做了多少冤枉的运维工作。要是早一点认识 Nacos,该有多好呀!

总结

本文作为 Nacos 5W1H 系列文章的开篇,从“What” 讲述了 Nacos 配置管理能帮我们解决的问题:以简单、优雅、高效的方式管理配置,实现配置的动态变更,大大降低运维成本,让开发同学早点下班。

当然,Nacos 的配置管理,不单单只有上述的那些功能,还有诸如“灰度发布”、“版本管理”、“快速回滚”、“监听查询”、“推送轨迹”、“权限控制”、“敏感配置(如,数据库连接配置)的加密存储”等等,这些有的已经在 Nacos 中开源实现了,有的在 Nacos 配置管理的阿里云免费产品 ACM 中提供了,当然,后续也会慢慢开源到 Nacos 中,敬请期待。

作者:云栖社区 中间件小哥


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3799

    浏览量

    64376
  • 阿里巴巴
    +关注

    关注

    7

    文章

    1614

    浏览量

    47198
收藏 人收藏

    评论

    相关推荐

    Nacos的概念和功能

    1、Nacos简介 Nacos的概念和功能 Nacos是一个面向微服务架构的动态服务发现、配置管理和服务治理平台,它能够帮助开发人员和运维人员实现服务注册、
    的头像 发表于 09-25 11:02 2331次阅读

    支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos

    方便的实现服务断路器。Nacos提供的强大的服务的元数据管理,路由及流量管理策略也能够帮助您更好的构建更强壮的微服务平台。动态配置管理动态配置
    发表于 07-05 17:35

    结合场景谈一谈微服务配置

    还需要有“权限管控”的功能?对敏感配置的任何操作都应该被记录,是否还需要有“变更审计”的功能呢?现在,我有了更好的建议:使用 Nacos 配置管理模块,将敏感配置信息都存放到
    发表于 12-12 15:53

    构建ARM64版本nacos docker镜像

    在适配过程中有大量合作伙伴用到nacos且采用容器化部署,dockerhub未提供官方镜像,因此需要在鲲鹏服务器自定义构建。构建前提:Docker已部署构建步骤:1、下载包含构建所需的脚本下载完成
    发表于 06-16 14:29

    还在为 Eureka 闭源担心?Nacos 来了

    Nacos 会尝试填补 2 者的鸿沟,以便在 2 套体系下可以采用同一套服务发现和配置管理的解决方案,这将大大的简化使用和维护的成本。• Nacos 与 Service Mesh5、Naco
    发表于 08-07 15:13 173次阅读

    微服务配置中心实战:Spring + MyBatis + Druid + Nacos

    在 结合场景谈服务发现和配置 中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置
    发表于 12-29 17:09 1104次阅读
    微服务<b class='flag-5'>配置</b>中心实战:Spring + MyBatis + Druid + <b class='flag-5'>Nacos</b>

    Nacos 1.1.4 发布,业界率先支持 Istio MCP 协议

    Nacos是阿里巴巴开源的服务发现与配置管理项目,本次发布的1.1.4版本,主要带来的是与Istio的对接功能,使用的是Istio最新的MCP协议。本文将介绍包括这个功能在内的新版本发布的功能。升级
    发表于 11-14 23:06 1556次阅读

    Nacos服务地址动态感知原理

    Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务
    的头像 发表于 09-26 10:40 1765次阅读

    Nacos为什么这么强?Nacos注册中心的底层原理,从服务注册到服务发现

    Nacos服务发现 今天来分享一下Nacos注册中心的底层原理,从服务注册到服务发现,非常细致 1. Nacos介绍 再讲Nacos之前,先来讲一下服务注册和发现。我们
    的头像 发表于 10-08 16:46 1.2w次阅读

    华为云CSE 关键特性,支持托管Nacos注册配置中心

    于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 帮助您发现、配置管理微服务。Na
    的头像 发表于 12-29 16:23 1021次阅读
    华为云CSE 关键特性,支持托管<b class='flag-5'>Nacos</b>注册<b class='flag-5'>配置</b>中心

    华为云微服务引擎0停机迁移Nacos?它是这样做的

    dubbo-servicecomb接入CSE需要投入的成本高,且社区dubbo-servicecomb未投入人力维护,可能遇到很多适配问题。 • 仅想使用CSE的治理能力,配置中心仍然使用Nacos,或者后期微服务整改后
    的头像 发表于 12-29 20:01 769次阅读

    基于Nacos的简单动态化线程池实现

    本文以Nacos作为服务配置中心,以修改线程池核心线程数、最大线程数为例,实现一个简单的动态化线程池。
    发表于 01-06 14:14 863次阅读

    Nacos测试环境中cpu飙高的原因和解决方案

    出问题的项目是 需要连接各个不同nacos 和不同的 namespace 进行对应操作的 一个项目,对nacos的操作都是httpClient 调用的api接口,httpClient方法 没有问题,不用质疑这个
    发表于 05-12 11:20 3305次阅读
    <b class='flag-5'>Nacos</b>测试环境中cpu飙高的原因和解决方案

    Nacos、OpenFeign、Ribbon组件协调工作的原理

    实现哪些接口和规范。   既然这个兄弟问到我了,而我又刚好知道,这不得好好写一篇文章来回答这个问题,虽然在后面的聊天中我已经回答过了。   接下来本文就来探究一下Nacos、OpenFeign
    的头像 发表于 05-22 10:46 1031次阅读
    <b class='flag-5'>Nacos</b>、OpenFeign、Ribbon组件协调工作的原理

    Nacos实现原理:SpringCloud集成Nacos的实现过程

    Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务模块。Consitency
    发表于 10-09 16:08 1082次阅读
    <b class='flag-5'>Nacos</b>实现原理:SpringCloud集成<b class='flag-5'>Nacos</b>的实现过程