配置中心相信大家都有听过,zookeeper、apollo等等都是配置中心的代表,但大部分都是JAVA系为主的,笔者主要开发语言使用的是Golang当然也有类似于ETCD这样的组件,但是并不方便管理也无法可视化,在无意之间发现了阿里爸爸开源了nacos这个服务发现+配置中心组件,也经过了一段时间的时候在这里分享给大家
附上:
喵了个咪的博客:w-blog.cn
Nacos官方Git地址:https://github.com/alibaba/nacos
Nacos官方文档地址:https://nacos.io/zh-cn/docs/
Go语言SDK地址:https://github.com/sunmi-OS/gocore/tree/master/nacos
PS:当前官方最新版本为 V1.1.3,阿里云有提供配置中心服务ACM使用方式和Nacos相同,使用阿里云的前提下免运维是个不错的选择
Nacos是阿里云中间件团队开源的一个项目,基于阿里云内部提供的ACM配置管理服务进行独立,截止到现在github已经有8K以上的star了,虽然成熟度还不能和携程开源的apollo相提并论,比较也是在阿里云上提供服务的组件稳定性还是值得相信的,当然要使用介绍Nacos必须要介绍介绍配置中心这样一个思想了。
配置中心是个老生常谈的话题,从有软件编程开始配置管理都是工程中重要的一步,当然对与一个单体应用只需要单个配置文件或环境变量的方式来管理配置就好了所以不再本文的讨论范围内,配置中心主要解决服务化或微服务化下的配置管理中的如下问题:
Nacos不止支持二进制部署也支持支持Docker和K8S部署,因为Nacos是有状态服务存储的数据需要依赖于Mysql而且集群的方式需要指定slave的IP所以使用K8S并不是很好的选择(K8S使用StatefulSet来运行有状态服务),笔者这里用Docker-Composer的方式来运行Nacos
1 2 3 4 5 6 7 8 |
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
阿里云ACM服务
当然自己部署Nacos还会面临很多挑战,比如:
PS:秉着能用服务就不自己搭建的原则笔者最终使用的是阿里云的ACM服务(当前ACM服务免费)
PS:需要注意阿里云ACM和Nacos在SDK中的链接方式有不同
Nacos有几个基础概念,我们只有先了解清楚之后才能更好的结合到业务场景:
一般我们使用namespace来区分不同的项目或环境,Group区分配置的差异系比如A业务获取的配置和B团队的有一些细微的差别可以通过Group来区分,最后使用DataId来区分具体的配置项
增加一个namespace
新增一个配置
支持很多种配置格式,也可以使用自定义的格式甚至直接存放代码都行
也有对应的JAVA系的示例代码
Nacos支持一下语言的SDK(当然GIT上也有很多非官方的SDK库):
大家可以在官方文档中查看具体的使用方式
上面已经配置好的配置我们可以使用OpenApi来访问它
1 2 3 4 |
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的名称,但是不是原名是如下的名称