Nacos 1.0.0 是正式 GA 的版本,在架构、功能和API设计上进行了全方位的重构和升级,1.0.0版本标志着Nacos的架构已经稳定,API列表最终肯定。升级到1.0.0相比升级到其余版本,须要额外的一些工做,本文专门介绍如何从Nacos 0.8.0以上版本升级到1.0.0 版本的全部步骤和细节。git
Nacos 1.0.0 服务端不兼容 0.8.0 之前的版本,若是您想升级到1.0.0,请先升级服务端到0.8.0版本。一样的,Nacos 1.0.0 不兼容 0.8.0 如下版本的客户端访问。github
ephemeral
字段 #502,#677;groupName
字段 #269;Server
状态的设置 #744;Server
运行模式的设置 #745;Nacos 在 1.0.0版本 instance
级别增长了一个ephemeral
字段,该字段表示注册的实例是不是临时实例仍是持久化实例。若是是临时实例,则不会在 Nacos 服务端持久化存储,须要经过上报心跳的方式进行包活,若是一段时间内没有上报心跳,则会被 Nacos 服务端摘除。在被摘除后若是又开始上报心跳,则会从新将这个实例注册。持久化实例则会持久化被 Nacos 服务端,此时即便注册实例的客户端进程不在,这个实例也不会从服务端删除,只会将健康状态设为不健康。api
同一个服务下能够同时有临时实例和持久化实例,这意味着当这服务的全部实例进程不在时,会有部分实例从服务上摘除,剩下的实例则会保留在服务下。服务器
另外一个须要注意的是,临时实例和持久化实例,在特定的服务端进行模式下可能不容许进行注册,这和下面要讲的第5个变动有关。网络
以前服务的健康检查模式有三种:client、server 和none, 分别表明客户端上报、服务端探测和取消健康检查。在控制台操做的位置以下所示:架构
在 Nacos 1.0.0 中将把这个配置去掉,改成使用实例的ephemeral
来判断,ephemeral
为true
对应的是服务健康检查模式中的 client 模式,为false
对应的是 server 模式。curl
客户端注册实例时,能够在方法级别指定要注册的分组名,这个分组名和服务名是对服务的一个二维的标识,两者共同定位一个服务。一个典型的使用分组的实例以下:分布式
namingServer.registerInstance("nacos.test.1","group1",instance);
不指定分组的接口依然是支持的,此时会在服务端为这个服务分配一个默认的分组:DEFAULT_GROUP。ide
为了让 Nacos 的 API 分类更加合理,管理更加清晰,原来在/nacos/v1/ns/api/下的接口都会转移到相应的其余URL下。Nacos 服务发现整体定义了 /instance,/service,/cluster,/health,/operator,/catalog,/raft 等 URL 目录,后面全部的 openAPI 都会根据其类型放到相应的 URL 下。对用户形成的影响是一些早期的版本客户端可能没法在访问 Nacos 服务端。post
Nacos 增长了对 Server 状态的控制,全部的状态都定义在com.alibaba.nacos.naming.cluster.ServerStatus
类里。
各个状态的含义介绍以下:
用户可使用以下接口来修饰集群全部机器的状态,若是再加上debug=true
参数,则只修改当前机器的状态。
curl-X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=overridenServerStatus&value=READ_ONLY'
同时这个状态是会自适应进行修改的,好比启动时这个状态为STARTING,等到数据装载完毕,则会自动将状态置为 UP,在运行过程当中,若是检测到系统异常如磁盘满,则又会将状态置为DOWN。不过自适应的状态值优先级要低于使用接口设置的状态值,所以当你想恢复自适应的状态调解的时候,记得将接口中overriddenServerStatus
设置为空。
Server的运行模式,是指 Nacos Server 能够运行在多种模式下,当前支持三种模式:AP、CP和 MIXED 。这里的运行模式,使用的是CAP理论里的C、A和P概念。基于CAP理论,在分布式系统中,数据的一致性、服务的可用性和网络分区容忍性只能三者选二。通常来讲分布式系统须要支持网络分区容忍性,那么就只能在C和A里选择一个做为系统支持的属性。C 的准肯定义应该是全部节点在同一时间看到的数据是一致的,而A的定义是全部的请求都会收到响应。
Nacos 支持 AP 和 CP 模式的切换,这意味着 Nacos 同时支持二者一致性协议。这样,Nacos可以以一个注册中心管理这些生态的服务。不过在Nacos中,AP模式和CP模式的具体含义,还须要再说明下。
AP模式为了服务的可能性而减弱了一致性,所以AP模式下只支持注册临时实例。AP 模式是在网络分区下也可以注册实例。在AP模式下也不能编辑服务的元数据等非实例级别的数据,可是容许建立一个默认配置的服务。同时注册实例前不须要进行建立服务的操做,由于这种模式下,服务其实降级成一个简单的字符创标识,不在存储任何属性,会在注册实例的时候自动建立。
CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,所以网络分区下不可以注册实例,在网络正常状况下,能够编辑服务器别的配置。改模式下注册实例以前必须先注册服务,若是服务不存在,则会返回错误。
MIXED 模式多是一种比较让人迷惑的模式,这种模式的设立主要是为了可以同时支持临时实例和持久化实例的注册。这种模式下,注册实例以前必须建立服务,在服务已经存在的前提下,临时实例能够在网络分区的状况下进行注册。
使用以下请求进行Server运行模式的设定:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
nacos-client
注册,并可以保持心跳上报,那么就能够选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,而K8S服务和DNS服务,则适用于CP模式。AP模式的服务实例能够在CP模式下注册,例如Zookeeper,可是反过来不能。支持了全局推送开关,能够打开或者关闭服务变动的推送,调用接口以下:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=pushEnabled&value=false'
关闭推送后,客户端依然会经过轮询的方式来更新到数据,只是更新的速度没有推送那么快。
在老版本的Nacosz中,只要Server启动成功就会开始对外提供服务,此时服务的数据并不必定彻底加载完成,这样可能会致使客户端接收到的数据并不完整。1.0.0增长了数据预热的逻辑,对于持久化数据,则会等待全部数据从磁盘加载完成,对于临时实例这样的非持久化数据,则会等待从其余Server拉取到完整数据。全部数据都准备好后,才会将Server状态置为UP。
WRITE_ONLY
,容许客户端数据逐步汇聚补偿上来,可是阻止任何查询的流量,等集群数据准备好之后,再将这个运行状态清空,集群本身调整运行状态,而后就会提供完整服务。此前的元数据编辑框须要用户按照指定格式来编辑,容易出错,以下如所示:
1.0.0将会对服务页面的元数据编辑框进行优化,在调整编辑框大小的同时,增长语法高亮,方便用户进行编辑和识别格式问题,一个大概的编辑框预览图以下:
Nacos 1.0.0将支持MySQL 8.0 驱动。
服务发现和配置管理的完整API列表会发布到官网,同时对于Nacos的数据模型,集群模型,架构设计及模块设计等文档也会发布。
除了上面提到的变动,Nacos 1.0.0还进行了代码的优化和一些bug的修复,完整的变动列表能够参考:https://github.com/alibaba/nacos/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0.0