跳到主要内容

· 阅读需 12 分钟

新版本发布

经过4个多月社区的大量贡献,Nacos 2.3.0版本终于进入的Beta发布阶段,在经历了2.2.X的多个安全风险修复的版本后,又一次迎来了功能性上的更新版本。

Nacos 反脆弱插件

2.2.0版本加入ALPHA版本的反脆弱插件后,社区经过多次重构和修改,提升抽象度和稳定性,终于在2.3.0版本中正式公布了Nacos的反脆弱插件,用于避免Nacos集群在大量请求和连接时导致的容量问题而引发更大规模的故障。

默认反脆弱实现插件的使用以及自定义反脆弱插件的开发可参考文档反脆弱插件.

Nacos 配置变更插件

Nacos配置管理作为Nacos的核心功能,一直受到开发人员、运维人员和审计人员的关注,不少运维人员和审计人员向社区提出诉求,希望Nacos能够提供配置变更的审计、变更通知等功能;同时开发人员也希望Nacos提供一定的格式校验功能,避免修改配置时出现错误导致应用故障。

由于Nacos配置管理本身对配置内容是不感知的,且各个用户公司的审计、通知系统也各不相同,因此Nacos为了能够更广阔的适配各个用户的诉求,在去年的开源之夏中制定了配置变更插件的课题,希望以插件化的形式,来满足对配置变更过程的介入。

经过同学和导师长期的努力,该插件在2.3.0版本发布,用户可以开发自定义插件,在配置变更前和变更完成后,分别对接公司的审计系统和通知系统,并在变更前进行更多的校验操作,如格式校验,配置名字的规范化等。同时Nacos社区也提供了默认插件的实现,可接入webhook进行配置变更的通知以及导入配置的文件名校验等;详情可参考文档配置变更插件

Nacos 请求参数校验

2.3.0版本之前的Nacos的参数校验逻辑分散,由各类请求的处理方法单独进行校验,难以更改维护,经常出现参数校验的遗漏,参数校验的规则也没有明确统一;这使得用户使用时经常会因为一些特殊字符导致功能不符合预期或出现漏洞,甚至导致大量推送,导致带宽打满,内存占用过多,导致应用出现故障。

在2.3.0版本中,Nacos明确了参数校验规则,在服务端实现了统一的参数校验逻辑并添加了参数校验层,根据校验规则对客户端向服务端发送的请求进行校验。用户可以选择开启参数校验功能,开启后Nacos将会对客户端向服务端发送的请求中的部分参数进行参数校验,确保参数的合法性,避免由于错误使用,导致的不符合预期以及性能问题。

详细情况可参考文档参数校验规则

Nacos 能力协商

随着Nacos功能越来越多,版本越来越多,客户端和服务端之间的兼容性愈发重要,如果继续保持尝试性的兼容,只会兼容能力愈发的困难。因此Nacos社区在去年开源之夏中,发布了课题,通过增加客户端和服务端之间的能力协商机制,在客户端连接到服务端时,让连接双方知道对方分别支持的功能,在支持对应功能的情况下,开启对应功能。避免通过尝试而增加通信开销。

在2.3.0版本中,该能力也被集成进来,为之后Nacos3.0支持更多优化功能提供基础。

其他重要改动

除了上述改动,Nacos2.3.0版本还支持了:客户端异常的metrics、grpc长连接的SSL功能、关闭开源控制台等功能,更多细节可以查看变更列表,欢迎试用:

