Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境

通过 3 个 RC 版本的社区体验以后,Nacos 正式发布 1.0.0 GA 版本,在架构、功能和 API 设计上进行了全方位的重构和升级。html

1.0.0 版本的发布标志着 Nacos 已经能够大规模的在生产环境中使用,新版本不只针对社区的需求和集群的稳定性相应地增长了一些新特性,并且还发布了服务发现模块的性能测试报告,以及完整的 API 列表和架构设计文档。git

Nacos演进历程
Nacos 自 2018 年 7 月份开源以来,有赖于社区的大力关注和参与,在不到一年的时间里,已经演进了 10+ 个版本。同时也有不少企业客户一直都使用 Nacos 做为生产环境的注册中心和配置中心。github

Nacos 源于阿里巴巴内部近十年的生产环境打磨的核心中间件,在开源以前就支撑着双十一等大型业务场景。Nacos 开源不只是为了丰富整个微服务生态,也是为了打造一款真正可以应对大规模、高并发和复杂环境下复杂需求的生产级服务注册中心和配置管理平台。在 1.0.0 GA 版本发布之际,在此回顾一下 Nacos 的演进历程:架构

2018.07.20 - Nacos 0.1.0 支持基本的服务发现功能和配置管理功能。
2018.09.15 - Nacos 0.2.0 正式支持SpringCloud生态。
2018.10.26 - Nacos 0.3.0 提供控制台界面。
2018.11.19 - Nacos 0.5.0 开源DNS-F,支持DNS协议服务发现。
2018.12.06 - Nacos 0.6.0 正式支持Dubbo客户端注册服务,支持K8S部署。
2018.12.18 - Nacos 0.7.0 支持CMDB元数据管理,支持Node.js客户端。
2019.01.22 - Nacos 0.8.0 PRE-GA 支持控制台帐号登陆,支持命名空间,Nacos-Sync打通Eureka和Zookeeper。
2019.02.22 - Nacos 0.9.0 增长metrics数据暴露,增长测试用例,全面提高稳定性。
2019.04.10 - Nacos 1.0.0 GA 同时支持AP和CP一致性,压测报告发布,稳定性增强和体验优化。并发

Nacos 1.0.0 新增的特性运维

注册实例支持ephemeral字段
Nacos在1.0.0版本在instance级别增长了一个ephemeral字段,该字段表示注册的实例是不是临时实例仍是持久化实例,若是是临时实例,则不会在Nacos服务端持久化存储,须要经过上报心跳的方式进行保活,若是一段时间内没有上报心跳,则会被Nacos服务端摘除。在被摘除后若是又开始上报心跳,则会从新将这个实例注册。持久化实例则会持久化到Nacos服务端,此时即便注册实例的客户端进程不在,这个实例也不会从服务端删除,只会将健康状态设为不健康。curl

图片描述

同一个服务下能够同时有临时实例和持久化实例,这意味着当这服务的全部实例进程不在时,会有部分实例从服务上摘除,剩下的实例则会保留在服务下。微服务

因为老版本客户端注册实例时不会上传ephemeral字段,须要在Nacos服务端设置一个默认的ephemeral值。Nacos 1.0.0里ephemeral的默认值为true,即老版本客户端默认注册的是临时实例。若是须要让老客户端注册的实例类型是持久化实例,能够设置开关:高并发

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=defaultInstanceEphemeral&value=false'性能

注意事项
当从老版本Nacos升级到Nacos 1.0.0时,从磁盘加载的实例数据会被置为持久化实例。

注册实例支持groupName字段
客户端注册实例时,能够在方法级别指定要注册的分组名,这个分组名和服务名是对服务的一个二维的标识,两者共同定位一个服务。一个典型的使用分组的例子以下:

namingService.registerInstance("nacos.test.1", "group1", instance);
不指定分组的接口依然是支持的,此时会在服务端为这个服务分配一个默认的分组:DEFAULT_GROUP。

增长了Server状态的设置
Nacos增长了对Server状态的控制,全部的状态都定义在com.alibaba.nacos.naming.cluster.ServerStatus类里。

图片描述

各个状态的含义介绍以下:

UP:Server一切正常,读写请求都会被接受;
DOWN:Server异常,全部请求会返回HTTP 503错误;
STARTING:Server还在启动中,全部请求返回HTTP 503错误;
PAUSED:Server被人工暂停,区别于DOWN多是系统本身检测到异常而后设置DOWN状态,PAUSED状态表示当前Server多是没问题的,只是人工进行了干预;
WRITE_ONLY:只有非GET请求会被接受;
READ_ONLY:只有GET请求会被接受;
用户可使用以下接口来修改集群全部机器的状态,若是再加上debug=true参数,则只修改当前机器的状态。

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=overriddenServerStatus&value=READ_ONLY'

