Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
作者:席翁
Nacos 社区刚刚迎来了 Star 突破 30000 的里程碑,从此迈上了一个新的阶段。感谢大家的一路支持、信任和帮助!
Nacos /nɑ:kəʊs/是 Dynamic Naming and Configuration Service 的首字母简称,定位于一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。从 2018 年 7 月开始宣布开源以来,已经走过了第六个年头,在这六年里,备受广大开源用户欢迎,收获许多社区大奖。Nacos 在社区共同的建设下不断成长,逐步的开始帮助用户解决实际问题,助力企业数字化转型,目前已经广泛的使用在国内的公司中,根据微服务领域调查问卷,Nacos 在注册配置中心领域已经成为国内首选,占有 50%+ 国内市场份额,被各行各业的头部企业广泛使用!
Nacos 社区想借此良辰,回顾一下近两年社区的发展,以及简单进行一下未来的展望和演进的规划。
社区回顾
1.1 从 2.0 到 2.4 的版本演进
在过去的两年左右时间,Nacos 从 2.0.4 版本演进到了 2.4.2 版本,2.X 版本从最初的解决 1.X 的性能问题逐渐成熟,基本完成了当初构想的高性能、易拓展的目标,并且对产品的易用性和安全性进行了提升。
1.1.1 插件化能力
在 2.0.X 版本中,Nacos-Client 和 Nacos-Server 经过对部分 gRPC 使用问题的修复,解决了 1.X 架构所带来的性能瓶颈,同时实现了稳定的生产环境运行。Nacos 社区开始致力于插件化改造,支持用户灵活实现和定制插件。用户可以根据自身业务需求,通过实现相关的 SPI 接口和引入 jar 包,轻松实现自定义的鉴权、加解密和多数据源等附加功能。插件化的升级使 Nacos 能够充分实现核心功能与多种附加功能的解耦,从而显著增强了可扩展性。
在过去两年的社区发展中,Nacos 推出了多个插件 [ 1] ,包括鉴权、配置加解密、数据源、变更轨迹、限流以及配置变更 Hook 等。特别值得一提的是数据源插件,许多插件实现得到了社区的广泛贡献,并且还有众多公司、团队以及个人根据需求定制适配各类数据源,以满足其业务和部署的需求。
1.1.2 安全和易用提升
在 Nacos 的 2.0 到 2.4 版本之间,对默认鉴权插件进行了重要的重构和改进。新版本移除了以往版本中与安全相关的默认值,包括 token、身份相关的 key-value 和管理员密码等。使用鉴权功能时,系统会提供必要的校验和明确的错误提示,以避免因使用默认值而产生的安全风险。此外,Nacos 也调整了控制台的登录页面,使其能够与鉴权功能的启用状态同步,防止造成误导。对于未开启鉴权功能的集群,Nacos 控制台会显眼地提示用户,并推荐启用鉴权。
除了对默认鉴权的改进和提示,Nacos 还新增了全链路 TLS 功能。这涵盖了客户端与服务端之间的 TLS 通信,以及服务端之间的 TLS 通信,确保数据传输的安全性和加密性。
在易用性方面,Nacos 在 2.0 到 2.4 版本中也做出了显著的改进。例如,新增支持批量注册服务,以满足代理注册和网关等应用场景,并引入了服务订阅的增量通知机制,避免用户需要自己保存和比对服务实例的历史状态;支持 Prometheus SD 协议,可以方便地将注册到 Nacos 上的微服务,通过 SD 协议通知 Prometheus 进行监控数据的采集。
这些功能的提升和改进,进一步增强了 Nacos 的安全性和用户体验。
1.2 新的官网
“相信一切都是服务,每个服务节点被构想为一个星球,每个服务都是一个星系。Nacos 致力于帮助建立这些服务之间的连接,助力每个面向星辰的梦想能够透过云层,飞在云上,更好的链接整片星空。”
Nacos 官网 https://nacos.io/ 是开源产品 Nacos 的官方平台,年均吸引百万级独立访客,受到了广大开发者的关注。在此期间,官网进行了一次较大幅度的更新,主要围绕提升用户体验,着重关注开发者的核心需求。
1.2.1 解决 Nacos 下载和文档版本混乱问题
首先,为了解决开发者在 GitHub 下载时遇到的速度慢的问题,我们增强了 Nacos 的官方下载渠道。
在文档结构方面,我们进行了优化,新版本的文档将按照不同版本进行拆分,以避免之前出现的文档与新版本特性不一致的问题。同时,用户可以直接访问预览版文档,从而提升文档的更新效率。
1.2.2 电子书在线预览和博客文章分类
升级后的新官网也新增了《Nacos 架构与原理》电子书的预览版本,便于用户在线查阅。帮助用户快速理解 Nacos 的架构与原理,更好的使用 Nacos。
另外对之前的博客文章进行了分类展示,有技术含量较高的技术博客、有社区的新闻和活动等等,帮助官网访问者快速找到自己感兴趣的内容进行阅读。
1.2.3 使用大模型进行专家答疑
最后,升级后的新官网引入了通义大模型,针对社区中常见问题进行了训练,在官网中提供了专家答疑功能。社区用户可以就微服务和 Nacos 相关问题进行咨询,借助大模型的搜索和推理能力,为用户提供解决方案。
1.3 多语言和更多生态支持
同时多语言上,Go-SDK 也已经追平 Java-SDK 的功能和稳定性,Python-SDK 也发布了稳定版,并正在积极适配 2.X 版本的新特性,另外社区中也有很多优秀的生态组建。
1.3.1 Nacos-Go-SDK
随着 Nacos 2.X 的稳定,Nacos 的 go-sdk [ 2] 率先开始进行 Nacos 2.X 的适配工作并于 2022 年 2 月发布第一个适配 Nacos 2.X 的版本 2.0.0,随着 2 年左右的演进,目前 Nacos 的 go-sdk 在功能和特性上已经追平了 Nacos 的 Java-sdk,并且在稳定性上也不逊色于 Java-sdk,许多以 Go 语言为主的头部企业已经大规模使用新版本的 Go-sdk。
1.3.2 Nacos-Python-SDK 和 Nacos-Rust-SDK
随着 AI 大模型技术的火爆, 越来越多的 Python 应用和 AI 应用希望使用 Nacos 的注册&配置管理能力,来进行服务的发现、配置的动态变更以及 prompt 的动态发布等,Nacos 社区的 Python-SDK [ 3] 活跃度也随之增加;很快 Python-SDK 在进行了较多验证和修改后,正式发布第一个稳定版本 1.0.0,同时对于 Nacos2.X 和高版本 Python 的适配也正在如火如荼的进行。
另外 Rust 语言作为近两年的语言新宠,社区的小伙伴和贡献者们也是热情高涨,很快就在社区中发布了对应的 Rust-SDK [ 4] ,并持续进行维护和更新;目前已经发布到 0.4.2 版本。
1.3.3 R-Nacos 和 nginx-nacos-upstream
除了各类多语言 SDK, Nacos 社区中也加入了其他生态项目,如 r-nacos [ 5] 通过 rust 重构 Nacos-Server 的项目,可以在一些对资源占用极其敏感的场景使用,加入社区后始终保持高频更新,已经更新至 0.5.23 版本,足够于本地开发和测试环境使用,释放更多本地资源,提升本地运行效率。
nginx 作为反向代理和网关,在过去的十年里一直经久不衰;但其配置无法动态更新,只能通过 reload 命令进行配置的重载一直被社区所诟病。nginx-nacos-upstream [ 6] 项目就是希望使用 nacos 来解决 nginx 的动态配置问题,项目开发者近期将项目贡献至 Nacos 社区,并保持持续的维护和更新。
未来展望
2.1 Nacos 3.0
Nacos 2.X 版本随着插件化逐渐完善,功能已经趋于稳定。Nacos 社区在去年已经开始想社区用户征集 Nacos3.0 中希望的功能和方向。在众多的反馈中,我们能够展望 Nacos3.0 将着重于更安全,更泛用,更云原生进行演进。
2.1.1 更安全
虽然 Nacos 2.X 中已经对安全性进行了一定程度的增强,但还不足以达到默认安全的程度;同时随着 Nacos 的用户越来越多、影响力越来越大,更多的攻击者开始关注 Nacos,这需要 Nacos 在 3.0 版本中对安全方面的内容进行更多的投入。
因此 Nacos 社区计划在 3.0 版本中,对默认的鉴权插件进行升级,同时将 API 进行重新的梳理和设计,区分 Console API(控制台 API)、Client API(客户端 API)、Admin API(运维 API)和 Inner API(内部通信 API),并针对不同的 API 类型采取不同的鉴权手段,提升 Nacos 的安全性,降低安全风险。
另外,Nacos 3.0 也计划拆分 Nacos 控制台和 Nacos 引擎的部署架构,允许 Nacos 控制台使用不同的端口和不同的进程启动,从部署架构层面和网络层面对访问来源进行进一步的限制,以提升安全性。
2.1.2 更泛用
Nacos 之前的应用场景根据聚焦在微服务领域和分布式高可用领域,并伴随一些动态分发和管理的场景。
在 Nacos 3.0 版本中,Nacos 将会支持分布式锁、按照分组订阅配置和服务等功能,以便能够支持一些分布式协调、更多网关类型的使用场景。
同时 Nacos 3.0 也会尝试向 AI 方向的使用场景进行探索,比如动态 prompt、训练任务调度分配等场景。让 Nacos More than Microservice。
2.1.3 更云原生
Nacos 在 2.X 版本已支持了 MCP 协议及简单 XDS 协议,进行了初步的生产环境实践,但这需要依赖于 Istio 等组件进行协议数据的聚合以及二次下发,这增加了运维成本和问题的排查链路。未来,我们将通过开展以下工作来提供云原生支持:
1)原生支持 XDS 协议,可直接提供完整的 XDS 协议数据和内容,可选的去除关于 Istio 等组件的依赖,减轻部署和运维负担。
2)打通 Kubernetes 数据,进行数据的双向同步,帮助用户更好的解决传统部署架构和 Kubernetes 部署的互通场景,同时提供 ServiceMesh 化支持,将 Nacos 发展成云原生时代高性能注册中心,接入 Kubernetes 核心生态。
3)提供轻量级的 Nacos Sidecar,为用户提供零侵入、轻量级的服务注册与发现能力。
2.2 质量体系重构
Nacos 2.X 在社区的努力和积极贡献下快速发展,在插件化能力、安全和易用性上有了极大提升;但是我们也发现在这个过程中,虽然社区一直在补充单元测试、以及贡献了 nacos-e2e [ 7] 并在每次提交后的触发运行,Nacos 的质量体系逐渐不足以支撑社区的高速发展。
因此在后续的规划中,Nacos 社区不仅会继续补充测试用例,完善 nacos-e2e 的运行,同时也会对集成测试的流程和用例进行彻底的重构,提升 Nacos 每次发布的质量。
感谢社区参与者
Nacos 的成就和快速发展,离不开社区贡献者和其他参与者的热情贡献和积极参与,在过去的 1W star 过程中,Nacos 社区新增了 200 位贡献者,同时有 10+ 位的贡献者成为社区的 Committer。再次感谢大家的参与和对 Nacos 不足的体谅。
同时 Nacos 也积极参与社会各界举办的开源活动,比如中国科学院软件研究所的开源之夏、GitLink 的编程夏令营、天池的通义灵码活动等等。获得了很多开源奖项和认可。
最后再次感谢所有参与 Nacos社区和活动的用户、贡献者、Committer,非常感谢你们的付出,我们一起让 Nacos 更强大。同时也欢迎更多加入社区贡献者队伍,共同进行 Nacos 云原生化实践!
相关链接:
[1] 插件
https://github.com/nacos-group/nacos-plugin
[2] go-sdk
https://github.com/nacos-group/nacos-sdk-go
[3] Python-SDK
https://github.com/nacos-group/nacos-sdk-python
[4] Rust-SDK
https://github.com/nacos-group/nacos-sdk-rust
[5] r-nacos
https://github.com/nacos-group/r-nacos?tab=readme-ov-file
[6] nginx-nacos-upstream
https://github.com/nacos-group/nginx-nacos-upstream
[7] nacos-e2e
https://github.com/nacos-group/nacos-e2e
相关文章:
Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
作者:席翁 Nacos 社区刚刚迎来了 Star 突破 30000 的里程碑,从此迈上了一个新的阶段。感谢大家的一路支持、信任和帮助! Nacos /nɑ:kəʊs/是 Dynamic Naming and Configuration Service 的首字母简称,定位于一个更易于构建云原…...
PHP魔幻(术)方法
PHP中的魔幻方法,也被称为魔术方法(Magic Methods),是一组具有特殊功能的方法。这些方法在PHP中有固定的名称,并且会在特定的时机自动被PHP调用,而无需开发者显式调用。它们通常用于执行一些特殊的操作&…...
VS开发 - 静态编译和动态编译的基础实践与混用
目录 1. 基础概念 2. 直观感受一下静态编译和动态编译的体积与依赖项目 3. VS运行时库包含哪些主要文件(从VS2015起) 4. 动态库和静态库混用的情况 5. 感谢清单 1. 基础概念 所谓的运行时库(Runtime Library)就是WINDOWS系统…...
Golang | Leetcode Golang题解之第451题根据字符出现频率排序
题目: 题解: func frequencySort(s string) string {cnt : map[byte]int{}maxFreq : 0for i : range s {cnt[s[i]]maxFreq max(maxFreq, cnt[s[i]])}buckets : make([][]byte, maxFreq1)for ch, c : range cnt {buckets[c] append(buckets[c], ch)}an…...
零信任如何增强网络物理系统 (CPS) 安全性
远程访问对于管理关键基础设施至关重要,因为它允许企业优化和扩展运营并保持效率。然而,它也带来了许多安全漏洞,而且随着连接设备数量的增加,这些漏洞只会越来越多。 到 2025 年,企业和消费者环境中的物联网设备数量…...
V3D——从单一图像生成 3D 物体
导言 论文地址:https://arxiv.org/abs/2403.06738 源码地址:https://github.com/heheyas/V3D.git 人工智能的最新进展使得自动生成 3D 内容的技术成为可能。虽然这一领域取得了重大进展,但目前的方法仍面临一些挑战。有些方法速度较慢&…...
计算机网络期末复习真题(附真题答案)
前言: 本文是笔者在大三学习计网时整理的笔记,哈理工的期末试题范围基本就在此范畴内,就算真题有所更改,也仅为很基础的更改数值,大多跑不出这些题,本文包含简答和计算等大题,简答的内容也可能…...
Unity 的 UI Event System 是一个重要的框架
Unity 的 UI Event System 是一个重要的框架,用于处理用户界面中的输入事件。以下是它的主要特点和功能: 1. 事件管理 UI Event System 负责捕获和管理来自用户的输入事件,如鼠标点击、触摸、键盘输入等。 2. 事件传播 事件通过层次结…...
第十三章 集合
一、集合的概念 集合:将若干用途、性质相同或相近的“数据”组合而成的一个整体 Java集合中只能保存引用类型的数据,不能保存基本类型数据 数组的缺点:长度不可变 Java中常用集合: 1.Set(集):集合中的对象不按特定方式排序&a…...
子非线程池中物
线程池,又好上了 有任务队列 任务要处理就直接放到里面 预先创建好线程,本质上也是一个生产消费模型 线程池真是麻烦啊 我们可以直接沿用之前写过的代码,Thread.hpp: #pragma once #include <iostream> #include <functional&…...
Unraid的cache使用btrfs或zfs?
Unraid的cache使用btrfs或zfs? 背景:由于在unraid中添加了多个docker和虚拟机,因此会一直访问硬盘。然而,单个硬盘实在难以让人放心。在阵列盘中,可以通过添加校验盘进行数据保护,在cache中无法使用xfs格式…...
微服务实战——平台属性
平台属性 中间表复杂业务 /*** 获取分类规格参数(模糊查询)** param params* param catelogId* param type type"base"时查询基础属性,type"sale"时查询销售属性* return*/ Override public PageUtils listByCatelogId…...
半监督学习与数据增强(论文复现)
半监督学习与数据增强(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 半监督学习与数据增强(论文复现)概述算法原理核心逻辑效果演示使用方式 概述 本文复现论文提出的半监督学习方法,半监督学习&…...
css3-----2D转换、动画
2D 转换(transform) 转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果 移动:translate旋转:rotate缩放:scale 二维坐标系 2D 转换之移动 trans…...
SQL进阶技巧:统计各时段观看直播的人数
目录 0 需求描述 1 数据准备 2 问题分析 3 小结 如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通关指南 专栏 原价99,现在活动价39.9,十一国庆后将上升至59.9&#…...
Stream流的终结方法
1.Stream流的终结方法 2.forEach 对于forEach方法,用来遍历stream流中的所有数据 package com.njau.d10_my_stream;import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.function.Consumer; import java.util…...
JavaWeb——Vue组件库Element(4/6):案例:基本页面布局(基本框架、页面布局、CSS样式、完善布局、效果展示,含完整代码)
目录 步骤 基本页面布局 基本框架 页面布局 CSS样式 完善布局 效果展示 完整代码 Element 的基本使用方式以及常见的组件已经了解完了,接下来要完成一个案例,通过这个案例让大家知道如何基于 Element 中的各个组件制作一个完整的页面。 案例&am…...
【c++】 模板初阶
泛型编程 写一个交换函数,在学习模板之前,为了匹配不同的参数类型,我们可以利用函数重载来实现。 void Swap(int& a, int& b) {int c a;a b;b c; } void Swap(char& a, char& b) {char c a;a b;b c; } void Swap(dou…...
R 语言 data.table 大规模数据处理利器
前言 最近从一个 python 下的 anndata 中提取一个特殊处理过的单细胞矩阵,想读入R用来画图(个人比较喜欢用R可视化 ),保存之后,大概几个G的CSV文件,如果常规方法读入R,花费的时间比较久&#x…...
Java 静态代理详解:为什么代理类和被代理类要实现同一个接口?
在 Java 开发中,代理模式是一种常用的设计模式,其中代理类的作用是控制对其他对象的访问。代理模式分为静态代理和动态代理,在静态代理中,代理类和被代理类都需要实现同一个接口。这一机制为实现透明的代理行为提供了基础…...
OpenCV C++霍夫圆查找
OpenCV 中的霍夫圆检测基于 霍夫变换 (Hough Transform),它是一种从边缘图像中识别几何形状的算法。霍夫圆检测是专门用于检测图像中的圆形形状的。它通过将图像中的每个像素映射到可能的圆参数空间,来确定哪些像素符合圆形状。 1. 霍夫变换的原理 霍夫…...
H.264编解码介绍
一、简介 H.264,又称为AVC(Advanced Video Coding),是一种广泛使用的视频压缩标准。它由国际电信联盟(ITU)和国际标准化组织(ISO)联合开发,并于2003年发布。 H.264的发展历史可以追溯到上个世纪90年代。当时,视频压缩技术的主要标准是MPEG-2,但它在压缩率和视频质…...
Java | Leetcode Java题解之第450题删除二叉搜索树中的节点
题目: 题解: class Solution {public TreeNode deleteNode(TreeNode root, int key) {TreeNode cur root, curParent null;while (cur ! null && cur.val ! key) {curParent cur;if (cur.val > key) {cur cur.left;} else {cur cur.rig…...
【CViT】Deepfake Video Detection Using Convolutional Vision Transformer
文章目录 Deepfake Video Detection Using Convolutional Vision Transformerkey points**卷积视觉变压器**FLViT实验总结Deepfake Video Detection Using Convolutional Vision Transformer 会议/期刊:2021 作者: key points 提出了一种用于检测深度伪造的卷积视觉变压器…...
安卓主板_MTK4G/5G音视频记录仪整机及方案定制
音视频记录仪方案,采用联发科MT6877平台八核2* A78 6* A55主频高达2.4GHz, 具有高能低耗特性,搭载Android 12.0智能操作系统,可选4GB32GB/6GB128GB内存,运行流畅。主板集成NFC、双摄像头、防抖以及多种无线数据连接,支…...
Qt 教程全集目录公布(方便查阅)
点击上方"蓝字"关注我们 Qt 安装 以下是常见安装方法和软件获取 Qt4Qt5Qt6版本下载(在线和离线)【网址】...
云计算SLA响应时间的matlab模拟与仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 用matlab模拟,一个排队理论。输入一堆包,经过buffer(一个或者几个都行)传给server,这些包会在buffer里…...
ARTS Week 42
Algorithm 本周的算法题为 2283. 判断一个数的数字计数是否等于数位的值 给你一个下标从 0 开始长度为 n 的字符串 num ,它只包含数字。 如果对于 每个 0 < i < n 的下标 i ,都满足数位 i 在 num 中出现了 num[i]次,那么请你返回 true …...
10.2学习
1.IOC控制反转 IoC(Inverse of Control:控制反转)是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring⽤来实现 IoC …...
【数一线性代数】021入门
Index 推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/141729949分析实现总结 推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/141729949 给定二叉树的根节点root,计算其叶节点的个数。 分析实现 类似…...
淘宝客网站源码html/软文广告经典案例短的
a:link, a:visited {color:#666666;text-decoration:none; }a:hover, a:active {color:#000000;text-decoration:none; }...
网站怎样绑定域名访问/深圳网络推广网站
微信小程序在做地图功能时 用常规的办法height:100%;来设置高度来占满屏幕是不行的 它不会生效 应该改用单位vh 例如 height:100vh 这样就可以是地图占满整个屏幕高度 转载于:https://www.cnblogs.com/Iven-zhang/p/8822408.html...
地产公司做网站维护写代码么/北京seo技术交流
1.在solaris 10中,用户密码文件存在在哪个文件中?/etc/passwd/etc/shadow/etc/security/passwd/etc/password2.安装IIS的系统上,IWAM_前缀的用户名默认隶属于哪个用户组?administratorsIisusersusersguests3.下面对Oracle的密码规…...
一个网站域名一年要多少钱/自己如何做一个网站
gdb 调试器的使用:在用gcc编译程序时,加上 –g 参数,然后执行 (gdb 可执行程序名) 就进入gdb调试模式常用指令:1. l (list) 列出程序清单2. r (run) 运行程序3. b(breakpoint) 设置断点,格式:…...
保定比较好的网站建设公司/网店代运营靠谱吗
本文中,小编搜集了7个最有影响的衡量标注,让你可以不依赖日志文件来了解应用程序。现在,让我们看看这些性能指标,并了解如何查看并收集它们:1.响应时间和吞吐量根据应用程序的响应时间可以知道程序完成传输数据所用的时…...
深圳网站的优化公司/热门关键词
2019独角兽企业重金招聘Python工程师标准>>> 一、准备数据 1.去官网下载最新的solr。当前最新为4.5版本。 2.准备tomcat7.(下载tomcat7) 二、配置solr。 1.将下载的solr4.5解压得到: 2.将 example\solr-webapp 下的solr.war…...