Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步
自 2021 年发布以来,Nacos 2.0 在社区的支持下已走过近三年,期间取得了诸多成就。在高性能与易扩展性方面,Nacos 2.0 取得了显著进展,同时在易用性和安全性上也不断提升。想了解更多详细信息,欢迎阅读我们之前发布的回顾文章:《Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进》。
近期,我们欣喜地宣布 Nacos 3.0 的第一个版本 Nacos 3.0-ALPHA 已经发布。Nacos 3.0 的目标是在 2.0 的基础上,进一步优化安全性、易用性和标准化。同时,我们将引入更多功能,帮助用户在分布式协调、AI 大模型、云原生等多种场景中更好地使用 Nacos,以提升其广泛适应性。
01
Nacos 3.0 Alpha 主要更新亮点
Aliware
在 Nacos 3.0-ALPHA 的发布中,我们将重心放在了提升安全性和标准化上,这一部分内容将 Nacos 3.0 的后续更新的基础。
1.1 API 分类更为精细化
在 Nacos 3.0 之前,API 主要分为两大类:面向客户端和应用程序的 OpenAPI,以及供运维人员管理使用的 AdminAPI。这种分类方式在实际使用场景中存在一定的矛盾,比如用于引擎间数据同步的 API 和控制台上进行数据检索的 API,导致这部分 API 无法合理地对外开放和描述。同时,由于不同 API 对安全认证需求的差异,粗略将 API 分为两类也难以满足安全认证的多样化要求。
为了解决这些问题,Nacos 3.0 对 API 进行了更精细化的分类,具体包括:提供给客户端和应用程序的 OpenAPI、供运维人员和管理平面使用的 AdminAPI、用于控制台 UI 的 ConsoleAPI,以及引擎节点之间的 InnerAPI。这种新分类方式不仅针对不同使用场景提供了多维度的数据访问 API,同时也为不同类型的 API 实施相应的安全认证机制奠定了基础。
例如,客户端和应用程序往往更关心特定服务和配置,因此 OpenAPI 仅提供有限范围(如单个配置)的数据访问。而控制台则需要展示所有相关的数据,因此 ConsoleAPI 提供了更广泛的 list 范围 API。这种灵活的设计使得 Nacos 能够更好地满足不同用户和场景的需求。
1.2 按 API 类型默认启用安全认证
在 Nacos 3.0 之前,所有 API 都采用统一的安全认证方式,这对于 InnerAPI 和 AdminAPI 等主要用于内部调用的 API 来说并不适合。此外,由于所有 API 的安全认证采用同一个开关,导致在客户端和应用程序完成身份设置之前无法开启安全认证,从而带来了更高的安全风险。
为了解决这些问题,Nacos 3.0 将根据不同 API 类型默认采用不同的安全认证策略:对于 InnerAPI 和 AdminAPI,将默认启用 ServerIdentity 进行身份验证;对于 ConsoleAPI,将默认启用用户名和密码的身份及权限校验;而对于客户端和应用程序使用的 OpenAPI,则默认与 Nacos 2.0 保持一致,即默认不开启安全认证,需要用户自行查找并启用。这样做不仅提升了 Nacos 集群的数据安全性,还增加了用户在可信环境中的易用性,以及在升级启用安全认证过渡期间的稳定性。
1.3 优化默认命名空间
在 Nacos 中,命名空间 ID 是命名空间的唯一标识符。然而,许多用户在使用默认命名空间 public 时,错误地将名称“public”作为 ID 配置到应用程序中,这导致了一些问题。同时,其他正常使用此命名空间的用户对默认命名空间 public 的 ID 为空字符串''感到困惑。这种困惑源于服务发现模块可以使用 public 作为命名空间 ID 并将其视为默认处理方式,而在配置管理模块中却并非如此。简而言之,默认命名空间 ID 的处理方式存在不一致性。
此外,自 1.2.0 版本起,auth 插件依赖于命名空间 ID,而这种处理差异也引发了默认命名空间的权限问题。在适应默认命名空间''方面,数据源插件也遇到了一些困难。相关问题已在以下 ISSUE 中被讨论:#3525[1]、#8774[2]、#9773[3]、#9783[4]等。
为了解决默认命名空间 ID 的使用问题,Nacos 3.0 计划对默认命名空间的 ID 进行调整。根据社区讨论的 ISSUE#9846[5],默认命名空间的 ID 将被修改为 public,与其名称相同。在访问 API 时,如果未传入命名空间 ID 或仍然传入空字符串'',Nacos 3.0 将自动将其匹配为 public 以进行后续处理,从而兼容旧客户端的访问请求。
需要注意的是,Nacos 3.0 Alpha 版本在数据存储的平滑迁移和适配方面尚未进行处理,因此进行直接升级会导致配置数据无法获取,并且目前无法实现平滑升级。不过,Nacos 3.0 的正式版本将会支持平滑升级。
1.4 支持先进的 xDS 协议
xDS(Extended Discovery Service)是一组由 Envoy proxy 团队提出的协议,广泛应用于服务网格中,旨在服务发现和配置管理,以支持现代微服务架构下的动态配置。随着服务网格概念的普及,xDS 协议逐渐获得了社区的认可。Nacos 作为微服务生态体系中的注册与配置中心,通过标准化协议来满足服务网格的功能需求,成为云原生化的核心要求之一。
在 Nacos 2.0 版本中,Nacos 通过 Istio 的 MCP 协议获取服务数据,并将其转换为 xDS 协议数据。然而,这一过程依赖于中间组件 Istio,这导致系统的复杂性和稳定性面临风险。而在 Nacos 3.0 版本中,Nacos 直接支持 xDS 协议中的 EDS、LDS、RDS 和 CDS 协议,显著降低了对 Istio 组件的依赖,提高了系统的易用性和稳定性。
02
Nacos 3.0 即将推出的新功能
Aliware
基于 Nacos 3.0-Alpha 版本所提供的基础功能,在 Nacos3.0 正式版中计划进一步从架构上提升提升安全性和标准化能力。
2.1 全新 Admin API 的推出
在 Nacos 的早期版本中,AdminAPI 主要面向运维人员,专注于 Nacos 集群的维护操作。由于当时的设计场景多以人为本地调用为主,因此 AdminAPI 的定义较为随意,导致其安全性和标准化程度不足。这使得后续的控制台在复用 AdminAPI 时面临困难,同时也给希望开发自定义控制台或构建管理平台的开发者带来了挑战。
为了解决这些问题,Nacos 3.0 正式版将对 AdminAPI 进行全面的重新设计。我们将规范 API 的请求体、返回体和错误码等标准,提升整体的标准化水平。同时,默认启用并优化 AdminAPI 的身份验证,以增强安全性。此外,我们将提供 Maintainer-SDK,以便希望开发自定义管理程序的开发者方便使用。这些改进将为 Nacos 控制台与引擎的灵活拆分和部署奠定坚实基础。
2.2 控制台与引擎的灵活拆合部署
在之前的 Nacos 版本中,为了方便用户的部署和使用,控制台与引擎程序一直合并部署,且共用同一个端口。这种方式虽然增强了使用的便利性,但也带来了一些安全风险。此外,由于控制台和引擎在使用场景上存在差异,它们对于开放网络访问范围及安全认证需求的预期也不尽相同。基于此,Nacos 计划在新版本中对控制台和引擎的部署架构进行较大调整。
在 Nacos 3.0 中,控制台将独立在一个 Web 容器中运行,允许用户设定独立的访问端口。这一改变使得 Nacos 集群的运维人员能够更灵活地配置网络访问控制列表(ACL),例如,仅将控制台端口开放给办公网络。同时,配合控制台默认启用的安全认证,这将显著提高 Nacos 的安全性。此外,独立的 Web 容器还将与全新的 Admin API 相结合,实现控制台和引擎节点的灵活拆分部署,使得它们能够在不同节点上运行,进一步增强安全性。
2.3 引入分布式锁支持
Nacos 社区向用户征集了他们对 Nacos 3.0 的期望功能,其中支持分布式锁的需求是呼声最高的功能之一。分布式锁是一项在分布式应用中常用的功能,目前大多数实现依赖于 Zookeeper 或 Redis 等产品。许多用户已经将 Nacos 替换为 Zookeeper 来进行服务和配置管理,但由于 Nacos 尚未支持分布式锁,用户仍需额外运维 Zookeeper 集群,增加了系统的复杂性。
因此,Nacos 3.0 正式版本计划引入分布式锁的实验性功能,以满足部分用户对轻量级分布式锁的需求。这一功能的推出将帮助用户减少对额外系统的依赖,从而简化微服务应用架构,拓展 Nacos 的使用场景。
2.4 Spring Boot 3 和原生启动的支持
Spring 社区已经停止了 Spring Boot2 的支持,同时最新的 Spring Boot3 支持了 Java 原生启动的支持;考虑到 Spring Boot 3 要求将 JDK 升级至 17 及以上版本,这可能会导致许多用户在升级时遇到阻碍,因此 Nacos 2.X 版本依然基于 JDK 8 和 Spring Boot 2,并未升级至 Spring Boot 3。
然而,随着时间的推移,失去支持的 Spring Boot 2 将会产生越来越多的安全漏洞,这将间接降低Nacos的安全性。因此,Nacos 计划在 3.0 版本中对 JDK 和 Spring Boot 进行升级。这一升级不仅能确保遵循社区的支持,及时修复安全漏洞,而且还能利用 Java 原生启动来提升性能。
03
Nacos 3.X 发展蓝图
Aliware
在 Nacos 3.0 的发展蓝图中,我们将继续致力于提升易用性与普适性,以满足用户日益增长的需求。
在引擎自身方面,新版本计划引入了服务与配置的模糊订阅功能,使用户能够更灵活地管理服务和配置,简化在网关应用中服务发现和配置订阅的操作流程。此外,我们计划支持 DNS 协议,以进一步拓展 Nacos 在支持较弱编程语言场景中的适用性。另外对于服务健康检查体系,我们将优化相关机制,通过将健康检查与服务类型解耦,提供更多关于服务可用性的判断依据,这将使微服务之间的流量调用更加灵活,同时确保系统的稳定运行。最后对于社区中已经比较成熟的插件,我们会将其纳入 Nacos 的主干仓库中进行维护,诸如 PostgreSQL 插件、AES 配置加密插件等,让这些插件在后续版本中随引擎一起发布、不需要再独立构建引入。
在生态建设方面,我们将通过 Nacos Controller 的快速迭代,实现 Kubernetes 服务与配置的同步管理,从而使云原生环境下的使用变得更加便捷。此外,我们将积极探索多语言生态与 AI 大模型的集成,通过支持多语言应用框架以及 Spring AI 和其他 AI 大模型开发框架的动态 prompt 发现和资源发现,为用户提供更加丰富的功能选择与应用场景,努力构建一个高效、灵活的分布式协调平台。
04
关于 Nacos3.0 的一些投票和讨论
Aliware
Nacos 是一个开放的社区,任何社区参与者和使用者都可以参与 Nacos 发展的讨论,提供自己的想法和建议。由于 Nacos3.0 的改动较大,因此社区也发起了一些投票和讨论,希望大家能够积极参与,帮助 Nacos 社区更好的进行规划。
4.1 1.X 正式 EoL(End of Life)
Nacos 2.X 版本经过了近 3 年的演进和沉淀,无论是从性能、稳定、安全的角度,都比 1.X 版本优秀太多;而且 1.X 版本实际上也已经进入了尾声维护阶段(仅修复严重 Bug 和安全漏洞)近 2 年,我们希望在 Nacos 3.0 正式发版之际,正式归档和 EoL Nacos 的 1.X 版本(不再进行更新)。希望征询社区的意见,大家可以到 ISSUE#12921[6]中进行投票和讨论。
4.2 3.X 不再支持 1.X 的客户端
Nacos 的 2.X 版本兼容大多数 1.X 的客户端,这主要是考虑到业务应用升级客户端版本较为谨慎,时间周期较长;随着 Nacos 2.X 版本经过了近 3 年的演进和沉淀,主要的上游应用框架基本都升级到了 Nacos 2.X 的客户端,因此我们希望在 Nacos 3.0 或未来的某个 3.X 版本中,不再支持 1.X 的客户端,减少 Nacos 冗余代码。希望征询社区的意见,大家可以到 ISSUE#12922[7]中进行投票和讨论。
4.3 spring boot3 + jdk 17 升级
正如前文所提及的,由于 spring boot2 已经彻底停止了维护,nacos3 升级到spring boot 3 势在必行,对应的 JDK 版本也必须升级到 17。而升级 JDK 版本可能是一个比较大的变动,部分使用者可能由于各种考量无法接受 JDK 版本的升级。因此我们希望通过社区投票,再决定 Nacos 3.0 是否升级到 JDK17,欢迎大家到 ISSUE#12923[8]中进行投票和讨论。
除了上述的 3 个投票,Nacos 社区还有更多关于 Nacos3.0 改动的讨论,也欢迎大家积极参与,比如:ISSUE#9129[9]、ISSUE#9846 等。
05
About Nacos
Aliware
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
相关链接:
[1] #3525
https://github.com/alibaba/nacos/issues/3525
[2] #8774
https://github.com/alibaba/nacos/issues/8774
[3] #9773
https://github.com/alibaba/nacos/issues/9773
[4] #9783
https://github.com/alibaba/nacos/issues/9783
[5] ISSUE#9846
https://github.com/alibaba/nacos/issues/9846
[6] ISSUE#12921
https://github.com/alibaba/nacos/issues/12921
[7] ISSUE#12922
https://github.com/alibaba/nacos/issues/12922
[8] ISSUE#12923
https://github.com/alibaba/nacos/issues/12923
[9] ISSUE#9129
https://github.com/alibaba/nacos/issues/9129
相关文章:

Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步
自 2021 年发布以来,Nacos 2.0 在社区的支持下已走过近三年,期间取得了诸多成就。在高性能与易扩展性方面,Nacos 2.0 取得了显著进展,同时在易用性和安全性上也不断提升。想了解更多详细信息,欢迎阅读我们之前发布的回…...

