配置中心相信大家都有听过,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介绍

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

阿里云ACM服务

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

  • 集群搭建
  • 稳定性
  • Mysql数据库维护
  • 配置安全保护(Nacos没有密码一说,但是ACM需要使用阿里云的密钥可以提高安全程度)

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

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

三、基础使用

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

  • namespace 命名空间
  • Group 配置分组
  • DataID 具体的配置名称

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

增加一个namespace

新增一个配置

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

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

四、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的名称,但是不是原名是如下的名称

Nacos - 阿里开源配置中心的更多相关文章

  1. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  2. 开源配置中心xxl-conf的核心原理分析

    XXL-CONF是一款轻量级的开源配置中心项目,由国内大牛许雪里开发.下面是官方对其优点作出的描述: 一个轻量级分布式配置管理平台,拥有"轻量级.秒级动态推送.多环境.跨语言.跨机房.配置监 ...

  3. 【Alpaca】.Net版开源配置中心 - 技术选型 Vue 3.0

    是否可以用 Vue 3.0 现有的Vue 2.* 不推荐,坐等Vue 3.0出迁移工具吧,手动改的话工作量还是不小的 新项目 考虑下团队内对Vue + TS + VS Code的熟练程度.过程中你会遇 ...

  4. nacos初探--作为配置中心

    什么是nacos Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心).动态配置服务(可以做配置中心).动态 DNS 服务. 官方介绍是这样的: Nac ...

  5. Spring Cloud Alibaba系列(二)nacos作为服务配置中心

    Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spring Cloud Alibaba Nacos Config,您可 ...

  6. SpringCloud+Nacos实现服务配置中心(Hoxton版本)

    关于 Nacos Spring Cloud 的详细文档请参看:Nacos Config和Nacos Discovery. 通过 Nacos Server 和 spring-cloud-starter- ...

  7. Spring Cloud 整合 nacos 实现动态配置中心

    上一篇文章讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能.本文主要讲解Spring Cloud 整合nacos实 ...

  8. nacos作为配置中心

    分布式配置中心 在微服务架构中,为什么需要一个统一的配置中心呢?如果用一句话来说那就是方便管理,降低出错的可能.比如:你开发环境是一套配置,测试环境是一套,生产环境又是一套.你如果手动去修改,难免会出 ...

  9. 配置中心之Nacos简介,使用及Go简单集成

    简介 为什么需要配置中心 ​ 我们现在有一个项目, 使用Gin进行开发的, 配置文件我们知道是一个config.yaml的文件, 也知道这个配置文件在项目启动时会被加载到内存中使用; 考虑三种情况: ...

随机推荐

  1. 使用scikit-learn解决文本多分类问题(附python演练)

    来源 | TowardsDataScience 译者 | Revolver 在我们的商业世界中,存在着许多需要对文本进行分类的情况.例如,新闻报道通常按主题进行组织; 内容或产品通常需要按类别打上标签 ...

  2. 一文看懂神经网络初始化!吴恩达Deeplearning.ai最新干货

    [导读]神经网络的初始化是训练流程的重要基础环节,会对模型的性能.收敛性.收敛速度等产生重要的影响.本文是deeplearning.ai的一篇技术博客,文章指出,对初始化值的大小选取不当,  可能造成 ...

  3. Ubuntu环境下如何设置文件(文件夹)权限

    查看文件(文件夹)权限 cd到需要查看的文件(文件夹)所在目录并执行: (base) duanyongchun@hc1217:~$ ls -l #查看当前文件夹下的所有文件(包括文件夹)的权限 如图: ...

  4. 微服务架构盛行的时代,你需要了解点 Spring Boot

    随着互联网的高速发展,庞大的用户群体和快速的需求变化已经成为了传统架构的痛点. 在这种情况下,如何从系统架构的角度出发,构建出灵活.易扩展的系统来快速响应需求的变化,同时,随着用户量的增加,如何保证系 ...

  5. jQuery和Vue的技术优劣对比

    1.精力集中. Jq偏重于对dom的操作,由它的函数就很容易看出来,$().parent().find().我们用jq的时候经常要去考虑怎么去渲染数据,怎么从视图中取到数据,操作数据前必须对dom节点 ...

  6. html5调用手机摄像头

    <input type="file" accept="image/*" capture="camera"><input t ...

  7. spring中BeanPostProcessor之一:InstantiationAwareBeanPostProcessor(03)

    前面介绍了InstantiationAwareBeanPostProcessor后置处理器的postProcessBeforeInstantiation和postProcessAfterInstant ...

  8. Ubuntu16.04默认Python3.5升级Python3.6踩坑

    好久没更新博客了,每天还是踩坑中.今天遇到第一个问题“ImportError: No module named 'secrets'”,导包是常见问题.这次的问题导致我又重装了一次环境,不过这是一个新服 ...

  9. Servlet 中文乱码问题解析及详细解决方法

    使用 servlet 向客户端浏览器回送中文时,经常出现中文乱码的问题,这里给大家完完全全地搞明白: 一.基本常识 中文系统默认是 GBK 编码(GBK是对GB2312的补充,包含它) 需要处理编码问 ...

  10. Mac下Web切图常用PS快捷命令

    Mac下 Z 放大镜 双击放大镜   图片会回到100%大小 C 切片工具 B 画笔    alt 在B模式下 吸取颜色 M   选区(默认) 点击第二次M   矩形选区 可以固定大小 shift+c ...