## feature
[#5698] Support nacos control plugin.
[#8458] Support ability negotiations between server and clients.
[#8460] Support config change hook plugin.
[#10117] Support metrics for nacos client request server exception.
[#10150] Support SSL for grpc connection.
[#10223] Support auto build instance id when client request instance id is null.
[#10288] Support get more module state and switches in console.
[#10734] Support validate most of request parameters.
[#10774] Support toml format for configuration in console ui.
[#10831] Support batch deregister instances for service.
[#10971] Support disable console ui and support add guide information.

## Enhancement&Refactor
[#6819] Add page size selector in service details page.
[#8107][#9109][#10169][#10176] Enhance hint when console ui session expired for default auth plugin.
[#9085] Add the Reachability Metadata required by native-image.
[#9821] Enhance datasource plugin to make more datasource implementation easier.
[#9881] Enhance configuration page to supports folding when editing configuration.
[#10067] Enhance Windows compatibility for configuration snapshot.
[#10155] Enhance hints for grpc request when request timeout.
[#10343] Use CMS as default GC when jdk less 9.
[#10361] Refactor module switches to make only load specified module but not only close in console ui.
[#10520] Validate for namespace show name when create new namespace.
[#10521] Enhance the hints for `No DataSourceSet` error by validate datasource after construction.
[#10539] Enhance logs when opeation configuration failed.
[#10730] Link to v2 document for console ui.
[#10811] Enhance compatibility for colorful service healthy status in console ui.
[#10891] Support setting maximum number of push retries.
[#10930] Forward compatible old version secretKey for default auth plugin.
[#11129] Remove the namespace information from the node list page.
[#11231] Optimize the handleSpringBinder method in PropertiesUtil.

## BugFix
[#10056] Fix loss revision of client for distro sync.
[#10128] Fix wrong judgement in raft stateMachine.
[#10149] Fix dead lock on sending connection reset request on server over limit.
[#10271] Fix nacos-client failover switch file path.
[#10318] Fix import configuration problem.
[#10347] Fix only admin role user can register service into default namespace when enabled default auth plugin.
[#10406] Fix jraft install leader snapshot error after disconnection.
[#10427] Fix nacos client no response when handle server request with exception.
[#10464] Fix NPE when concurrent operations for client.
[#10470] Fix some missed i18n for console ui.
[#10509] Fix out data connection not be disconnect problem.
[#10548] Fix switch domain might not load snapshot after restart.
[#10556] Fix index loss for client and service in extreme scenarios.
[#10583] Fix some new API loss auth check.
[#10585] Fix selectInstances and selectOneHealthyInstance methods will not subscribe service problem.
[#10593] Fix invalid create `file:` dir under `nacos.home`.
[#10598] Fix nacos-client not random get server address when using address.
[#10606] Fix memory leak for nacos client when user create and shutdown client frequently.
[#10657] Fix NPE when using derby datasource for cluster mode.
[#10935] Fix startsWith judgement wrong when ignoreCase is true.
[#11056] Fix Batch register count size wrong, when batch register sereval time.
[#11059] Fix RPC_CLIENT_TLS_PROTOCOLS setting error.
[#11192] Fix batchRegisterInstance not recalculate revision prblem.
[#11197] Fix frequent do query service when hit protect empty.

## Dependency
[#7698] Remove httpasyncclient version dependency management to avoid version conflicts.
[#10416] Upgrade console yaml editor.
[#10648] Optimize Guava Dependency.
[#10893] Upgrade spring boot to 2.7.15.
[#11199] Upgrade grpc version to 1.57.2.

开源之夏OSPP 2023以及编程夏令营GLCC 2023

经过夏天如火如荼的努力,Nacos今年的开源之夏也接近尾声,各项目进展稳步推进,均取得了不小的进展。

开源之夏 OSPP 2023

Nacos在2023年度的开源之夏 中,发布了9个项目,其中6个项目成功匹配同学,并基本完成了项目课题,其中不乏大量社区期待的新增功能和优化,将在后续版本中加入。

入选项目列表

  • 客户端订阅者合并和数据选择功能
  • 为nacos-spring-boot-starter支持适配spring boot 3
  • ConfigMap到Nacos配置中心自动同步工具
  • 客户端可观测性指标建设
  • 支持Nacos注册中心的模糊订阅能力
  • 实现其他部分xDS协议

感谢导师和同学们的辛苦付出,也感谢主办方中科院软件所提供的优秀平台和活动。

Nacos 荣获编程夏令营 GLCC 2023优秀社区

Nacos在2023年度的编程夏令营 申报了一个Nacos3.0中呼声较高的一个功能作为课题 -- 支持分布式锁。 目前已在导师和同学的共同努力下,初步完成了功能,预计会在Nacos3.0的Alpha版本中在社区公布。

由于导师和同学的努力,Nacos社区荣获CCF Gitlink 颁发的开源编程夏令营的优秀社区奖,感谢主办方Gitlink为社区提供的平台和活动。

奖杯现场

展望

2.X 后续计划

从2021年3月 2.0.0正式版发布至今,2.X版本已经走了接近2年时间,如今2.3.0版本发布,完成了大部分功能的插件化提炼,在之后的2.3.X版本中,会主要对当前版本的问题进行修复,并做出小范围的功能优化。同时对于2.4.0版本,会作为一个Nacos3.0的过度版本,对大量代码进行优化重构,在提升稳定性、健壮性的同时,提升易用性和可观测性,向Nacos3.0版本平稳过度。

3.0 计划

Nacos社区同时也开启了关于Nacos3.0 的畅想和规划,Nacos将会从统一控制面、支持国产化、存储计算分离等方向进一步演进Nacos的功能和架构,欢迎社区积极参与到新版本的建设中。

image.png

image.png

About Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

最后欢迎大家扫码加入Nacos社区群

image.png

· 阅读需 8 分钟

欢迎在校同学们参与Nacos开源之夏,社区导师手把手让你的代码被社会广泛复用,来赚取最高12000奖金,可推荐入职/实习你心意公司,又拿钱又成长又有价值,你还等什么呢?报名马上截止,快来参与Nacos开源之夏。

开源之夏是什么?

开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。 活动联合国内外各大开源社区,针对重要开源软件的开发与维护提供项目任务,并面向全球高校学生开放报名。 学生可在本活动中自主选择感兴趣的项目任务进行申请,并在中选后获得该开源项目资深维护者(社区导师)亲自指导的机会,完成项目并贡献给社区后,参与学生还将获得开源之夏活动奖金结项证书

Nacos&开源之夏2023

Nacos被评为2021Github年度全国社区活跃度第六,Nacos开源产品定位是更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,用云原生方式解决分布式领域核心问题。

自2018年孵化并开源以来,共收获26.3K的star数,11.7K的Fork数,在开源中国发布的 2021 年度 OSC 中国开源项目评选中,Nacos 被评为云原生领域人气指数 Top5 的项目、InfoQ 2022年度 十大开源新锐项目、2022开源项目成熟度评估优秀贰级,发布电子书《Nacos 架构与原理》14w+阅读4w下载量,现已被大量微服务架构的软件公司选型作为其服务注册与发现中心。目前在国内服务注册中心及配置管理领域中市场占有率排名第一

此次Nacos社区开放的题目中包含了Nacos第三代架构的部分核心功能模块,将直接参与社区的核心功能,欢迎进入Nacos开源之夏参与Nacos3.0的建设,为未来五年开源微服务发展奠定基础。

参与Nacos开源之夏条件

  • 本活动面向年满 18 周岁在校学生。
  • 暑期即将毕业的学生,只要在申请时学生证处在有效期内,就可以提交申请。
  • 中国籍学生参与活动需提供身份证、学生证、教育部学籍在线验证报告(学信网)或在读证明。
  • 外籍学生参与活动需提供护照,同时提供录取通知书、学生卡、在读证明等文件用于证明学生身份。

参与Nacos开源之夏,你能获得什么?

  1. 【你的代码被社会广泛复用】 你的代码可能会运行在上万家企业核心业务逻辑中,帮助企业解决问题。
  2. 【赢得最高12000奖金】 奖金总额根据项目难度分为进阶 12000 元、基础 8000 元(注:奖金数额为税前人民币金额)
  3. 【社区核心人员辅导快速成长】 只要你报名被选中,每个题目的导师会精心手把手教你融入社区,帮助你完成题目的设计以及最终的落地。
  4. 【推荐入职/实习】 在本次编程之夏项目中表现优秀同学,可推荐入职/实习 你心意的公司工作。
  5. 【额外获得社区礼包】 所有参与本次编程之夏项目的同学,均可获得Nacos社区大礼包。

百分百有奖品拿哦,现在唯一的问题是时间不多了,赶紧上车报名,截止报名时间是6月4日,6个核心题目,快点来报名参与Nacos编程之夏吧。

课题&报名方式

点开Nacos开源之夏的链接 选择你喜欢的题目,Nacos社区围绕Nacos第三代架构以及第二代架构中插件增强部分的题目,具体如下:

  • 新增达梦数据库插件实现
  • 客户端订阅者合并和数据选择功能
  • 为nacos-spring-boot-starter支持适配spring boot 3
  • ConfigMap到Nacos配置中心自动同步工具
  • 客户端可观测性指标建设
  • 支持Nacos注册中心的模糊订阅能力
  • 提供分布式锁的能力
  • 新增Nacos数据推送的反压机制
  • 实现其他部分xDS协议

具体流程请参考学生指南。 请注意找导师沟通截止流程时间,优先更导师沟通,能帮助你更好的了解题目。 想要报名的同学,请用钉钉扫码加入Nacos开源之夏2023钉钉群,方便大家交流题目内容。 image.png

参考资料

Nacos Github:https://github.com/alibaba/nacos

Nacos 官网:http://nacos.io

开源之夏官网:https://summer-ospp.ac.cn/org/orgdetail/ab188e59-fab8-468f-bc89-bdc2bd8b5e64?lang=zh

为了让同学们更好地了解Nacos,我们提供了电子书 供大家阅读学习。 同时如果同学们对其他领域项目感兴趣,也可以尝试申请,例如:

  • 对于微服务分布式事务有兴趣的同学,可以尝试填报Seata 开源之夏;
  • 对于微服务框架和RPC框架有兴趣的同学,可以尝试填报Spring Cloud AlibabaDubbo 开源之夏;
  • 对于云原生网关有兴趣的同学,可以尝试填报Higress 开源之夏;
  • 对于分布式高可用防护有兴趣的同学,可以尝试填报Sentinel 开源之夏;
  • 对于微服务治理有兴趣的同学,可以尝试填报OpenSergo 开源之夏。

· 阅读需 9 分钟

Nacos社区近期发布了2.2.0.1和2.2.1版本,对默认鉴权插件做出了较大的改动,详情查看风险说明2.2.1发布。 由于Nacos默认控制台ui中默认依赖了token.secret.key,所以在移除了token.secret.key的默认值后,许多新部署或默认使用latest版本镜像的用户出现大量启动失败的情况,对用户的易用性造成了较大影响。 因此2.2.2版本主要针对该问题进行了优化。

新版本发布

Nacos 2.2.2

Nacos于2.2.0.1和2.2.1版本时移除了3个和鉴权有关的默认值,以避免用户部署时因各种原因未修改而引入的撞库风险。但其中token.secret.key在Nacos默认控制台ui的登陆页中被强制依赖,因此使得很多使用默认配置或对安全性要求不那么高的环境无法直接启动运行,给大量用户造成了使用困扰。

所以2.2.2版本的主要改动就是在未开启鉴权的情况下,通过取消默认控制台ui中的登录要求,从而移除对token.secret.key的强制依赖;在开启鉴权的情况下,用户仍然需要设置自定义的token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.value。 否则将导致节点无法启动、登录失败、鉴权无法通过。

2.2.2 版本更多具体变更内容可参考变更日志:

## Enhancement&Refactor
[#10153] Close console login page when auth.enabled is false.
[#10276] Default close openssl for client.

## BugFix
[#10208] Remove DefaultSettingPropertySource.java.

Nacos-Go-SDK 2.2.1

Nacos-Go-SDK 2.2.1 主要修复了2.2.0中一个错误的内存使用问题,同时也修复了其他的一些使用问题,更加稳定,欢迎使用。

* update get cache config log print by @binbin0325 in #594
* fixed memory usage problem caused by maxInt chan by @binbin0325 in #596
* 调整 [INFO] logDir cacheDir 日志输出 by @Cotch22 in #590
* 修复初始化并发读写的情况 by @tonglin96 in #591
* grpc default port init by @binbin0325 in #598

社区

2022年度优秀贡献者

Nacos社区在2022年获得诸多成就,离不开社区同学的积极参与和贡献。为了感谢2022年度积极参与Nacos社区和贡献代码的同学,Nacos社区在按照github仓库贡献统计阿里巴巴开源贡献榜,设置多个奖项,并附赠奖杯和礼品。

说明:以上排名不分先后。

IMG_3466.HEIC.JPGIMG_1181.HEIC.JPGmmexport1680323559666.jpg1426060892935891238.jpg
-785282054-1335766433.jpegmmexport1680336390244.jpgmmexport1680339291530.jpg

阿里巴巴开源开发者回馈计划

阿里巴巴开源发起了开源开发者回馈计划,希望在合理量化开发者们的贡献的基础上,进一步给到实质性的回馈。该计划使用了 X-lab 开放实验室提出的 OpenRank 算法,即一种基于全域协作网络的算法去度量每位开发者的贡献。该算法从 2023 年 1 月起在阿里巴巴的 20 个重点项目上开始试运行。

此次,阿里巴巴开源统计了这 20 个项目中从 2023 年第一季度 OpenRank 排名最高的 30 位社区外部贡献者,并寄出第一波礼品。

其中Nacos项目在2023 年第一季度的OpenRank中,有11位同学荣获第一波礼品,本次回馈计划的礼品非常豪华,是一把人体工学椅。其他参与社区贡献的同学也不要灰心,只要继续保持社区参与和贡献,依旧能得到下一次的大礼。

阿里巴巴开源将持续统计社区贡献者们在每个月上的 OpenRank 值,并作为积分不断累积,在未来,社区贡献者们可以通过积分兑换的形式获得更多礼品。我们相信,开源世界中的每一份贡献都值得回报!

开源之夏2023

一年一度的开源之夏如期而至,Nacos社区今年也积极参与,目前暂定的课题有:

  • 为Nacos适配Oracle数据库插件

  • 为Nacos适配达梦数据库插件

欢迎社区同学积极提供课题,尝试成为导师,想要提交新课题的同学请在Github中以issue的形式提交,格式为[Proposal][Summer 2023]+课题名,导师申请请在对应课题下回复评论并留下联系方式。

  • 提案新课题尽量以新增独立功能或模块为主,需要参与同学进行一定的设计和一定实现的代码量。

  • 导师要求对课题相关Nacos源代码有一定的了解,并对课题的设计和实现方向有清晰的认知和把控。

展望

2.X 后续计划

从2021年3月 2.0.0正式版发布至今,2.X版本已经走了接近2年时间,如今2.2.1版本发布,说明2.X版本已经逐渐成熟稳定,在2.X的后续计划中,除了鼓励社区中提供和完善已有的插件多种实现以外,依旧会为其易用性和扩展性进一步增强,添加更多的插件功能:

  • 寻址插件
  • 配置变更钩子插件

3.0 计划

Nacos社区同时也开启了关于Nacos3.0的畅想和规划,Nacos将会从统一控制面、支持国产化、存储计算分离等方向进一步演进Nacos的功能和架构,欢迎社区积极参与到新版本的建设中。

image.png image.png

About Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

最后欢迎大家扫码加入Nacos社区群

image.png

· 阅读需 9 分钟

Nacos社区新年后好事不断,先是年初在电子标准院2022年度开源成熟度评估中被评为优秀贰级,同时获得了CSDN年度开发者影响力项目InfoQ 十大开源新锐项目;随后又发布了许多新版本,其中包括Nacos 2.2.1、 1.4.5、rust-sdk 0.2.3 以及 go-sdk 2.2.0版本;在同学们的积极参与下,社区也是又增加了3位新的Committer。

新版本发布

Nacos 2.2.1

Nacos 2.2.1版本主要针对Nacos社区于12月发布的2.2.0版本进行了一系列的升级以及修复,例如通过logback-adapter适配了新版本的logback、升级了grpc、jraft等依赖,从而升级了对应的netty和rocksdb版本,解决旧版本netty的安全漏洞和rocksdb对于ARM64、M1芯片架构的直接支持。 功能方面,新增一个Beta功能,支持Grpc的TLS功能,用户可在服务端和客户端分别加载CA文件,保证传输过程中的数据进行加密。

在客户端层面,新增了服务发现模块对Aliyun STS鉴权模式的支持,以及对GraalVM的支持。

插件方面,为多数据源插件添加了打印SQL的功能,方面插件开发者或使用者获得插件所生成的SQL,减少排查问题的时间; 同时对默认鉴权插件进行了一定重构,移除了对jjwt的依赖同时提升性能、移除token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.value的默认值并提醒用户配置自定义的token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.value以提高安全性,具体情况请查看风险公告

易用性方面,新增通过配置内容检索配置的功能,但该功能会损耗大量性能,因此从内部进行了限流,也请用户尽量避免使用。

2.2.1 版本更多具体变更内容可参考变更日志:

## feature
[#9276] Add search config by content.
[#9703] add catalog v2 API to support list instances which is un-enabled.
[#9710] Support prometheus-sd basic auth.
[#9888] Beta support Grpc TLS feature.
[#10062] Naming support aliyun STS auth.

## Enhancement&Refactor
[#9510] Add sql log print function.
[#9646] Replace concatenated strings with placeholders.
[#9708] Clean expired and invalid connections for HTTP client.
[#9783] Handle public namespaceId as default namespaceId for publish and query config for V2 http api.
[#9837] Enhance Grpc connected time when cluster started to load snapshot quickly.
[#9859] Refactor default auth plugin, use custom JWT instead of jjwt.
[#9860] Adapt logback 1.4.5 by SPI.
[#9885] Add prometheus api exception handling.
[#9949] Use Grpc replace all Http request between servers.
[#9951] Judge the message whether `null` for metadata processor.
[#10084] Client use Async appender to print log.

## BugFix
[#9621] Fix Config Client server check always up problem.
[#9728] Fix prometheus http sd only return public namespace problem.
[#9732] Fix namespace v2 api auth not work problem.
[#9734] Fix http login url without default port problem.
[#9795] Fix export config failure problem for non admin user after opening auth.
[#9816] Fix redo data is different from server when register and unregister service with concurrency.
[#9819] Fix update password failure problem after use nginx.
[#9825] Fix config histroy page paged problem.
[#9861] Fix auth check before distro filter.
[#9862] Fix LDAP login failed.
[#9943] Fix Config cas update can't work when using derby database.
[#10014] Clear confused logic about namespace properties.
[#10038] Fix load failover file failure.

## Dependency
[#9504][#9767] Upgeade-spring-boot version to 2.6.14.
[#9789] Upgrade jraft version to 1.3.12.
[#9772] Upgrade Grpc version to 1.50.2.
[#9985] Replace flatten-maven-plugin with easyj-maven-plugin.
[#10091] Upgrade snakeYaml to 2.0.

Nacos 1.4.5

Nacos 1.4.5版本基于1.4.4版本,将部分合并在2.X的问题和优化,同步到最新的1.X版本中,具体内容可查看变更日志:

# Enhancement
[#9064] Enhance error message and error code by merging #9045 and #8881 into v1.x.
[#10089] Enhance STS auth for naming and async client log into v1.x.

# BugFix
[#3720] Fix not admin user can change others password by api.
[#8979] Fix some ui problem by merging #8787、#8156 and #7364 into the v1.
[#9020] Fix startup failed without prefix CUSTOM_SEARCH_LOCATIONS.

# Dependency
[#8541] Upgrade spring-boot version to 2.6.8.

Nacos-Rust-SDK 0.2.3

Nacos-Rust-SDK 在年前已经完成了对配置中心的功能适配, 经过社区同学的积极贡献,Nacos-Rust-SDK 0.2.3版本终于完成了所有功能的适配,同时还能够绑定到nodejs中使用。欢迎正在使用rust的同学使用,并反馈意见。

* enhance: add some debug log by @onewe
* chore: some logic optimization. by @CherishCai
* add some unit tests by @onewe
* chore: Optimize and Unified code.
* ci: fix codecov tarpaulin with 0.22.0
* chore: try exclude tls openssl by @CherishCai
* [ISSUES #100] Change: naming api register_instance/select_instances by @onewe
* doc: link to nacos-sdk-rust-binding-node by @CherishCai
* [ISSUES #102] fix naming changed service log by @onewe
* [ISSUES #101] env cq count decrease to 1 by @onewe
* [ISSUES #107] Add asynchronous api by @onewe
* chore: upgrade version to 0.2.3 by @CherishCai

Nacos-Go-SDK 2.2.0

Nacos-Go-SDK 2.2.0 支持了批量注册服务的batchRegister接口,同时修复了一些旧版本bug,具体内容可查看变更日志:

* config center support for disable local cache by @wangdongyun in #565
* support batch register by @binbin0325 in #573
* refine grpc_client by @binbin0325 in #574
* fix MaxInt64 overflows on ARM 32-bits by @bavelee in #575
* fix panic for rpc errorResponse by @binbin0325 in #577
* fix QueryInstancesOfService clusters by @binbin0325 in #578

社区

感谢社区小伙伴的积极参与和厚爱,Nacos社区在2022年收获了电子标准院2022年度开源成熟度评估优秀贰级CSDN年度开发者影响力项目InfoQ 十大开源新锐项目等殊荣,在2023年也希望有更多的小伙伴参与到Nacos社区中,让Nacos越变越好

image.pngimage.pngimage.png

新Committer

社区中新增了3位Committer,他们分别为Nacos-K8s、Nacos-Rust-SDK、以及多数据源插件作出了巨大贡献。同时,Nacos社区也迎来了第一位来自开源之夏的Committer同学。

image.png蔡鸿文- 人物海报.jpg黄乙轩-人物海报.jpg

展望

2.X 后续计划

从2021年3月 2.0.0正式版发布至今,2.X版本已经走了接近2年时间,如今2.2.1版本发布,说明2.X版本已经逐渐成熟稳定,在2.X的后续计划中,除了鼓励社区中提供和完善已有的插件多种实现以外,依旧会为其易用性和扩展性进一步增强,添加更多的插件功能:

  • 寻址插件
  • 配置变更钩子插件

3.0 计划

Nacos社区同时也开启了关于Nacos3.0的畅想和规划,Nacos将会从统一控制面、支持国产化、存储计算分离等方向进一步演进Nacos的功能和架构,欢迎社区积极参与到新版本的建设中。

image.png image.png

About Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

最后欢迎大家扫码加入Nacos社区群

image.png

· 阅读需 5 分钟

近期Nacos社区收到关于Nacos鉴权功能通过token.secret.key默认值进行撞击,绕过身份验证安全漏洞的问题。社区在2.2.0.1和1.4.5版本已移除了自带的默认值,并在token.secret.key未传入或非法时阻止Nacos节点启动来提醒用户设置自定义token.secret.key。考虑到现在的控制台登陆页面并没有进行模块化,无法和是否开启鉴权功能关联,因此暂时需要强制设置token.secret.key,社区正在进行控制台登陆页面和鉴权功能的关联,待完成后,未开启鉴权的集群将不再强制需要token.secret.key开启后仍然强制需要。

同时Nacos社区还收到关于通过nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value默认值进行撞击,绕过身份验证安全漏洞的问题。社区在2.2.1和1.4.5版本已移除了自带的默认值,并在开启鉴权后,未填写这两个参数时阻止Nacos节点启动来提醒用户设置自定义的nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value

说明:这两个默认值原意是为了方便新用户在快速搭建新集群进行使用时可以减少一些繁琐步骤,更简单的使用nacos,在实际部署时提供机制修改配置来提高安全性;随着社区用户对安全性要求提升,默认值可能会导致部分用户未修改直接使用时出现安全风险,因此Nacos社区去除了默认值,并在启动时进行校验,阻止启动提示用户配置。

使用旧版本的用户请根据文档进行环境检查,查看是否使用了默认的token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.value,如仍然使用默认值,请参考文档内容尽快进行修改。

新部署环境请使用最新2.2.1版本部署,并根据文档设置token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.value,并尽快修改默认密码。

Download page.

关于Nacos的部署建议

Nacos 定义为一个应用服务发现和配置管理中间件服务,这类应用一般应该部署于内部网络环境,因此不建议用户将Nacos暴露在公网环境

同时应开启鉴权,设置自定义token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.value,并修改nacos用户的密码,提高安全性。

另外,即使升级到最新版本,开启鉴权并修改了token.secret.keynacos.core.auth.server.identity.keynacos.core.auth.server.identity.valuenacos用户的密码,也请不要暴露在公网环境使用。

关于变更token.secret.key对正在运行程序的影响及初步解决方式

修改token.secret.key并重启Nacos Server端后,来自Nacos Client的请求将会因无效token被拒绝。直到客户端到达旧token的TTL时间后,才会重新去获取新token。

解决方式

目前该问题的解决有一个关联ISSUE,欢迎大家进入讨论。

在修改token.secret.key前,先修改token.expire.seconds为5,客户端默认每5s检查一次token是否过期,需要让客户端尽快过期掉旧token。

# 2.1.0版本前
nacos.core.auth.default.token.expire.seconds=5

# 2.1.0版本及更高版本
nacos.core.auth.plugin.nacos.token.expire.seconds=5

修改token.expire.seconds后重启集群,运行一段时间(超过原token.expire.seconds值,以保证所有客户端已经获取到新TTL)

注意:修改后会导致客户端较为频繁地调用login接口,修改前请确保Nacos Server集群的资源足够。

最后将token.secret.key修改为新值,并重启集群,token.expire.seconds值请酌情修改。

关于变更nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value对正在运行程序的影响

修改nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value不会对当前正在运行造成影响,但可能会导致变更同步失败或自动摘除实例失败。

解决方式

按照文档提示,先开启userAgent白名单,在变更新server.identity后,立刻关闭userAgent白名单。

或保证变更server.identity期间,不进行业务应用的变更。

· 阅读需 14 分钟

在去年11月的云栖大会上,我们开源了云原生网关 Higress,时隔 2 月,Higress 的 Github 项目(https://github.com/alibaba/higress)已经收获了 700+ star,以及大量社区小伙伴的关注。在社区的交流中我们发现有不少微服务开发者在使用如 Spring Cloud Gateway/Zuul 等微服务网关对接 Nacos 注册中心实现微服务的路由,并且希望了解迁移到 Higress 网关能带来哪些好处。 本文将介绍 Higress 组合 Nacos 作为微服务网关能力,并介绍微服务网关发展的两个趋势,为网关的选型指明道路:

  • 趋势一:统一 API 标准,向云原生微服务架构演进
  • 趋势二:合并安全&流量网关,向 DevSecOps 演进

Higress:Nacos的最佳拍档

image.png Higress 和 Nacos 其实是师出同门——阿里中间件团队。在 Higress 支撑阿里内部业务的阶段,Higress 就已经搭配 Nacos 作为微服务网关使用,凭借高性能支撑了双十一的洪峰流量;到了云产品商业化阶段,Higress 和 Nacos 继续基于阿里云 MSE(Microservices Engine)产品,紧密协作演进产品功能;Higress 开源之后,如果想要自建微服务网关,选择 Higress 配合 Nacos 使用,具备以下优势:

  1. 对比 Spring Cloud Gateway/Zuul 等传统 Java 微服务网关性能高出 2-4 倍,可以显著降低资源成本
  2. 作为云原生网关,实现了 Ingress/Gateway API 标准,兼容 Nginx Ingress 大部分注解,支持业务渐进式向基于 K8s 的微服务架构演进
  3. 与 Dubbo/OpenSergo/Sentinel 等开源微服务生态深度整合,提供最佳实践

这里默认已经安装好 Higress,搭配 Nacos 使用的具体方式如下:

配置服务来源

apiVersion: networking.higress.io/v1
kind: McpBridge
metadata:
name: default
namespace: higress-system
spec:
registries:
# 定义一个名为 “production” 的服务来源
- name: production
# 注册中心类型是 Nacos 2.x,支持 gRPC 协议
type: nacos2
# 注册中心的访问地址,可以是域名或者IP
domain: 192.xxx.xx.32
# 注册中心的访问端口,Nacos 默认都是 8848
port: 8848
# Nacos 命名空间 ID
nacosNamespaceId: d8ac64f3-xxxx-xxxx-xxxx-47a814ecf358
# Nacos 服务分组
nacosGroups:
- DEFAULT_GROUP
# 定义一个名为 “uat” 的服务来源
- name: uat
# 注册中心类型是 Nacos 1.x,只支持 HTTP 协议
type: nacos
# 注册中心的访问地址,可以是域名或者IP
domain: 192.xxx.xx.31
# 注册中心的访问端口,Nacos 默认都是 8848
port: 8848
# Nacos 命名空间 ID
nacosNamespaceId: 98ac6df3-xxxx-xxxx-xxxx-ab98115dfde4
# Nacos 服务分组
nacosGroups:
- DEFAULT_GROUP

我们通过 McpBridge 资源配置了两个服务来源,分别取名 “production”和“uat”,需要注意的是 Higress 对接 Nacos 同时支持 HTTP 和 gRPC 两种协议,建议将 Nacos 升级到 2.x 版本,这样可以在上述配置的 type 中指定 “nacos2” 使用 gRPC 协议,从而更快速地感知到服务变化,并消耗更少的 Nacos 服务端资源。 基于 McpBridge 中的 registries 数组配置,Higress 可以轻松对接多个且不同类型的服务来源(Nacos/Zookeeper/Eureka/Consul/...),这里对于 Nacos 类型的服务来源,支持配置多个不同命名空间,从而实现不同命名空间的微服务可以共用一个网关,降低自建微服务网关的资源成本开销。

配置 Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.io/destination: service-provider.DEFAULT-GROUP.d8ac64f3-xxxx-xxxx-xxxx-47a814ecf358.nacos
name: demo
namespace: default
spec:
rules:
- http:
paths:
- backend:
resource:
apiGroup: networking.higress.io
kind: McpBridge
name: default
path: /
pathType: Prefix

和常见的 Ingress 在 backend 中定义 service 不同,这里基于 Ingress 的 resource backend 将上面定义服务来源的 McpBridge 进行关联。并通过注解higress.io/destination指定路由最终要转发到的目标服务。对于 Nacos 来源的服务,这里的目标服务格式为:“服务名称.服务分组.命名空间ID.nacos”,注意这里需要遵循 DNS 域名格式,因此服务分组中的下划线'_'被转换成了横杠'-'。

丰富的微服务网关能力

Higress 在微服务发现的基础上,提供了多种实用的微服务网关能力,这里以“灰度发布”和“自定义扩展”进行举例,更多能力可以点击原文参考 Higress 官网文档进行了解。

灰度发布

Higress 完全兼容了 Nginx Ingress 的金丝雀(Canary)相关注解,如下所示,可以将带有HTTP Header为x-user-id: 100的请求流量路由到灰度服务中。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.io/destination: service-provider.DEFAULT-GROUP.98ac6df3-xxxx-xxxx-xxxx-ab98115dfde4.nacos
nginx.ingress.kubernetes.io/canary: 'true'
nginx.ingress.kubernetes.io/canary-by-header: x-user-id
nginx.ingress.kubernetes.io/canary-by-header-value: '100'
name: demo-uat
namespace: default
spec:
rules:
- http:
paths:
- backend:
resource:
apiGroup: networking.higress.io
kind: McpBridge
name: default
path: /
pathType: Prefix

您还可以基于 OpenKruise Rollout 让灰度发布和服务部署过程联动,从而实现渐进式交付,具体可以参考这篇文章《Higress & Kruise Rollout: 渐进式交付为应用发布保驾护航》

自定义扩展

作为微服务网关,需要在微服务架构中承担部分通用逻辑的处理,例如认证鉴权,安全防护等。通用的逻辑无法满足多样性的业务场景,Higress 可以支持开发者添加自定义处理逻辑。与 Spring Cloud Gateway 等传统微服务网关需要开发者自己在 Gateway 代码中加 Filter 不同,Higress 支持开发者使用多种语言编写 Wasm 插件,并动态加载生效,插件生效过程无需重启网关,变更插件逻辑对流量完全无损。 下例是一个屏蔽特定请求的 Wasm 插件,当请求 url 中出现 “swagger.html” 时将被直接拒绝访问,插件实现代码参考:https://github.com/alibaba/higress/tree/main/plugins/wasm-go/extensions/request-block

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: request-block
namespace: higress-system
spec:
selector:
matchLabels:
higress: higress-system-higress-gateway
pluginConfig:
block_urls:
- "swagger.html"
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/request-block:1.0.0

Wasm 插件的开发&编译&镜像推送方式可以参考这篇文章《Higress 实战:30 行代码写一个 Wasm Go插件》

微服务网关发展趋势

趋势一:统一 API 标准,向云原生微服务架构演进

基于一套 API 可以有不同的实现,既让用户不被具体实现锁定,又桥接了技术演进的鸿沟。API 可以说是整个云原生架构的基石,或许有一天 K8s 会消失,但是面向抽象的 API 标准定会长存。在流量网关领域,Ingress API 已经成为标准。而对于微服务网关等更复杂的使用场景,Ingress 受限于其简单的协议字段,需要通过 Ingress 注解等方式进行能力扩展,难以被标准化。因此诸如 Contour、Emissary、Kong、APISIX 等都定义了自己的 HTTP 路由等 CRD,网关的 API 定义开始呈现碎片化。 这一背景之下,Gateway API 应运而生,并且在过去的一年里从 alpha 演进到了 beta 阶段。虽然目前 Gateway API 还未定稿,协议仍会发生变动,不建议用于生产,但 API 统一趋势已经不可阻挡,只是时间的问题。下图是 Gateway API 的一个用例场景,不同于 Ingress API,将集群运维和业务运维的职责进行了划分,这样业务开发人员不再需要关心网站证书等集群级的细节,只专注于业务本身的 DevOps,集群运维任务可以交给 SRE 人员进行统一处理。 image.png Higress 目前采用 Ingress 注解的能力来实现能力扩展,并兼容了 Nginx Ingress 大部分常用注解,且具备平滑迁移到 Gateway API 的能力。 Higress 为传统微服务架构,提供了渐进式的方式,向基于 K8s 的云原生微服务架构演进:可以通过 Nacos 发现部署在 K8s 之外的服务,从而实现了网关后端微服务可以和 K8s 解耦,业务团队可以将微服务逐个迁移至 K8s,而不用担心网关层的流量影响。 从传统微服务网关迁移到 Higress,再渐进式完成整个微服务架构的云原生化,是一个明智的选择。

趋势二:合并安全&流量网关,向 DevSecOps 演进

Higress 提出了将安全、流量、微服务网关三合一的概念,首先来看一个典型的多层网关架构: 在这个架构中,用 WAF 网关实现安全能力,Ingress 网关实现集群入口网关能力(非 K8s 场景或会部署一层 Nginx),SCG(Spring Cloud Gateway) 实现微服务网关能力。这样的架构下,需要对每一层网关都进行容量评估,每一层网关都是潜在的瓶颈点,都可能需要进行扩容。这样造成的资源成本和运维人力成本都是巨大的。并且每多一层网关,就多一层可用性风险。一旦出现可用性问题,多层网关会导致问题定位复杂度显著上升,对应的平均故障恢复时间(MTTR)将大幅增加。 采用三合一的架构中,可以显著降低成本,并提高系统整体可用性。同时这也符合 DevSecOps 的微服务演进趋势,微服务开发者可以更多地从业务接口视角关注安全性,而不是采用所有路由一刀切的 WAF 防护模式。 技术架构演进的背后是组织架构演进,这也是微服务 DevOps 一直在强调的,要围绕开发者为核心,从而提升微服务开发效率。向 DevSecOps 演进并没有捷径,依然需要开发角色和运维角色之间的双向奔赴,打破传统开发与运维之间的壁垒,形成从开发、部署、安全运营这样一个全功能化的敏捷团队。 通过 Higress 将网关合并作为向 DevSecOps 演进的抓手,是一个明智的选择。

参与 Higress 社区

Higress 开源贡献小组正在火热招募贡献者。如果您有时间,有热情,有意愿,欢迎联系社区加入开源贡献小组,一起共同完善 Higress,一起主导下一代云原生网关的设计和实现。 社区官网(点击“阅读原文”跳转): https://higress.io 社区开发者群: image.png 社区交流群: higress-comm.png

实战演示直播

1月12号(本周四)将在线直播 Higress 通过 Nacos 实现微服务网关能力的实战演示,可以扫描图中二维码,预约观看,将在直播开始前收到短信通知。 image.png

· 阅读需 15 分钟

转载且编辑自Nacos 的一条注册请求会经历什么?

Nacos 的一条注册请求会经历什么?

前言

Nacos 作为注册中心,用来接收客户端(服务实例)发起的注册请求,并将注册信息存放到注册中心进行管理。

那么一条注册请求到底会经历哪些步骤呢?

知识点预告

先上一张整体的流程图:

  • 集群环境:如果是 Nacos 集群环境,那么拓扑结构是什么样的。
  • 组装请求:客户端组装注册请求,下一步对 Nacos 服务发起远程调用。
  • 随机节点:客户端随机选择集群中的一个 Nacos 节点发起注册,实现负载均衡。
  • 路由转发:Nacos 节点收到注册请求后,看下是不是属于自己的,不是的话,就进行路由转发。
  • 处理请求:转发给指定的节点后,该节点就会将注册请求中的实例信息解析出来,存到自定义的内存结构中。
  • 最终一致性:通过 Nacos 自研的 Distro 协议执行延迟异步任务,将注册信息同步给集群中的其他节点,保证了数据的最终一致性。
  • 异步重试:如果注册失败,客户端将会切换 Nacos 节点,再次发起注册请求,保证高可用性。

这些知识点里面还有很多细节,我会通过画图 + 源码剖析的方式给大家解答。如果遇到源码看不太懂的地方,可以多看下我画的图,然后翻下源码,对照着一起看。

小 Tip:本文使用的 Nacos 版本: 2.0.4。

一、源头:发起注册

1.1 阅读源码的小技巧

在使用 Nacos 组件的的时候,我们加上一个注解 @EnableDiscoveryClient 就可以使服务自动注册到 Nacos。

那么这个发起注册的地方到底在哪呢?注册信息又是长什么样的呢?

告诉大家一个看源码的小技巧,拿到源码后,不是直接各个文件都看一篇,而是先看源码中带的 example 文件夹。如下图所示,找到 example 的 App 类,里面就有发起注册的实例代码。如下图所示:

当然,我们也可以通过官网给的 curl 命令发起 HTTP 请求:

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'

留个问题:我们都是加一个 Nacos 注解 @EnableDiscoveryClient,就会自动把服务实例注册到 Nacos,这个是怎么做到的?

1.2 发起注册的流程图

先来看一下代码的流程图:

跟着这个流程图,我们 debug 来看下。

1.3 组装注册的实例信息

入口的核心代码如下图所示,它会组装注册的实例信息,放到一个 instance 变量里面:

通过代码调试,我们可以看到里面的实例信息长这样:

1.4 组装注册请求 request

发起注册的核心方法是 doRegisterService(),组装的 request 如下图所示,里面有之前组装的实例信息 instance,还有指定的 namespace(Nacos 的命名空间)、serviceName(服务名),groupName(Nacos 的分组)。

image-20220411162322668

1.5 发起远程调用

requestToServer() 方法里面会调用 RpcClient 的 request() 方法:

response = this.currentConnection.request(request, timeoutMills);

就是向 Nacos 发起远程调用,如果是 Nacos 集群,则是向集群中的某个 Nacos 节点发起远程调用。

接下来我们看下客户端是如何选择一个 Nacos 节点进行注册的。

二、集群环境:分布式的前提

如果是 Nacos 集群环境,客户端会随机选择一个 Nacos 节点发起注册。

2.1 搭建好一套Nacos 集群环境

为了讲解客户端是如何注册到 Nacos 集群环境的底层原理,我在本地搭建了一个 Nacos 集群环境,有 3 个 Nacos 服务,它们的 IP 相同,端口号不同。

192.168.10.197:8848
192.168.10.197:8858
192.168.10.197:8868

然后服务 A 和服务 B 都是配置了 Nacos 集群的 IP 和 端口号的,配置如下所示

spring.cloud.nacos.discovery.server-addr
=192.168.10.197:8848,192.168.10.197:8858,192.168.10.197:8868

整体的结构如下图所示,服务 A 和 服务 B 都往 Nacos 集群进行注册。

但是里面有一个问题:服务 A 注册时,是向所有 Nacos 节点发起注册呢?还是只向其中一个节点发起注册?如果只向一个节点注册,要向哪个节点注册呢?

答案:在 Client 发起注册之前,会有一个后台线程随机拿到 Nacos 集群服务列表中的一个地址。

Nacos 为什么会这样设计?

  • 这其实就是一个负载均衡的思想在里面,每个节点都均匀的分摊请求。
  • 保证高可用,当某个节点宕机后,重新拿到其他的 Nacos 节点来建立连接。

接下来我们看下服务 A 是怎么随机拿到一个 Nacos 节点的。

三、随机节点:平等的世界

我们来看下客户端是如何随机选择一个节点的,流程图如下:

那么如何找到这些代码逻辑呢?思路是怎么样的?

我们之前讲过,RpcClient 会发起 request 请求,用的是和 Nacos 建立 currentConnection 连接来发起调用,代码如下:

// 发起调用
response = this.currentConnection.request(request, timeoutMills);

这个 currentConnection 是客户端和 Nacos 集群中的某个节点建立的连接,我们找下它在哪里赋值的。代码如下:

// 拿到 Nacos 节点信息
serverInfo = recommendServer.get() == null ? nextRpcServer() : recommendServer.get();
// 连接 Nacos 节点
connectToServer = connectToServer(serverInfo);
// 赋值 currentConnection
this.currentConnection = connectToServer;

而连接的信息是通过参数 serverInfo 传进去的,所以我们再看下 serverInfo 在哪里赋值的。

这个 nextRpcServer() 方法里面会拿到一个随机的 Nacos 地址

// 一个 int 随机数,范围 [0 ~ Nacos 个数)
currentIndex.set(new Random().nextInt(serverList.size()));
// index 自增 1
int index = currentIndex.incrementAndGet() % getServerList().size();
// 返回 Nacos 地址
return getServerList().get(index);

小结:客户端生成一个随机数,然后通过这个随机数从 Nacos 服务列表中拿到一个 Nacos 服务地址返回给客户端,然后客户端通过这个地址和 Nacos 服务建立连接。Nacos 服务列表中的节点都是平等的,随机拿到的任何一个节点都是可以用来发起调用的。

四、路由转发:不是我的菜

4.1 发起和转发请求的流程

为了演示发起注册的流程,我在这里模拟了一个注册请求。

用的是 curl 命令,对 Nacos 节点(127.0.0.1:8848)发起注册请求:

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'

请求 URL:/nacos/v1/ns/instance

请求参数

  • serviceName=nacos.naming.serviceName
  • ip=20.18.7.11
  • port=8080'

之前我们讲到,Nacos 的有多个节点可以分别处理请求,当节点发现这个请求不是属于自己的,就会进行转发。

如下图所示:

服务 A 随机选择一个 Nacos 节点(图中为 Nacos1)发起注册请求,请求参数中包含了实例信息,Nacos 1 根据实例信息 hash + 取模拿到正确的节点,如果不属于自己,则将请求转发给其他节点(图中为 Nacos2)

那么路由转发的细节是怎么样的?这个就涉及到 Distro 协议了,我们接着往下看。

4.1 路由转发的逻辑

其实 Nacos 节点的路由转发逻辑比较简单,先来看下流程图:

步骤如下:

  • ① Nacos 节点从客户端发起的 request 中拿到客户端的实例信息生成 distroTag,如 IP + port 或 service name。
  • ② Nacos 根据 distroTag 生成 hash 值。
  • ③ 用 hash 值对 Nacos 节点数进行取余,拿到余数,比如 0、1、2、3。
  • ④ 根据余数从 Nacos 节点列表中拿到指定的节点地址。

我没看懂的点:我这里启动了三个 Nacos 节点,如下图所示的 三个 Running 节点。但是为什么 Nacos 的 ServersList 会多了一个 192.168.10.197:8848的节点?

开发者回答: nacos-server存在一个机制,在启动的时候会检查cluster.conf中配置的member内容,如果发现自身不在member列表中,就会将自身地址加入到member列表中。 图中member显示有127.0.0.1的3个节点和一个192.168.10.197节点,说明nacos-server获取到的ip是192.168.10.197,但是cluster.conf中配置的ip是127.0.0.1。 需要解决的话有两种方法,一种是严格按照上文中的配置,配置ip为192.168.10.197,另一种方式是在启动服务是设置JVM参数-Dnacos.server.ip=127.0.0.1 这个配置错误同样常见于使用K8S搭建Nacos集群,域名和hostname互相混用时出现。

IDEA 启动了三个 nacos 节点

nacos 控制台有四个节点

4.2 路由转发源码分析

入口文件是 DistroFilter.java:

naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java

请求会先到 DistroFilter 类的 doFilter() 方法,拿到正确的节点地址后,将请求转发出去。

获取需要转发节点地址的代码如下:

// 找到 Nacos 集群中的目标节点
final String targetServer = distroMapper.mapSrv(distroTag);

// mapSrv 方法会先 hash,然后再取模,responsibleTag的值类似这样:"20.18.7.11:8080"
int index = distroHash(responsibleTag) % servers.size();

// distroHash 方法里面会对 客户端的 ip+port 字符串或者服务名字符串 进行 hash
Math.abs(responsibleTag.hashCode() % Integer.MAX_VALUE);

不论是自己处理注册请求还是转发给其他节点来处理,都会把实例信息存储起来,那么是如何进行存储的?

五、处理请求:快到碗里来

Nacos 目前有两个版本,v1 和 v2,如果是 v1,则是 instanceController 来处理注册请求,否则用 instanceControllerV2。本篇我们只讲解 v1 版本是怎么处理请求的。

先上流程图:

添加实例信息的流程

测试用的发起注册的命令:

curl -X POST 'http://127.0.0.1:8858/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'

核心代码就是这个:

服务端注册实例的方法

有一个 synchronized 锁,将临时的实例信息存放起来,所以重点看下 这个 consistencyService.put() 方法做了什么事情。

先看下源码:

onPut(key, value);
// 开启 1s 的延迟任务,将数据同步给其他 Nacos 节点
distroProtocol.sync(new DistroKey(key,KeyBuilder.INSTANCE_LIST_KEY_PREFIX),DataOperation.CHANGE,
DistroConfig.getInstance().getSyncDelayMillis());

这里面做了三件事情:

  • ① 将实例信息存放到内存缓存 concurrentHashMap 里面。
  • ② 添加一个任务到 BlockingQueue 里面,这个任务就是将最新的实例列表通过 UDP 的方式推送给所有客户端(服务实例),这样客户端就拿到了最新的服务实例列表。
  • ③ 开启 1s 的延迟任务,将数据通过给其他 Nacos 节点。

注意:针对第二点和第三点,属于 Distro 一致性协议的一部分,里面的内容还比较多,我们放到下一讲专门来讲。

知识点预告

  • 这里的存储实例和同步的方式和 Eureka 有什么区别?Eureka 用的三层缓存架构,Nacos 用的 CopyOnWrite 技术。

  • 如何推送给所有客户端的?UDP 方式。

  • 如何同步给 Nacos 其他节点的?Distro 一致性协议。

六、总结

本文通过发起一条注册请求,讲解了 Nacos 客户端如何随机选择节点、Nacos Server 如何路由、Nacos Server 如何存储注册实例。

核心流程

· 阅读需 7 分钟

新版本发布

2.2.0正式版 版本特性

Nacos社区于10月分发布了2.2.0-BETA版本,根据近1个多月的社区反馈,2.2.0-BETA没有发现严重的核心功能问题,主要的反馈集中在数据库插件的优化修复以及一些小bug修复。

因此不再进行BETA2版本的发布,而直接发布2.2.0的GA正式版。

2.2.0架构图

2.2.0版本是2.X中一个较为重要的版本,它包含了一些较为重大的改动:

首先,2.2.0将会删除旧的冗余代码,即1.X模式服务发现和双写相关代码。删除后,2.2.0版本将无法从Nacos 1.X服务器升级,只能从至少2.0.0版本升级。此更改不会影响对1.X客户端请求的适配,用户仍然可以使用1.X客户端链接2.2.0版本服务端。

其次,2.2.0添加了数个新的插件支持,例如 数据源插件自定义环境变量插件限流管控插件

其中自定义环境变量插件是社区需求配置加密数据库密码的需求的升级抽象插件,允许通过插件的方式对nacos服务端启动时的配置进行特殊处理,比如可以配置数据库密码为密文,在插件中进行解密,以此来支持配置加密数据库密码以及后续可能有的其他关于配置特殊处理的需求。

限流管控插件是将早期开源之夏项目中的连接限流模块进行插件化改造后的插件,可提供用户以扩展的方式编写限流管控能力,以保护Nacos服务端在高压下运行的稳定性。

由于限流管控插件的改造还未完全完成,目前将不会发布插件SPI至maven仓库中,想要尝试的开发者或用户可以根据Nacos 源代码中 plugin/control 下的SPI先行拓展使用,帮助社区更早的发现问题。

最后,2.2.0增强了在2.1.1版本被列为beta功能的轨迹追踪插件批量注册,这使它们更易于使用。关于如何开发和使用轨迹追踪插件,可以参考插件文档进行开发。

2.2.0 版本具体变更内容可参考变更日志:

## feature
[#5863][#9331] Support batch register and batch deregister service.
[#8308] Add v2 openAPI for nacos 2.0.
[#8312] Support datasource plugins.
[#8481] Support track tracing plugins.
[#8694] Support prometheus http service discovery(prometheus http sd).
[#9318] Support caseSentive for Ldap auth plugin.
[#9366] Support Ldaps authentication.

## Enhancement&Refactor
[#7930] Reomve old redundant codes about 1.x naming.
[#9391] Optimization Chooser.
[#9393] Make server stop auto when starting error.
[#9414] Optimize fuzzy queries to make SQL more general.
[#9415][#9449][#9466][#9497] Enhancement datasource plugins.
[#9423] ExternalDataSourceProperties add isEmpty check to support external config.
[#9459] Modify the method modifier of NacosApplicationListener to default.
[#9471] Keep console query condition in configuration After return list config pages.
[#9597] Keep console query condition in discovery After return list service pages.
[#9615] Enhance client choose server node to request server more dispersed.
[#9653] Refactor connection limit module to plugin.

## BugFix
[#9334] Fix group_id data length different in many tables.
[#9341] Fix can not create bean ldapAuthenticationProvider.
[#9351] Fix instance count error in prometheus metrics.
[#9367] Fix auth plugin's property 'token.secret.key' base64 decode error.
[#9408][#9437] Fix console namespace list deploy problems.
[#9461] Fix ClientWorker NullPointer judgement order.
[#9474] Fix some instance is unhealthy after change to http health check.
[#9478] Fix the chooser bug when all instances have a zero weight.
[#9584] Fix console configuration query button overflow hidden problem.
[#9586] Fix problem of deregister instance failure after service expired metadata auto clean.

## Dependency
[#9652] Upgrade ui dependencies to fix some depend vulnerability.

社区

贡献者激励活动

在2.1.1版本发布时,许多小伙伴收到了Nacos社区的小礼品,2.2.0版本发布后,又一期的礼品如期而至,本次礼品主要针对在7月初至12月初期间,为Nacos及其周边生态产品有所贡献的新贡献者以及保持持续贡献的优秀贡献者们。欢迎更多的新鲜贡献者加入Nacos社区,同时也欢迎获得了礼品的贡献者们可以继续贡献社区,激励活动会一直保持~期待收集齐所有的Nacos社区礼品哦~

本次的礼品将会是Nacos&Seata&Higress的帆布袋,请没留下联系方式的贡献者们尽快在github上添加,以免错过活动~

bag_nacos.jpgbag_seata.jpg

展望

2.X 后续计划

从2021年3月 2.0.0正式版发布至今,2.X版本已经走了接近2年时间,如今2.2.0版本发布,说明2.X版本已经逐渐成熟稳定,在2.X的后续计划中,除了鼓励社区中提供和完善已有的插件多种实现以外,依旧会为其易用性和扩展性进一步增强,添加更多的插件功能:

  • 寻址插件
  • 配置变更钩子插件

3.0 计划

Nacos社区同时也开启了关于Nacos3.0的畅想和规划,Nacos将会从统一控制面、支持国产化、存储计算分离等方向进一步演进Nacos的功能和架构,欢迎社区积极参与到新版本的建设中。 image.png image.png

About Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

最后欢迎大家扫码加入Nacos社区群

image.png

· 阅读需 10 分钟

距离2.1.1版本发布2个月后,Nacos社区又迎来一波大更新。本次发布包含了2个server版本,1个go-sdk版本以及新语言sdk的预告。

Nacos 2.1.2

2.1.2 主要增强了控制台的UI效果,变更了控制台的样式,使得内容更加紧凑美观;

另外2.1.2对客户端大小进行了优化,大幅降低了客户端的jar包大小,同时还提供了纯净版java-client,方便没有依赖gRPC或希望使用非shaded版本客户端用户使用,可以到Java SDK中查看纯净版使用方式。

最后2.1.2修复了许多旧版本的问题,提高了稳定性。具体变更内容可参考变更日志:

## Enhancement
[#6112] Unified derby-data variables.
[#7929] Reduce nacos-client jar size by minijar.
[#8941] Support Fuzzy Query in Authority Control--for api change.
[#8956] Internationalize product description content in nacos console.
[#8976] Create new namespace with duplicate namespace show name.
[#9091] build pure nacos-client when release.
[#9210] Naming Distro sync support revision.

## Refactor&dependency
[#8611] Close old datasource connection.
[#8650] Make cluster/report both receive and send metadata.
[#9013] refactor rpcClient and grpcClient to support set configuration.
[#9014] refactor TpsMonitorPoint.
[#9177] Upgrade org.yaml.snakeyaml version from 1.30 to 1.32
[#9325] Add switch for naming async query.

## BugFix
[#8882] Fix nacos-client 2.1.0 start error when using endpoint configuration.
[#8910] Fix calculate instance count error when using batch register.
[#8925] Fix the value of hasQueryString is always false.
[#8928] Fix the replaceAll operation is invalid for server list.
[#8931] Fix BatchInstanceData can't serialize problem.
[#8934] Fix header lost when request retrying.
[#8947] Fix the authentication/encryption plugin are not loaded on the nacos server.
[#9023] Fix corner case config dataId 'cipher-' can't be create.
[#9047] Fix ServerListMgr is not shutdown in nacos-client.
[#9060] Fix print logs for NamingTraceEvent continuously.
[#9062] Fix unsubscribe service failed problem.
[#9101] Fix the ConnectionTimeout property in the datasource connection is overwritten problem.
[#9227] Fix instance change event subscribe failed in 2.1.1 when no setting scope.
[#9230] Fix error event order for snapshot loading.
[#9269] Fix RpcClient parse ipv6 address error problem.
[#9271][#6876] Fix 'JraftServer' NPE after server exceptionally shutdown.
[#9277] Fix ClientServiceIndex not clean when service removed.
[#9305] Fix build resource with error dataId.
[#9311] Fix cache not removed when listener adding delay.
[#9323] Fix service checking problem in 1.x http openAPI.

2.2.0-BETA

2.2.0版本是2.X中一个较为重要的版本,它包含了一些较为重大的改动:

首先,2.2.0将会删除旧的冗余代码,即1.X模式服务发现和双写相关代码。删除后,2.2.0版本将无法从Nacos 1.X服务器升级,只能从至少2.0.0版本升级。此更改不会影响对1.X客户端请求的适配,用户仍然可以使用1.X客户端链接2.2.0版本服务端。

其次,2.2.0将会合并部分阿里巴巴编程之夏2022和开源之夏2022的课题结果,例如V2版本的 openAPI数据源插件。其他课题也将在未来版本中发布。

最后,2.2.0增强了在2.1.1版本被列为beta功能的轨迹追踪插件批量注册,这使它们更易于使用。关于如何开发和使用轨迹追踪插件,可以参考插件文档进行开发。

由于这个版本中有许多重要的变化,所以社区计划做一个预发布的BETA版本。根据BETA测试的结果,下一个版本计划是BETA2或GA版本,欢迎广大用户积极下载试用测试,帮助社区尽早发现问题。

注意:2.2.0-BETA是一个预发布的beta版本,可能存在一些问题,请尽量避免在生产环境中使用。

2.2.0-BETA版本具体变更内容可参考变更日志:

## feature
[#5863][#9331] Support batch register and batch deregister service.
[#8308] Add v2 openAPI for nacos 2.0.
[#8312] Support datasource plugins.
[#8481] Support track tracing plugins.
[#9366] Support Ldaps authentication.

## Enhancement
[#7930] Reomve old redundant codes about 1.x naming.

## BugFix
[#9334] Fix group_id data length different in many tables.
[#9341] Fix can not create bean ldapAuthenticationProvider.
[#9351] Fix instance count error in prometheus metrics.

多语言SDK

Go

Nacos Go SDK v2.1.1 版本也在近期发布了正式版本,在v2.1.0带来大量新特性和改进的基础上,进一步加强了使用的稳定性,欢迎大家升级使用。

Rust

Rust语言是最近非常如火如荼的新编程语言生态,Nacos社区的小伙伴第一时间加入了对rust生态的建设,目前nacos-rust-sdk已完成基础的功能建设工作,同时实现了配置中心的核心功能,已发布v0.1.1版本供社区试用。

随着社区小伙伴的逐渐完善和更多愿意贡献的贡献者加入,nacos-rust-sdk很快也能够支持注册中心的功能,发布1.0的正式版本,这里也欢迎更多对rust有兴趣,希望找个项目练手的小伙伴加入一起建设nacos-rust-sdk。

PHP

PHP语言作为老牌服务端编程语言,以往有不少用户询问关于PHP客户端的问题;虽然社区中有很多根据openAPI自行开发的PHP客户端,但一直没有功能较全的版本和愿意持续维护捐献的PHP客户端实现,导致社区中一直没有属于nacos-group的PHP客户端。

今年由huangwh2014贡献到社区的PHP客户端终于能够让PHP的项目能够接入Nacos,享受Nacos所带来的各种功能。

由于该版本的PHP客户端仍然是基于openAPI进行开发的,因此不具备gRPC的能力,希望社区的各位小伙伴积极参与项目,早日让PHP客户端进入2.X的时代。

社区

编程之夏&&开源之夏

经历了6月-9月的夏日,Nacos的编程之夏和开源之夏活动也圆满结束。参与课题的9位同学也完成了他们的开源社区体验。 在此期间,有些同学完成了Nacos新openAPI,新插件的开发;有些同学完成了Nacos对K8S,Mesh化的探索;也有些同学深耕于Nacos客户端与服务端的协商机制。 根据当前功能的完成程度和Nacos社区的版本的规划,这些重要的改动会在后续版本中逐渐与大家见面。在这里感谢参加编程之夏与开源之夏的同学和导师们的热情付出,同时也感谢阿里巴巴和中科院举办的优秀的开源活动。期待明年再见。

Committer

Nacos社区新晋级了两位Committer同学。

自由开发者onewe同学主要优化统一了Nacos客户端的配置参数的加载逻辑,同时优化了LDAP鉴权插件和大量控制台使用内容,找到并修复了不少Nacos的问题。经社区PMC及Committer的投票表决,提名为Nacos社区的Committer。

onewe_front.jpgOnewe_bak.jpg

另外来自小米科技的chenhao26-nineteen同学主要完成了Nacos批量注册的新功能,并且使用该新功能优化了Nacos-Sync的同步逻辑,极大提升了Nacos-Sync的性能,同时也修复了不少Nacos的问题。经社区PMC及Committer的投票表决,提名为Nacos社区的Committer。

chenhao26-nineteen_front.jpgchenhao26-nineteen_bak.jpg

期望更多小伙伴一起参与贡献~~

About Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos社区同时也开启了关于Nacos3.0的畅想和规划,欢迎社区积极参与到新版本的建设中。 image.png

最后欢迎大家扫码加入Nacos社区群 image.png

· 阅读需 11 分钟

2022年7月, 为了庆祝 Nacos 开源四周年,我们同时推出 2.1.1 和 1.4.4 两个新版本,回馈小伙伴们的信任!

这四年,我们完成了 1.0,2.0 两个大版本演进,发布了46个版本,快速迭代,进入中国开源活跃项目TOP10!

这四年,我们完成了从Dubbo/Spring到服务网格生态的完整支持,生态繁荣,被4600+上下游项目依赖引用!

这四年,我们市场占有率提升到了 55% 以上,官网累计访问突破100万,《Nacos 架构与原理》 突破6w阅读!

这四年,我们吸引成千上万家数字化升级企业,打造虎牙、爱奇艺、好未来、掌门、小米、小鹏、蔚来等标杆!

这四年,我们吸引了246+ contributor,30+ committer,8+ PMC,分布各大头部厂商,发挥越来越大作用!

未来,我们将全面启动 Nacos 3.0 项目,统一控制面,加大生态集成,全面提升体验,尽情期待~

新版本发布

2.1.1 版本特性

该版本核心解决 Nacos 2.0 广泛使用暴露出的一些稳定性问题(包括默认实现鉴权插件、Grpc请求和distro一致性协议的性能等),另外Beta测试“批量注册服务”和“服务追踪事件”两个新功能。

具体变更内容可查看changeLog:

## Features
[#5863] (BETA) Support batch register service.
[#7424] Add version data compare in the history list.
[#8305] (REMOVE) Remove leave nacos server nodes API temporarily.
[#8481] (BETA) Add TRACE Event to server.
[#8755] Add default fuzzy search feature.

## Enhancement
[#8099] Fast failure for distro sync task and verify task if cluster disconnect.
[#8150] Add the namespace description item to the namespace list page.
[#8345] Add validation for service cluster name.
[#8515] Optimize some code in InetUtils.
[#8561] Enhance default authentication plugin performance.
[#8574] Enhance filter service info for push callback.
[#8592] Ehhance GrpcUtil memory and cpu cost.
[#8622] Add NacosEnvironment and add some unit tests.

## Refactor&dependency
[#8369] Remove mina dependency.
[#8383] Upgrade jackson version to 2.12.6.1.
[#8421] Remove commonOkHttp dependency.
[#8472] Remove useless dependency.
[#8479] Refactor singleton construction as private.
[#8540] Upgrade spring-boot version to 2.6.8.
[#8594] Makes distro data load timeout can be configured.
[#8596] Explicitly specify spring-boot-maven-plugin version same as spring-boot.
[#8623] Upgrade mysql-connector-java to 8.0.28.

## BugFix
[#7039] Fix config encryptedData md5 calculation problem.
[#8153] Fix NPE for AutoExpireCache.
[#8243][#8653] Fix health check plugin problem.
[#8275] Fix can't register service when use skywalking.
[#8295] Fix can't login when use embedded storage in cluster model.
[#8318] Fix findAllConfigInfoForDumpAll sql args error.
[#8372] Fix client can't use https connection.
[#8424] Fix cycle dependency problem.
[#8428] Fix naming subscribe bug when multiple NamingService.
[#8505] Fix log configuration conflict in spring-boot project.
[#8514][#8539] Fix prometheus api error in client.
[#8516] Fix the persistent instance becomes a temporary instance.
[#8602] Fix display error after delete current namespace.
[#8632] Fix subscribe disabled instance problem in the first time.
[#8635] Fix NPE when call the shutdown method.
[#8720] Fix the problem that config aspect invalid problem.
[#8742] Fix change instance metadata, the revision of service not change.
[#8784] Fix some bugs for Console UI.
[#8833] Fix import config failed when open auth.
[#8880] Fix constantly loading config when not read permission.

批量注册服务 -- batchRegister

批量注册服务的需求主要来自于Nacos社区的另一个组件 -- Nacos-Sync,Nacos-Sync作为一个支持多注册中心迁移的第三方工具,一直帮助社区用户平滑的从Eureka,Consul等其他注册中心迁移到Nacos中。

在Nacos2.0发布后,Nacos-Sync第一时间进行了更新。但在更新后,由于Nacos2.0的注册机制发生了一定的变化,同一个客户端针对同一个服务只能注册一个实例,这导致了Nacos-Sync这种代理服务模式无法使用同一个客户端进行同一个服务的多个实例的代理注册,易用性大大降低。

同时社区发现,有一些特殊的应用,如网关,proxy,dubbo3多协议支持等,也需要一些代理注册的能力,因此社区在进行数次方案讨论后,最终由社区同学chenhao26-nineteen 完成批量注册服务的功能开发,并在2.1.1版本进行beta测试。

批量注册服务功能主要用于代理注册的场景,允许应用使用同一个客户端对同一个服务进行多个实例的注册请求。大多数传统使用场景下,用户仍然使用registerService功能即可。

服务追踪事件 -- trace event

自从阿里云的MSE Nacos发布了关于推送轨迹相关的文章后,社区反响热烈,都希望能在开源添加对应的功能。

MSE团队得知社区的强烈需求后,由scienceZ同学完成对事件抽象剥离,并贡献到开源社区。

目前该功能同样属于beta测试,暂时只能通过在源码中订阅对应事件的方式进行追踪,后续版本同样会将该功能作为SPI插件的形式开放,方便社区同学按照自己的需求定制推送轨迹。

注意: 上述两个功能均属于Beta测试阶段,其API,功能可能与后续正式发布时的有一定区别。

1.4.4 版本特性

Nacos 1.X版本已经不再进行功能演进,只进行一些bugfix和优化,因此本次版本发布主要也是进行一些bug的修复和优化,并且将一些可能有问题的依赖进行升级;建议大家尽快升级到 Nacos 2.0,以便享受快速迭代红利!

具体变更内容可查看changeLog:

# Enhancement
[#5344] Reset raft cluster ops for no leader by JRaft Api.
[#5884][#7810] Add the permission for history config.
[#7284] Enhance print exception details.
[#7799] Enhance console exception handler.
[#7802] Enhance thread pool manager.
[#7801] Enhance connection release timeout between server.
[#7803] Apply some Jraft Enhancement from 2.X.
[#7925] Client stops the UpdateTask after a service is unsubscribed.
[#8072] Reduce memory cost in DistroProtocol initialization to avoid OutOfMemoryError.
[#8144] Add volatile modifier to NamingProxy.serversFromEndpoint.
[#8203] Fix the concurrency problem about the iterator of ServerListManager.
[#8434] Enhance DistroConsistencyServiceImpl listen/unListen.

# BugFix
[#6198][#7809] Fix StringUtils.join throw NullPointerException.
[#6273] Fix loop leave server.
[#7141][#7804] Fix the problem of the operator column being empty while configuring adding and deleting records.
[#7750][#7869] Fix bug in permissions management module, such as redundant 'nacos,' when change password.
[#7757][#7761] Fix jraft request parse failed problem.
[#7807] Fix yaml parse concurrent problem.
[#7836] Fix nacos-client can't parse `localhost` problem.
[#8012] Fix NPE in DistroConsistencyServiceImpl.Notifier.
[#8283] Fix thread safety problem when concurrently registering with the same cluster.
[#8428] Fix naming subscribe bug when multiple NamingService .
[#8539] Fix prometheus api error.

# Dependency
[#7813] Upgrade log4j2 to 2.17.1.
[#7813] Upgrade logback to 1.2.9.
[#7813] Upgrade Jraft to 1.3.9.
[#8421] Remove commonOkHttp dependency.
[#8169] Upgrade spring-boot version to 2.6.6.

社区

随着社区不断壮大和发展,在2.1.1版本中社区小伙伴贡献了90%+代码,说明Nacos社区协作进入一个成熟阶段,相信很快会有一大批的新兴贡献者要加入Nacos Committer的行列,加速推动社区演进。同时我们也为社区小伙伴提供了丰富的礼物,期望更多小伙伴一起参与贡献~

贡献者激励活动

在2.1.0版本发布时,许多小伙伴收到了Nacos社区的小礼品,随着2.1.1版本发布,又一期的礼品蓄势待"发",本次礼品主要针对在4月初至6月底期间,为Nacos及其周边生态产品有所贡献的新贡献者以及保持持续贡献的优秀贡献者们。欢迎更多的新鲜贡献者加入Nacos社区,同时也欢迎获得了礼品的贡献者们可以继续贡献社区,激励活动会一直保持~期待收集齐所有的Nacos社区礼品哦~

本次的礼品将会是Nacos的长柄雨伞,请没留下联系方式的贡献者们尽快在github上添加,以免错过活动~

umbrella.jpg

中间件开发者 MeetUp

近期,阿里云在杭州举办了中间件开发者 Meetup,Nacos 也参加了该MeetUp的杭州站线下活动,并且有幸邀请到了禾连健康的CTO--邓志豪大佬来分享 Nacos微服务体系在禾连健康的落地应用。对杭州站有兴趣又没有在当时收看直播或到现场的同学,可以查看回看下载演讲PDF。另外中间件开发者 Meetup会在其他城市相继举办,想要到现场参与或者分享的同学,可以积极参与~

meetup1.JPG
meetup2.JPG

About Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos社区同时也开启了关于Nacos3.0的畅想和规划,欢迎社区积极参与到新版本的建设中。 image.png

最后欢迎大家扫码加入Nacos社区群 image.png