同时这个状态是会自适应进行修改的,好比启动时这个状态为STARTING,等到数据装载完毕,则会自动将状态置为UP,在运行过程当中,若是检测到系统异常如磁盘满,则又会将状态置为DOWN。不过自适应的状态值优先级要低于使用接口设置的状态值,所以当你想恢复自适应的状态调节的时候,记得将接口将overriddenServerStatus设置为空。

增长全局推送开关
支持了全局推送开关,能够打开或者关闭服务变动的推送,调用接口以下:

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=pushEnabled&value=false'
关闭推送后,客户端依然会经过轮询的方式来更新到数据,只是更新的速度没有推送那么快。

支持启动时数据预热
在老版本的Nacos中,只要Server启动成功就会开始对外提供服务,此时服务的数据并不必定彻底加载完成,这样可能会致使客户端接收到的数据并不完整。1.0.0增长了数据预热的逻辑,对于持久化数据,则会等待全部数据从磁盘加载完成,对于临时实例这样的非持久化数据,则会等待从其余Server拉取到完整数据。全部数据都准备好后,才会将Server状态置为UP。

注意事项
对于临时实例的预热,实现机制是Server在启动时会从其余Server节点拉取数据,拉取成功则启动成功,可是当从老版本Server升级到1.0.0时,因为这个拉取全量数据的接口在老版本Server不存在,那么第一个升级的机器将没法拉到任何数据,从然后面升级的机器也没法从第一个升级的机器拉取到数据。此时建议使用调用API将Server的运行状态设置为WRITE_ONLY,容许客户端数据逐步汇聚补偿上来,可是阻止任何查询的流量,等集群数据准备好之后,再将这个运行状态清空,集群本身调整运行状态,而后就会提供完整服务。

元数据编辑框优化
此前的元数据编辑框须要用户按照指定格式来编辑,容易出错,以下图所示:

图片描述

1.0.0将会对服务页面的元数据编辑框进行优化,在调整编辑框大小的同时,增长语法高亮,方便用户进行编辑和识别格式问题,一个大概的编辑框预览图以下:

图片描述

支持MySQL 8.0
Nacos 1.0.0将支持MySQL 8.0驱动。

除了上面提到的变动,Nacos 1.0.0还进行了代码的优化和一些bug的修复,完整的变动列表能够参考:https://github.com/alibaba/na...

大规模生产可用

API完整列表开放,模型设计和架构设计文档发布
服务发现和配置管理的完整API列表会发布到官网,除了核心功能外,也包含部分运维接口,方便开发者进行集成:https://nacos.io/zh-cn/docs/o...
同时对于Nacos的数据模型、集群模型、架构设计及模块设计文档进行了更新:
https://nacos.io/zh-cn/docs/a...

性能测试报告发布
Nacos 1.0.0进行了性能测试,针对服务发现和配置管理的读写能力进行了大规模场景的压力测试。目前获得的测试数据是:

容量:服务实例数100万+,配置数100万+,支持客户端链接100万+;
读写TPS:1万+;
节点扩展能力:100节点+;
推送能力:1万客户端订阅同一配置/服务,3秒内收到变动通知比例99.9%;
目前压测报告已经更新到官网:
https://nacos.io/zh-cn/docs/n...
https://nacos.io/zh-cn/docs/n...

100+企业用户已经上生产
目前Nacos做为服务发现和配置中心已经有100多个用户的生产环境中服役,其中包含阿里巴巴、虎牙等企业已经大规模应用在核心业务场景中。

升级建议
Nacos 1.0.0 服务端个别接口与 0.8.0 之前的版本不兼容,0.8.0以前版本须要先升级到0.8.0,再升级到1.0.0。对客户端而言,Nacos 1.0.0兼容0.5.0及以上的版本的客户端访问。

如何共建
为了实现这一目标,你须要积极参与Nacos社区。若是您在文档中发现拼写错误,在代码中发现错误,或想要新功能或想要提供建议,您能够在GitHub上建立一个issues。

若是您想开始着手,能够选择github仓库中有如下标签的issues。

good first issue:对于新手来讲是很是好的入门issues。contribution welcome:很是须要解决的问题和很是重要的模块,但目前缺乏贡献者,欢迎贡献者来贡献。

相关文章
相关标签/搜索