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 中,敬请期待。
作者:云栖社区 中间件小哥
光伏逆变器安装接线步骤
iPhone 8改名了? 而且配备前后双摄
合资电动车搭载国产电池,三元电池再次上榜
协作机器人有哪些优缺点它可以做些什么
中国联通进行在大背景流量下的V2X网络性能测试
Nacos是什么?Nacos配置管理技巧你知道吗
德马工业辊筒产品助力国内的新能源电池商走出国门
Uart TFT 串口屏控制芯片LT7689
西门子V20变频器与西门子S7-200 PLC 之间的USS通讯示例
智能家居的“低端”需求
厦钨新能科创板首发获通过
dsPIC3F3013的CAN总线数据采集系统
iphone8什么时候上市?最新消息:iphone7只是一个过渡,大招iphone 8九月发布十月上市,要价1000美元外观就这样了
华为Mate9Pro相比Mate9有什么区别
日本公平贸易委员会正式撤销对Qualcomm在日本的许可业务禁止令
面对新设备及其手册时如何快速上手
洛伦兹发布了基于ToF技术的Flash激光雷达——I系列产品
气体检测仪为什么会受到市场重视?
CCLINK IEFB转Profinet协议网关连接1200和三菱FX5U的通讯方法
任天堂宣布为《任天堂明星大乱斗》增加VR支持