<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Nacos on 小蜜蜂</title>
        <link>https://xumf.net/tags/nacos/</link>
        <description>Recent content in Nacos on 小蜜蜂</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Tue, 03 May 2022 20:54:29 +0800</lastBuildDate><atom:link href="https://xumf.net/tags/nacos/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Nacos</title>
            <link>https://xumf.net/blog/nacos/</link>
            <pubDate>Tue, 03 May 2022 20:54:29 +0800</pubDate>
            <guid>https://xumf.net/blog/nacos/</guid>
            <description>&lt;h2 id=&#34;一nacos-核心概念&#34;&gt;一、Nacos 核心概念&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;是什么？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Nacos（Dynamic Naming and Configuration Server）是阿里开源的&lt;strong&gt;服务发现+配置管理+服务治理平台&lt;/strong&gt;，核心功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务发现与健康监测&lt;/strong&gt;：服务注册、心跳机制、DNS 查询&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;动态配置管理&lt;/strong&gt;：配置发布、监听、版本管理&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;动态 DNS&lt;/strong&gt;：基于权重的路由、地域就近访问&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务元数据管理&lt;/strong&gt;：支持应用/版本/环境等元数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;关键特性&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;双模式&lt;/strong&gt;：支持 CP（强一致性、如配置管理）和 AP（高可用，如服务发现）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置实时推送&lt;/strong&gt;：基于长轮询（减少无效请求）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;生态兼容&lt;/strong&gt;：无缝集成 Spring Cloud、Dubbo、Kubernetes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;二核心架构与原理&#34;&gt;二、核心架构与原理&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务注册与发现流程&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;注册&lt;/strong&gt;：服务启动时向 Nacos Server 发送注册请求（HTTP/gRPC）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;心跳&lt;/strong&gt;：客户端定期发送心跳（默认5秒），超时（15秒）标记为不健康，30秒后剔除&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发现&lt;/strong&gt;：消费者通过订阅机制获取服务列表，本地缓存+增量更新&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置管理机制&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;发布配置&lt;/strong&gt;：通过控制台/API发布配置，存储于 Derby 或 MySQL&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;监听配置&lt;/strong&gt;：客户端长轮询（默认30秒），服务端 Hold 住请求，配置变更立即返回&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;历史版本&lt;/strong&gt;：支持配置回滚和版本对比&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;一致性协议&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;CP 模式&lt;/strong&gt;：使用 Raft 协议（配置管理场景）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;AP 模式&lt;/strong&gt;：自研 &lt;a class=&#34;link&#34; href=&#34;https://nacos.io/zh-cn/blog/nacos-distro-mechanism/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Distro 协议&lt;/a&gt;（服务发现场景，最终一致性）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;三重要知识点&#34;&gt;三、重要知识点&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nacos vs Eureka vs Zookeeper？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Eureka&lt;/strong&gt;：AP 设计，适合服务发现，但功能单一&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zookeeper&lt;/strong&gt;：CP 设计，强一致性，但写性能低&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nacos&lt;/strong&gt;：AP/CP 可切换，集成服务发现+配置管理，生态更全面&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;长轮询如何实现配置实时推送？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;客户端发起查询请求，若配置无变化，服务端 Hold 请求至超时（默认30秒）或期间配置变更立即返回&lt;/li&gt;&#xA;&lt;li&gt;对比传统轮询：减少无效请求，提升实时性&lt;/li&gt;&#xA;&lt;li&gt;对比 WebSocket：长轮询服务端实现更简单，但存在30秒最大延迟（非实时配置场景选长轮询即可，实时性要求极高场景考虑 gRPC 流式推送）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nacos 集群如何保证数据一致性？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Distro 模式（AP 模式）&lt;/strong&gt;：每个节点负责部分数据，通过异步复制保证最终一致性。写入时先写本地，再异步复制到其他节点；读取时可能读到旧数据，但通常可接受（服务发现场景对一致性要求不高）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Raft 协议（CP 模式）&lt;/strong&gt;：选举 Leader，多数节点写成功才返回。适用于配置管理——配置错了影响面大，宁可不更新也不能不一致。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nacos 2.0 升级了哪些内容？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;通信层优化&lt;/strong&gt;：gRPC 替代 HTTP，减少连接数（1.x 每个客户端与 server 维持多个 HTTP 长连接，2.0 全复用为一条 gRPC 连接）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;长连接增强&lt;/strong&gt;：支持服务端主动推送，降低延迟&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;性能提升&lt;/strong&gt;：支撑百万级服务实例&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如何实现配置灰度发布？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通过 &lt;strong&gt;Data ID 或 Group&lt;/strong&gt; 分组，结合 Spring Cloud 的 &lt;code&gt;@RefreshScope&lt;/code&gt; 或监听 &lt;code&gt;ConfigChangeEvent&lt;/code&gt; 实现部分实例更新&lt;/li&gt;&#xA;&lt;li&gt;更优雅的方式：使用 Nacos 的 Beta 发布功能——指定目标 IP 列表，只有命中 IP 的客户端拉取到灰度配置。验证无误后再全量发布。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;四实战场景与排查思路&#34;&gt;四、实战场景与排查思路&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务注册失败常见原因&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;网络不通：检查 Nacos Server 地址和端口（telnet 或 nc 测试连通性）&lt;/li&gt;&#xA;&lt;li&gt;版本冲突：Spring Cloud Alibaba 与 Nacos 版本不兼容 → 参考官方版本对应表&lt;/li&gt;&#xA;&lt;li&gt;命名空间/Group 配置错误：客户端 &lt;code&gt;namespace&lt;/code&gt; 和 &lt;code&gt;group&lt;/code&gt; 须与服务端一致，命名空间为空时默认使用 public&lt;/li&gt;&#xA;&lt;li&gt;防火墙/安全组拦截：gRPC 端口（9848/9849）需额外开放&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置不生效排查步骤&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;检查控制台配置是否发布成功（Data ID、Group、命名空间与客户端代码匹配）&lt;/li&gt;&#xA;&lt;li&gt;检查 &lt;code&gt;@RefreshScope&lt;/code&gt; 是否加在正确的位置——标注在 @Configuration 类上可能导致整个类重新创建，注意副作用&lt;/li&gt;&#xA;&lt;li&gt;查看日志：&lt;code&gt;com.alibaba.nacos.client.config.listener&lt;/code&gt; 包日志是否有监听异常&lt;/li&gt;&#xA;&lt;li&gt;长轮询超时确认：查看请求日志中 HTTP 状态码是否为 200（非 304 表示配置变更）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nacos 集群部署注意事项&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;至少 3 个节点形成 Raft 选举（节点数建议奇数，避免脑裂）&lt;/li&gt;&#xA;&lt;li&gt;使用 MySQL 作为外部存储（Derby 仅适合单机测试——集群模式下不使用 MySQL 会导致各节点数据不一致）&lt;/li&gt;&#xA;&lt;li&gt;所有节点配置文件中的 &lt;code&gt;cluster.conf&lt;/code&gt; 必须包含所有节点地址&lt;/li&gt;&#xA;&lt;li&gt;通过 Nginx 做负载均衡时，gRPC 长连接需要配置 &lt;code&gt;upstream&lt;/code&gt; 为 &lt;code&gt;ip_hash&lt;/code&gt; 或使用 &lt;code&gt;nginx-stream&lt;/code&gt; 模块&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;五高级话题&#34;&gt;五、高级话题&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nacos-Sync 应用&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;跨注册中心同步（如 Kubernetes Service 到 Nacos、Eureka 迁移到 Nacos）&lt;/li&gt;&#xA;&lt;li&gt;本质是事件监听+双向同步，注意循环同步问题（A→B→A 死循环），Nacos-Sync 通过记录同步来源避免&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;安全控制&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;开启鉴权：&lt;code&gt;nacos.core.auth.enabled=true&lt;/code&gt;，配置自定义用户角色&lt;/li&gt;&#xA;&lt;li&gt;重要：Nacos 2.2.3 之前默认鉴权不开启，且密钥为硬编码，务必修改 &lt;code&gt;nacos.core.auth.plugin.nacos.token.secret.key&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;双活部署&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多数据中心通过 Nacos-Sync 同步数据，结合 DNS 实现流量切换&lt;/li&gt;&#xA;&lt;li&gt;注意：跨地域同步存在网络延迟，配置变更可能在数秒后才能传播到异地——不要依赖 Nacos 跨地域强一致&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
        </item></channel>
</rss>
