作者:Nacos 社区
新版本发布
经过 4 个多月社区的大量贡献,Nacos 2.3.0 版本终于进入的 Beta 发布阶段,在经历了 2.2.X 的多个安全风险修复的版本后,又一次迎来了功能性上的更新版本。
Nacos 反脆弱插件
2.2.0 版本加入 ALPHA 版本的反脆弱插件后,社区经过多次重构和修改,提升抽象度和稳定性,终于在 2.3.0 版本中正式公布了 Nacos 的反脆弱插件,用于避免 Nacos 集群在大量请求和连接时导致的容量问题而引发更大规模的故障。
默认反脆弱实现插件的使用以及自定义反脆弱插件的开发可参考文档反脆弱插件 [ 1] 。
Nacos 配置变更插件
Nacos 配置管理作为 Nacos 的核心功能,一直受到开发人员、运维人员和审计人员的关注,不少运维人员和审计人员向社区提出诉求,希望 Nacos 能够提供配置变更的审计、变更通知等功能;同时开发人员也希望 Nacos 提供一定的格式校验功能,避免修改配置时出现错误导致应用故障。
由于 Nacos 配置管理本身对配置内容是不感知的,且各个用户公司的审计、通知系统也各不相同,因此 Nacos 为了能够更广阔的适配各个用户的诉求,在去年的开源之夏中制定了配置变更插件的课题,希望以插件化的形式,来满足对配置变更过程的介入。
经过同学和导师长期的努力,该插件在 2.3.0 版本发布,用户可以开发自定义插件,在配置变更前和变更完成后,分别对接公司的审计系统和通知系统,并在变更前进行更多的校验操作, 如格式校验,配置名字的规范化等。同时 Nacos 社区也提供了默认插件的实现,可接入 webhook 进行配置变更的通知以及导入配置的文件名校验等;详情可参考文档配置变更插件 [ 2] 。
Nacos 请求参数校验
2.3.0 版本之前的 Nacos 的参数校验逻辑分散,由各类请求的处理方法单独进行校验,难以更改维护,经常出现参数校验的遗漏,参数校验的规则也没有明确统一;这使得用户使用时经常会因为一些特殊字符导致功能不符合预期或出现漏洞,甚至导致大量推送,导致带宽打满,内存占用过多,导致应用出现故障。
在 2.3.0 版本中,Nacos 明确了参数校验规则, 在服务端实现了统一的参数校验逻辑并添加了参数校验层,根据校验规则对客户端向服务端发送的请求进行校验。用户可以选择开启参数校验功能,开启后 Nacos 将会对客户端向服务端发送的请求中的部分参数进行参数校验,确保参数的合法性,避免由于错误使用,导致的不符合预期以及性能问题。
详细情况可参考文档参数校验规则 [ 3] 。
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 年度的开源之夏 [ 4] 中,发布了 9 个项目,其中 6 个项目成功匹配同学,并基本完成了项目课题,其中不乏大量社区期待的新增功能和优化,将在后续版本中加入。
入选项目列表:
- 客户端订阅者合并和数据选择功能
- 为 nacos-spring-boot-starter 支持适配 spring boot 3
- ConfigMap 到 Nacos 配置中心自动同步工具
- 客户端可观测性指标建设
- 支持 Nacos 注册中心的模糊订阅能力
- 实现其他部分 xDS 协议
感谢导师和同学们的辛苦付出,也感谢主办方中科院软件所提供的优秀平台和活动。
Nacos 荣获编程夏令营 GLCC 2023优秀社区
Nacos 在 2023 年度的编程夏令营 [ 5] 申报了一个 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 的功能和架构,欢迎社区积极参与到新版本的建设中。
About Nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
最后欢迎大家加入 Nacos 钉钉社区群(群号:12810027056):
相关链接:
[1] 反脆弱插件
nacos.io/zh-cn/docs/…
[2] 配置变更插件
nacos.io/zh-cn/docs/…
[3] 参数校验规则
nacos.io/zh-cn/docs/…
[4] 开源之夏
summer-ospp.ac.cn/org/orgdeta…
[5] 编程夏令营
www.gitlink.org.cn/glcc/2023/p…