【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)
HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…...
【人工智能-中级】卷积神经网络(CNN)的中阶应用:从图像分类到目标检测
文章目录 卷积神经网络(CNN)的中阶应用:从图像分类到目标检测1. 图像分类:CNN的基础应用CNN结构概述经典网络架构2. 目标检测:从分类到定位基于区域的目标检测方法单阶段目标检测方法边界框回归与NMS(Non-Maximum Suppression)3. 深度学习中的目标检测挑战与解决方案4. …...

[笔记] 编译LetMeowIn(C++汇编联编程序)过程
文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目,c调用汇编的程序,需要配置一下,特此记录一下 过程 下载源码 首先下载源码…...
牛客小白月赛107(A~E)
文章目录 A Cidoai的吃饭思路code B Cidoai的听歌思路code C Cidoai的植物思路code D Cidoai的猫猫思路code E Cidoai的可乐思路code 牛客小白月赛107 A Cidoai的吃饭 思路 签到题,按题意模拟即可 code void solve(){int n,a,b,c;cin >> n >> a &g…...

批量DWG文件转换低版本(CAD图转低版本)——c#插件实现
此插件可实现指定路径下所有dwg文件(包含子文件夹内dwg)一键全部转为低版本(包含2004、2007、2018版本,也可定制指定版本)。效果如下: (使用方法:命令行输入 “netload” 加载插件&…...
安装Python库
安装Python库 一、pip安装参数--no-deps 更换下载源,一劳永逸 二、conda下载 一、pip安装 换源安装并且信任该下载源 pip install pipenv -i http://pypi.douban.com/simple --trusted-host pypi.douban.com参数 –no-deps 有些 packages 会依赖一些其它的 p…...

智慧政务数据中台建设及运营解决方案
数据中台:政府数字化转型的引擎 数据中台作为政府数字化转型的核心驱动力,起源于美军的作战体系,强调高效、灵活与强大。它不仅促进了政府决策的科学性,还推动了政府服务的精细化与智能化。 数据中台的应用场景:数字…...

陪玩系统小程序源码/游戏陪玩APP系统用户端有哪些功能?游戏陪玩小程序APP源码开发
多客陪玩系统-游戏陪玩线下预约上门服务等陪玩圈子陪玩社区系统源码 陪玩系统源码,高质量的陪玩系统源码,游戏陪玩APP源码开发,语音陪玩源码搭建: 线上陪玩活动组局与线下家政服务系统的部署需要综合考虑技术选型、开发流程、部署流程、功能实…...
米哈游大数据面试题及参考答案
怎么判断两个链表是否相交?怎么优化? 判断两个链表是否相交可以采用多种方法。 一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指…...
使用Hydra库简化配置管理
使用Hydra库简化配置管理 简介 在现代软件开发中,配置管理是至关重要的。应用程序的灵活性和可维护性很大程度上取决于其如何处理配置。Hydra是一个由Facebook AI Research (FAIR) 开发的Python库,它旨在简化复杂应用的配置过程。Hydra使得开发者可以轻…...
二维数组和函数
文章目录 1、课程代码 #include <bits/stdc.h> using namespace std;//定义函数 /*函数名的命名规则和变量是一致的 函数的返回值数据类型 函数名(形式参数){函数体 } */ //自己写乘方pow这个函数 pow(2,3) int p(int a,int b); int p(int a,int b){int s1;for(i…...
如何在 Ubuntu 终端中打开当前文件夹的图形界面
文章目录 1. 简介2. 方法一:使用 Nautilus 文件管理器3. 方法二:使用通用命令 xdg-open4. 方法三:使用其他文件管理器5. 推荐方案6. 参考资料 1. 简介 在日常使用 Linux 系统时,我们常常会在终端中执行各种操作。有时,…...

基于SpringBoot的嗨玩旅游网站:一站式旅游信息服务平台的设计与实现
摘要 在旅游需求日益增长的今天,一个全面、便捷的旅游信息服务平台显得尤为重要。嗨玩旅游网站正是为了满足这一需求而设计的在线平台,它提供了包括景点信息、旅游线路、商品信息、社区信息和活动推广等在内的丰富旅游目的地信息,旨在帮助用…...

Opencv之图像梯度处理和绘制图像轮廓
一、梯度处理的sobel算子函数 处理示意 Sobel 算子是一种常用的图像边缘检测方法,结合了一阶导数和高斯平滑,用于检测图像的梯度信息。 1、功能 Sobel 算子用于计算图像在 x 和 y 方向的梯度,主要功能包括: 强调图像中灰度值的…...

vue3的watch一次性监听多个值用法
vue3的watch一次性监听多个值 1、监听单个值 watch(() > route.params.keyword, (newValue, oldValue) > {console.log(监听值变化, newVal, oldVal)state.a newValue});2、监听多个值 watch(() > [route.params.id, route.params.keyword], (newValue, oldValue) &g…...
Electron和C/C++开发桌面应用对比
Electron和C/C开发桌面应用对比 1. Electron 的特点 优点 跨平台支持: Electron 基于 Chromium 和 Node.js,可以轻松构建跨平台应用(Windows、macOS、Linux)。开发者只需编写一套代码,即可在多个平台上运行。 使用 …...

Q学习(Q-Learning)详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

【前端】 canvas画图
一、场景描述 利用js中的canvas画图来画图,爱心、动画。 二、问题拆解 第一个是:canvas画图相关知识。 第二个是:动画相关内容。 三、知识背景 3.1 canvas画图相关内容 canvas画图的基本步骤 获取页面上的canvas标签对象获取绘图上下文…...

超标量处理器设计笔记(10) 寄存器重命名过程的恢复、分发
重命名 寄存器重命名过程的恢复使用 Checkpoint 对 RAT 进行恢复使用 WALK 对 RAT 进行恢复使用 Architecture State 对 RAT 进行恢复总结 分发(Dispatch) 寄存器重命名过程的恢复 当发生异常、分支预测失败时,指令占用 RAT、ROB 和 Issue …...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...