Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境
经过 3 个 RC 版本的社区体验之后,Nacos 正式发布 1.0.0 GA 版本,在架构、功能和 API 设计上进行了全方位的重构和升级。
1.0.0 版本的发布标志着 Nacos 已经可以大规模的在生产环境中使用,新版本不仅针对社区的需求和集群的稳定性相应地增加了一些新特性,而且还发布了服务发现模块的性能测试报告,以及完整的 API 列表和架构设计文档。
Nacos演进历程
Nacos 自 2018 年 7 月份开源以来,有赖于社区的大力关注和参与,在不到一年的时间里,已经演进了 10+ 个版本。同时也有很多企业客户一直都使用 Nacos 作为生产环境的注册中心和配置中心。
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服务端,此时即使注册实例的客户端进程不在,这个实例也不会从服务端删除,只会将健康状态设为不健康。
同一个服务下可以同时有临时实例和持久化实例,这意味着当这服务的所有实例进程不在时,会有部分实例从服务上摘除,剩下的实例则会保留在服务下。
由于老版本客户端注册实例时不会上传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/nacos/issues?q=is%3Aissue+milestone%3A1.0.0
大规模生产可用
API完整列表开放,模型设计和架构设计文档发布
服务发现和配置管理的完整API列表会发布到官网,除了核心功能外,也包含部分运维接口,方便开发者进行集成:https://nacos.io/zh-cn/docs/open-API.html
同时对于Nacos的数据模型、集群模型、架构设计及模块设计文档进行了更新:
https://nacos.io/zh-cn/docs/architecture.html
性能测试报告发布
Nacos 1.0.0进行了性能测试,针对服务发现和配置管理的读写能力进行了大规模场景的压力测试。目前得到的测试数据是:
- 容量:服务实例数100万+,配置数100万+,支持客户端连接100万+;
- 读写TPS:1万+;
- 节点扩展能力:100节点+;
- 推送能力:1万客户端订阅同一配置/服务,3秒内收到变更通知比例99.9%;
目前压测报告已经更新到官网:
https://nacos.io/zh-cn/docs/nacos-naming-benchmark.html
https://nacos.io/zh-cn/docs/nacos-config-benchmark.html
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:非常需要解决的问题和非常重要的模块,但目前缺少贡献者,欢迎贡献者来贡献。
蓬勃发展的 Nacos 社区
DISS is cheap, show me your hand
比吐槽更重要的是搭把手,参与社区一起发展Nacos
- 作为用户关注和加入 Nacos 社区
Nacos 社区正在蓬勃发展,截止到发文为止,Nacos 短短几个月已经有 9 个微信群,其中 7 个已满员,1个QQ群,1个钉钉群,关注 Nacos 的社区人数已经近5000人,在 Nacos 群里跟 “道(基)友” 切磋技术,交流经验,招聘交友,抢抢红包...不亦乐乎。
- 作为代码贡献者加入 Nacos 社区
从Nacos用户发展而成贡献者顺理成章,而Nacos开发团队也确实在日趋壮大,从开始的只有4个代码contributor发展到目前的40多个,1.0.0版本中,参与Nacos仓库贡献的开发者有:yanlinly、xuechaos、hxy1991、jifengnan、nkorange、neatlife、loadchange、TsingLiang、jameslcj、duansheli、pbting、mingyixu、paderlol、nanamikon等。
除此之外,社区neatlife贡献了多个语言的Nacos客户端:PHP,C#。
而社区也正在计划在合适的时机上,将在Nacos官网 nacos.io 中添加团队介绍页,将大家正式公布于众,欢迎大家加入Nacos社区,贡献社区。用Apache的话说,“社区高于代码”!
新人时刻 - "什么是Nacos?"
还不知道什么是Nacos? 没关系,在github上star一下跟程序猿兄弟打个招呼吧!!
Nacos 是阿里巴巴于2018年7月份新开源的项目,Nacos的主要愿景是期望通过提供易用的 动态服务发现
、服务配置管理
、服务共享与管理
的基础设施,帮助用户在云原生时代更好的构建、交付、管理自己的微服务平台。
github项目地址在 这里
更多与 Nacos 相关的开源项目信息
- Nacos
- Dubbo Registry Nacos
- Nacos DNS-F
- Nacos Docker
- Nacos Spring Project
- Nacos Spring Boot
- Spring Cloud Alibaba
- Dubbo
- Sentinel
- Spring Cloud
- Nepxion Discovery
- Spring Cloud Gateway Nacos
本文作者:中间件小哥
本文为云栖社区原创内容,未经允许不得转载。
Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境的更多相关文章
- Nacos 发布 v0.8.0 Pre-GA版本,安全稳定上生产?
服务注册和服务配置开源项目 Nacos 本周发布了 v0.8.0 Pre-GA 版本,作为开源项目生命周期中的里程碑版本之一,v0.8.0 Pre-GA版本支持登录.命名空间.Metrics监控(对接 ...
- django2.0 + python3.6 在centos7 下部署生产环境的一些注意事项
一:mysql 与环境选用的坑 目前, 在生产环境部署django有三种方式: 1. apache + mod_wsgi 2. nginx + uwsigi 3. nginx + supervisor ...
- Spring.profile配合Jenkins发布War包,实现开发、测试和生产环境的按需切换
前两篇不错 Spring.profile实现开发.测试和生产环境的配置和切换 - Strugglion - 博客园https://www.cnblogs.com/strugglion/p/709102 ...
- 厉害了,Spring Cloud Alibaba 发布 GA 版本!
? 小马哥 & Josh Long ? 喜欢写一首诗一般的代码,更喜欢和你共同 code review,英雄的相惜,犹如时间沉淀下来的对话,历久方弥新. 相见如故,@杭州. 4 月 18 日, ...
- 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用
今年 3 月份,阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell的消息,在很长一段时间内都是开发者的讨论焦点,该项目在 Github 上的 Star 数迅速突破 1 ...
- Percona Server 5.6.13-61.0 首个 GA 版本发布
Percona Server 5.6 的首个 GA 版本发布了,版本号是 5.6.13-61.0 ,该版本基于 MySQL 5.6.13 改进内容包括: New Features: Percona S ...
- Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本,该版本主要包括了DNS-basedService Discovery,对Java 11的支持,持续优化Nacos产品用户体验,更深度的与Sp ...
- MySQL 8.0.0 版本发布,亮点都在这了!
导读 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开 ...
- Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到17 了吗?
2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1. 下面一起来来看看Spring Boot 3.0.0 M1版本都有哪些重大变化: Java基线从 ...
随机推荐
- mysql导出数据库某些表的数据
# 导出数据,一般从从库导出,减少主库的压力.mysqldump -hhostname -P3306 --single-transaction --master-data= database_name ...
- Redis源码解析:26集群(二)键的分配与迁移
Redis集群通过分片的方式来保存数据库中的键值对:一个集群中,每个键都通过哈希函数映射到一个槽位,整个集群共分16384个槽位,集群中每个主节点负责其中的一部分槽位. 当数据库中的16384个槽位都 ...
- 09安装运行redis-trib.rb所需的环境
运行redis-trib.rb脚本配置Redis的cluster,需要安装ruby环境,这里采用源码安装: 1:下载源码包: https://cache.ruby-lang.org/pub/ruby/ ...
- php5.3中namespace的说明,帮助初次接触namespace的phper快速理解
命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀,但是方法名变的很长 ...
- PHP实现微信申请退款流程实例源码
https://www.jb51.net/article/136476.htm 目录 前期准备: 前面讲了怎么实现微信支付,详见博文:PHP实现微信支付(jsapi支付)流程 和ThinkPHP中实 ...
- WPF内嵌CEF控件,与JS交互
1)安装cefsharp.winform包 打开VS2017,打开nuget,找到cefsharp.winform,安装 问:为什么wpf程序不使用cefsharp.wpf? 答:因为cefwpf 4 ...
- java opencv 4.0.1安装配置
如果没有把dll扔到jdk会报错 Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no ...
- HDU 4006优先队列
//按照降序排列,而且队列中只保存k个元素 #include<stdio.h> #include<queue> using namespace std; int main(){ ...
- 用蒙特卡罗方法解非线性规划MATLAB
共需要三个M文件,主程序为randlp.m randlp.m: function [sol,r1,r2]=randlp(a,b,n) %随机模拟解非线性规划 debug=1; a=0; %试验点下界 ...
- 编码之Base64编码
Base64编码 是一种基于 64 个可打印字符来表示二进制数据的方法.目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一. 为什么会有 Base64 编码呢?因为有些网 ...