Nacos 配置管理最佳实践

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Nacos 简介

Nacos 是一个更易于构建云原生应用的微服务基础平台核心包含动态服务发现配置管理服务管理平台。

配置管理是 Nacos 的核心功能它提供了运行期不重启应用的情况下动态修改配置值的功能。

Nacos 配置中心发展历程

Nacos 配置中心是从阿里集团内配置中心 Diamond 孵化而来其整体发展分为三个阶段

1.阿里集团内部孵化期

nacos 配置中心诞生于阿里巴巴集团内部的配置中心 Diamond前期主要服务于集团内部对动态配置的需求。

2.开源&商业化探索尝试

集团 Diamond 经历了从开源再到闭源的过程发布了商业化产品 ACM并在 2018 年以 Nacos 配置中心为载体再次开源期间对配置中心的开源及商业化进行了探索。

3.三位一体融合发展

明确三位一体发展战略以开源 Nacos 为内核插件化支持集团 Diamond &商业化 MSE 定制的配置中心三位一体融合发展。

开源以开源 Nacos 2.0 为内核重构通信协议性能扩展性提升10倍支持 10w 级实例规模提升开放性联合开源微服务生态共同发展。

商业化支持 Nacos2.0 和专业版目前 20% 用户升级到 Nacos2.0并且支持配置鉴权和加密能力推送轨迹等高级功能。

集团关注性能和高可用能力支持大促 1 小时建站10 分钟支持响应完成 Diamond Over Nacos2.0 架构演进扩展性提升 1 倍支持 500w 实例规模。

应用场景&双十一实践

Nacos 配置管理应用场景

配置中心在业务域基础技术域都有着广泛的应用包括业务应用的开关微服务生态的服务路由及元数据高可用生态的预案切流规则及降级开关等前端生态的各类文案公告数据库生态的核心配置参数动态切库等配置。

在每年阿里集团的双十一大促中配置中心也是一个不可或缺的基础组件包括前期热点商品推送大促氛围活动标调整大促期间数据库主备切换开关核心功能降级各类名单调整预案限流调整各种基础中间件的核心参数动态大促结束后各类预案的恢复大促态到日常态的状态切换都是配置中心所支持的场景。

配置中心使用指引

1.配置中心原理

  • 业务应用nacos 的使用方通过 nacos-client 实现配置的发布查询监听回调的等基础操作。
  • 负载均衡 SLB与后端的 nacos 服务节点进行交互的地址在用户自建或者调试的场景下也可以采用直连 IP 或者地址服务器 endpoint 的模式。
  • Nacos Servernacos 服务端存储当前集群全量配置的内存和磁盘缓存集群节点之间进行水平通知配置变更事件和后端数据库进行对账保证数据一致性。
  • Nacos 控制台管理控制台可以进行配置查看配置发布监听查询等运维功能。商业化 Nacos 支持推送轨迹监控事件中心等高级功能。
  • 数据库配置持久化存储的数据库一般是主备库架构进行容灾。

用户在接入 nacos 主要有两种模式一种是通过原生 nacos-client 的 ConfigService 组件的基础 API 接入第二种是通过 Spring 框架或者其他类似框架组件接入包括 SpringCloud 和 SpringBoot 等。

2.基础 API 接入

nacos 配置中心以 NacosConfigService 接口对外提供基础 API包括配置发布查询监听回调等基础功能。

在构建 ConfigService 时需要指定 Nacos 的服务端地址需要访问的命名空间。更多的 API 使用细节可参照官方文档。

 

3.SpringCloud 接入

新增 bootstrap.yml,配置 nacos 相关参数包括 nacos 地址命令空间等参数具体可参照 com.alibaba.cloud.nacos.NacosConfigProperties 属性类。

 

在配置中心对应命名空间下创建 dataId=nacos-config-demo.yml,group=group-demo 的配置

使用 @Value 注解引用 nacos 中的参数值当 nacos 中配置值发生变化时value 的值会自动更新。

 

通过 Value 注解可以实现属性值的自动更新如果希望在配置内容变更时触发回调方法执行。在SpringCloud也可以通过NacosConfigManager#getConfigService获取 springboot 内置的 NacosConfigService 进行基础 API 操作。

更多的接入指引可参照官方文档

4.日志自助排查

以上介绍两种比较典型的 nacos 配置中心的接入方式在日常使用过程中nacos-client 本地的日志是非常有助于提高问题排查效率。

