Nacos 是阿里巴巴开源的配置中心和服务发现产品,开源距今已经超过一年的时间。本次1.1.0的发布,带来了许多重量级的特性更新,包括灰度配置等社区呼声很高的特性,下面会介绍1.1.0版本发布的新特性和每一个特性的使用方式。html
0.8.0及以上版本:node
0.8.0如下版本,先升级到1.0.0版本。git
请使用最新的1.1.1版本,修复了1.1.0版本的一个客户端版本显示问题。github
灰度配置指的是指定部分客户端IP进行新配置的下发,其他客户端配置保持不变,用以验证新配置对客户端的影响,保证配置的平稳发布。灰度配置是生产环境中一个比较重要的功能,对于保证生产环境的稳定性很是重要。在1.1.0中,Nacos 支持了以IP为粒度的灰度配置,具体使用步骤以下:微信
一、 在配置列表页面,点击某个配置的“编辑配置”按钮:网络
二、勾选“Beta发布”,在文本框里填入要下发配置的IP,多个IP用逗号分隔:dom
三、 修改配置内容,点击“发布Beta”按钮,便可完成灰度配置的发布:curl
四、 点击“发布Beta”后,“发布Beta”按钮变灰,此时能够选择“中止Beta”或者“发布”。“中止Beta”表示取消中止灰度发布,当前灰度发布配置的IP列表和配置内容都会删除,页面回到正常发布的样式。“发布”表示将灰度配置在全部客户端生效,以前的配置也会被覆盖,同时页面回到正常发布的样式:maven
@KeRan213539
配置管理的另外一个常见需求是可以将一个集群的配置同步到另一个集群,或者从一个命名空间同步到另一个命名空间。来自社区的贡献者KeRan213539贡献这个很是实用的功能,具体使用步骤以下:
一、 导出查询结果。能够根据查询条件,将当期查询出的全部结果打包为一个文件:
二、 导出选中的配置:
三、 导入配置,能够选择相同配置的处理策略。
当发现有相同的配置时,会有相应的提示:
同时若是导入的配置文件格式不符合要求,也会有相应的提示:
四、 配置同步,选取想要同步的配置,点击“克隆”,而后再选择要同步的目标命名空间,就能够将配置同步到对应的命名空间:
五、 导入导出文件格式说明。均为zip压缩包,压缩包内有多个目录,目录名为配置的 group,目录下有具体的文件,文件名为配置的 dataId ,每一个文件的内容为配置具体的内容:
@pbting
1.1.0的安装包列表里多了一个nacos-address-server-1.1.0。这个安装包的做用是做为地址服务器模块,单独部署。关于地址服务器的介绍能够参考Nacos官网地址服务器文章,这里只作一个简单的说明。
通常中间件产品,客户端寻址服务端的方式都是在客户端配置服务端的地址列表,这样有一个缺点是当服务端的地址发生变更时,客户端没法实时的感知到,也没法动态调整访问的服务端集群。而在阿里巴巴的一种比较常见的客户端寻址服务端的方式是地址服务器。简单的说就是部署单独的地址服务器,地址服务器提供接口,获取相关中间件产品服务端集群的地址。因为地址服务器功能比较单一,所以稳定性比较容易保证。客户端只须要配置地址服务器的域名,经过地址服务器获取想要访问的中间件的集群地址,这样既保证可以感知中间件集群的动态变化,也可以为客户端配置更灵活的集群访问策略。
下面介绍地址服务器模块的使用。
部署地址服务器
# Add IP to nacos cluster: curl -X POST '$ADDRESS_SERVER:8080/nacos/v1/as/nodes?ips=1.1.1.1:8848,2.2.2.2:8848,3.3.3.3:8848' # Remove IP from nacos cluster: curl -X DELETE '$ADDRESS_SERVER:8080/nacos/v1/as/nodes?ips=1.1.1.1:8848,2.2.2.2:8848,3.3.3.3:8848'
mvn -Prelease-address clean install -Dmaven.test.skip=true
安装包会生成在distribution/target目录下。
@nicholas2015
服务订阅者列表是1.1.0增长的另一个功能,就是能够在控制台上查看一个服务的消费者,执行步骤以下:
服务自定义心跳周期
@lanCao
以前的版本中,客户端注册服务时,不能自定义上报心跳的周期以及客户端下线时自动删除实例的间隔。在1.1.0中,咱们支持了这个特性,应用能够在注册时,经过设置实例的metadata,来指定心跳周期、健康检查过时时间及删除实例时间。具体举例以下:
String serviceName = randomDomainName(); Instance instance = new Instance(); instance.setIp("1.1.1.1"); instance.setPort(9999); Map<String, String> metadata = new HashMap<String, String>(); // 设置心跳的周期,单位为秒,这里将心跳间隔设置为3秒: metadata.put(PreservedMetadataKeys.HEART_BEAT_INTERVAL, "3"); // 设置心跳超时时间,单位为秒,这里将心跳超时时间设为6秒, // 即服务端6秒收不到客户端心跳,会将该客户端注册的实例设为不健康: metadata.put(PreservedMetadataKeys.HEART_BEAT_TIMEOUT, "6"); // 设置实例删除的超时时间,单位为秒,这里将实例删除超时时间设为9秒, // 即服务端9秒收不到客户端心跳,会将该客户端注册的实例删除: metadata.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT, "9"); instance.setMetadata(metadata); naming.registerInstance(serviceName, instance);
@chuntaojun
当存在程序启动之初,若是用户经过ConfigService.getConfig
获取配置的同时,又注册了监听器,那么会存在监听器再次通知用户刚刚获取的配置信息。所以在version 1.1.0
版本中,增长了新的接口以及一个系统参数(使用户无需修改现有代码)
String getConfigAndSignListener(String dataId, String group, long timeoutMs, Listener listener) throws NacosException;
该方法在获取配置后,随即注册一个监听器,避免监听器通知用户刚刚才拉取的配置信息
nacos.enableRemoteSyncConfig=true | false
设置该系统参数,将在监听器注册时主动去向远端拉取当前最新的配置信息,可是存在必定的网络开销,所以建议用户采起接口的方式
@lzp0412 @peggypig @atlanssia
Nacos 上周还发布了Go语言的 SDK ,目前发布了0.1.0-beta版本,仓库地址是:https://github.com/nacos-group/nacos-sdk-go。Nacos Go SDK是单独的仓库,由Nacos Committer参与维护,在代码上不属于Nacos 1.1.0。在此也很是欢迎社区的Go语言高手,参与Nacos Go SDK的演进。
为了实现这一目标,你须要积极参与 Nacos 社区。若是您在文档中发现拼写错误,在代码中发现错误,或想要新功能或想要提供建议,您能够在GitHub上建立一个issues。
若是您想开始着手,能够选择github仓库中有如下标签的issues。
DISS is cheap, show me your hand
比吐槽更重要的是搭把手,参与社区一块儿发展 Nacos
Nacos 社区正在蓬勃发展,截止到发文为止,Nacos 已经有 9 个微信群,其中 7 个已满员,1个QQ群,1个钉钉群,关注 Nacos 的社区人数已经近5000人,在 Nacos 群里跟 “道(基)友” 切磋技术,交流经验,招聘交友,抢抢红包...不亦乐乎。
为了可以与代码贡献者更方便的交流,咱们组建了钉钉群“Nacos社区核心贡献小组(23335652)”,这个群里都是都是对Nacos贡献很是感兴趣的小伙伴,若是你也想成为Nacos贡献者,甚至成为Committer,欢迎加入这个群和群里的小伙伴一块儿切磋!
在 Nacos 官网 nacos.io 中,已经添加团队介绍页,里面包括Nacos的开发者角色定义及职责划分,同时包含了Naocs的开发者们介绍和靓照哦,欢迎你们加入Nacos社区,贡献社区。用Apache的话说,“社区高于代码”!
还不知道什么是 Nacos ? 不要紧,在github上star一下跟程序猿兄弟打个招呼吧!!
Nacos 是阿里巴巴于2018年7月份新开源的项目,Nacos的主要愿景是指望经过提供易用的 动态服务发现
、服务配置管理
、服务共享与管理
的基础设施,帮助用户在云原生时代更好的构建、交付、管理本身的微服务平台。
原文连接 本文为云栖社区原创内容,未经容许不得转载。