vlambda博客
学习文章列表

Nacos - 阿里开源配置中心

一、Nacos介绍

Nacos是阿里云中间件团队开源的一个项目,基于阿里云内部提供的ACM配置管理服务进行独立,截止到现在github已经有8K以上的star了,虽然成熟度还不能和携程开源的apollo相提并论,比较也是在阿里云上提供服务的组件稳定性还是值得相信的,当然要使用介绍Nacos必须要介绍介绍配置中心这样一个思想了。

配置中心是个老生常谈的话题,从有软件编程开始配置管理都是工程中重要的一步,当然对与一个单体应用只需要单个配置文件或环境变量的方式来管理配置就好了所以不再本文的讨论范围内,配置中心主要解决服务化或微服务化下的配置管理中的如下问题:

  • 有效的密码管理,开发不碰触密码配置,运维人员和架构团队统一管理避免泄露;

  • 多项目下的配置绝对统一性,不会出现配置写错导致的BUG

  • 对于配置的编辑、存储、分发、变更管理、历史版本管理、变更审计有完善的能力

  • 配置分组和灰度发布

  • 有好处当然也有坏处,相对于使用配置文件我们还需要解决如下问题:

  • 配置中心异常情况下服务怎么保障可用(SDK提供Cache功能当中心服务不可用会使用上一次加载的缓存配置)

  • 配置变更后的程序生效逻辑(SDK提供配置变动订阅逻辑可以订阅配置变动编写处理逻辑)

  • 开发过程中的配置文件调试(需要框架进行设计)

  • 对于部分语言来说(PHP)配置中心性能的问题(Nacos的吞吐量8C16G 15K并发)

  • 对比下来还是可以总结出配置中心利大于弊的结论

二、Nacos部署

Nacos不止支持二进制部署也支持支持Docker和K8S部署,因为Nacos是有状态服务存储的数据需要依赖于Mysql而且集群的方式需要指定slave的IP所以使用K8S并不是很好的选择(K8S使用StatefulSet来运行有状态服务),笔者这里用Docker-Composer的方式来运行Nacos

Nacos官方Docker部署方式Git地址:https://github.com/nacos-group/nacos-docker
git clone https://github.com/nacos-group/nacos-docker.git
单机部署(内存模式):
docker-compose -f example/standalone-derby.yaml up
单机部署(Mysql模式):
docker-compose -f example/standalone-mysql.yaml up
集群部署:
docker-compose -f example/cluster-hostname.yaml up

访问:http://localhost:8848/nacos/ 就可以看到登录界面了

PS:默认用户名和密码都是 nacos

Nacos - 阿里开源配置中心

 

Nacos - 阿里开源配置中心

 

阿里云ACM服务

当然自己部署Nacos还会面临很多挑战,比如:

  • 集群搭建

  • 稳定性

  • Mysql数据库维护

  • 配置安全保护(Nacos没有密码一说,但是ACM需要使用阿里云的密钥可以提高安全程度)

PS:秉着能用服务就不自己搭建的原则笔者最终使用的是阿里云的ACM服务(当前ACM服务免费)

Nacos - 阿里开源配置中心

 

Nacos - 阿里开源配置中心

 

PS:需要注意阿里云ACM和Nacos在SDK中的链接方式有不同

三、基础使用

Nacos有几个基础概念,我们只有先了解清楚之后才能更好的结合到业务场景:

  • namespace 命名空间

  • Group 配置分组

  • DataID 具体的配置名称

一般我们使用namespace来区分不同的项目或环境,Group区分配置的差异系比如A业务获取的配置和B团队的有一些细微的差别可以通过Group来区分,最后使用DataId来区分具体的配置项

Nacos - 阿里开源配置中心

 

增加一个namespace

Nacos - 阿里开源配置中心

 

新增一个配置

Nacos - 阿里开源配置中心

 

支持很多种配置格式,也可以使用自定义的格式甚至直接存放代码都行

Nacos - 阿里开源配置中心

 

Nacos - 阿里开源配置中心

 

也有对应的JAVA系的示例代码

Nacos - 阿里开源配置中心

 

四、SDK和OpenApi使用配置

Nacos支持一下语言的SDK(当然GIT上也有很多非官方的SDK库):

  • Java

  • go

  • cpp

  • python

  • nodejs

大家可以在官方文档中查看具体的使用方式

上面已经配置好的配置我们可以使用OpenApi来访问它

curl "http://172.16.0.13:8848/nacos/v1/cs/configs?dataId=test_config&group=DEFAULT_GROUP&tenant=b58ea912-e564-4958-b21f-3098ad15daf9"
{
"name":"sunmi"
}

特别注意tenant就是需要输入namespace的名称,但是不是原名是如下的名称


作者 | 作者姓名

来源 | 文章来源

END


欢迎留言和分享