nacos 在发布配置监听配置及变更推送时都会在 {user.home}/logs/nacos/config.log 中打印详细的事件日志。以下是客户端运行期打印的几个关键日志

    • add-listener: 添加监听只有添加了对配置的监听才能收到配置变更推送
    • server-push客户端已经收到某个配置的变更通知
    • data-received收到变更通知后客户端向服务端查询到了最新的配置内容
    • notify-listener: nacos回调了的监听器Listener可以看到回调的配置内容MD5。
    • notify-ok: 回调执行正常可以查看执行回调的具体监听器 Listener执行耗时。
    • notify-error:监听器执行失败对业务来说可能业务不符合预期需要根据异常排查原因。

如果有 notify-listener 日志但是没有 notify-ok 日志则可能是监听器执行堵塞。如果想确认回调线程是否阻塞可以通过 jstack 命令查看线程堆栈jstack {pid} | grep -20 'nacos' 通过堆栈判断导致线程堵塞的原因对应解决即可。

5.使用须知

  • 小配置

配置中心的主要作用是发布 meta-data而不是数据的存储服务。我们对所发布的单个配置数据内容大小 100k 以内。

  • 低频变更

nacos 是个配置管理系统不是流量链路产品配置变更需小于 1 次/分钟。

  • 低频查询

nacos 与 redis 等缓存产品有着本质上区别所以请不要在流量链路内查询配置正常情况下应用启动时查询一次配置进行业务初始化后续只需监听配置变化即可。

  • 最终一致性

nacos 只保证最后一次推送的值一定会到达不保证中间的每一次变更都会送达订阅端。配置在发布成功后并不是实时推送到客户端中间有一定的时延。

  • 幂等性

nacos 可能在网络状况欠佳时会向订阅者发送重复的数据通知订阅者对数据通知的处理应满足幂等性支持重复推送相同配置回调多次不应产生异常预期外的情况。

  • 轻回调

在回调监听器中处理逻辑应尽量轻量化高耗时操作容易堵塞回调线程影响其他配置的推送。对于重回调的场景可以自定义业务线程池异步化处理。

错用场景

  • 配置超过 1M频繁变更导致配置中心数据库可用性下降
  • 配置频繁变更导致对客户端造成推送风暴造成客户端应用 cpu,gc 压力。
  • 客户端在流量链路中调用 getConfig 方法查询配置业务请求上涨时配置中心服务端压力上涨可用性下降
  • 回调方法中处理远程 RPCIO 操作锁等待等造成回调方法执行堵塞进而堵塞其他配置变更推送影响业务

配置中心高可用

1.客户端容灾

容灾目录

当服务端不可用时且短时无法恢复时用户可以在本地的容灾目录中手动更新配置内容以达到模拟服务端配置发生变更的场景。容灾目录中的配置内容具有最高优先级配置的查询&监听逻辑都将返回容灾配置内容因此当远程 nacos 服务端恢复正常时需要将容灾目录中的内容发布到远端然后删除本地容灾目录。

容灾目录地址

    • public 命名空间{user.home}/nacos/config/{servername}_nacos/data/config-data
    • 非 public 命名空间{user.home}/nacos/config/{servername}_nacos/data/config-data-tenant

本地缓存

nacos向服务端查询一次配置内容时会将内容同步到本地磁盘当下一次访问服务端接口失败时会读取本地配置内容以最大程度保证客户端可用。

缓存目录地址

    • public 命名空间{user.home}/nacos/config/{servername}_nacos/snapshot
    • 非 public 命名空间{user.home}/nacos/config/{servername}_nacos/snapshot-tenant

2.服务端反脆弱

在上一章节中的使用须知里我们分享了使用 nacos 配置中心的一些使用限制及误用场景而当客户端错用已经发生时服务端的反脆弱机制保证了客户端的错用不会影响服务端的可用性。

服务端的反脆弱机制包括连接限流频繁变更限流配置发布流量限流等机制来保证可用性。

商业化 MSE 优势

微服务引擎 MSE 是一个面向业界主流开源微服务框架 SpringCloud、Dubbo 以及多语言等一站式微服务平台支持服务网格生态标准、灵活、精准的控制流量帮助提升系统整体的可用性并且 MSE 在高可用、性能、安全方面大量增强让您的应用获得企业级的保障。

MSE Nacos 和自建 Nacos 对比

迁移指引

Nacos 3.0

Nacos3.0 中在 SDK 能力提升界面交互升级服务端核心能力可观测可运维稳定性&高可用方面都规划了诸多功能除了基础通用的产品能力外其中配置中心规划了社区呼声较高的模糊订阅功能也将基于长连接的一致性协议进行升级提升当前版本在边界异常场景下的稳定性及可靠性欢迎对 Nacos 感兴趣的社区开发者参与其中。

作者翼严

原文链接

本文为阿里云原创内容未经允许不得转载。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6