为什么 Dubbo 从 ZooKeeper 转向 Nacos?

沉默是金,总会发光

大家好,我是沉默

在很长一段时间里,只要提到 Dubbo 注册中心,大家第一反应几乎都是:

ZooKeeper。

这几乎是一个默认组合:

复制代码
Dubbo + ZooKeeper

但这几年,如果你再看新的微服务项目,情况明显变了:

复制代码
Dubbo + Nacos

甚至很多团队在做一件事:

把 ZooKeeper 迁移到 Nacos。

问题就来了:

ZooKeeper 用得好好的,为什么要换?

这背后其实反映了一个更大的变化:

微服务架构正在从"能用"走向"云原生"。

**-**01-

曾经的微服务基石

ZooKeeper 并不是一个专门的 服务注册中心

它本质上是:

分布式协调系统。

ZooKeeper 最初诞生于 Hadoop 生态,用来解决分布式系统中的一些经典问题:

  • 配置同步
  • 分布式锁
  • Leader 选举
  • 状态协调

它的核心能力主要有三点:

1、强一致性

ZooKeeper 使用 ZAB 协议,保证数据在集群中的一致性。

简单说就是:

复制代码
任何节点看到的数据都是一致的

这对于分布式协调非常重要。

2、Watcher 监听机制

ZooKeeper 提供了 Watcher 机制

当节点发生变化时,可以通知客户端。

比如:

复制代码
服务上线
服务下线
节点变化

Dubbo 就是利用这个能力实现:

服务发现。

3、高可用集群

ZooKeeper 使用:

复制代码
Leader
Follower

的集群架构。

只要大多数节点存活,系统就能继续运行。

- 02-

ZooKeeper 在微服务中的问题

虽然 ZooKeeper 能做注册中心,但它并不是为这个场景设计的。

随着微服务规模越来越大,一些问题开始暴露出来。

1、功能单一

ZooKeeper 只负责:

复制代码
服务注册
服务发现

但微服务体系真正需要的其实是:

复制代码
服务注册





服务发现

配置中心
服务治理
健康检查
动态配置

如果只用 ZooKeeper,你往往还需要额外系统:

arduino 复制代码
ZooKeeper + Apollo
ZooKeeper + Config Server

架构复杂度明显增加。

2、性能瓶颈

ZooKeeper 有一个天然的限制:

所有写操作必须走 Leader。

也就是说:

复制代码
注册服务
下线服务
节点变更

这些操作都会打到 Leader 节点

当服务规模变大时:

复制代码
上万实例
频繁发布
自动扩缩容

Leader 就会成为瓶颈。

3、连接压力

ZooKeeper 使用 长连接模型

每一个服务实例都需要和 ZooKeeper 建立连接。

如果系统里有:

复制代码
10000 个服务实例

ZooKeeper 就需要维护:

复制代码
10000 条长连接

连接数压力会非常大。

4、Watcher 的"惊群效应"

ZooKeeper 的 Watcher 有一个经典问题:

一次性触发。

例如:

复制代码
一个服务下线

如果有 1000 个消费者监听这个节点

ZooKeeper 会同时通知所有客户端。

结果就是:

yaml 复制代码
1000 个客户端同时请求

这就叫:

惊群效应。

- 03-

Nacos:为微服务而生

相比 ZooKeeper,Nacos 从一开始就是为 微服务架构设计的。

Nacos 的名字其实就说明了一切:

复制代码
Naming And Configuration Service

翻译过来就是:

服务发现 + 配置管理。

1、一体化平台

Nacos 最大的优势是:

一个系统解决两个问题。

复制代码
服务注册
配置中心

统一管理。

架构从:

复制代码
ZooKeeper + ConfigCenter

变成:

复制代码
Nacos

系统复杂度明显下降。

2、环境隔离能力

Nacos 提供了非常清晰的隔离模型:

vbnet 复制代码
Namespace(环境)
Group(分组)
Cluster(集群)

例如:

bash 复制代码
dev
test
prod

可以轻松隔离。

3、更好的性能

在大规模服务场景下,Nacos 的表现明显更好。

例如 1 万实例规模下的对比:

指标 ZooKeeper Nacos
注册耗时 20-50ms 5-15ms
通知延迟 100-200ms 10-30ms
资源占用 较高 降低约40%
扩展能力 扩容复杂 水平扩展简单

简单说:

Nacos 更适合大规模微服务。

4、更完善的健康检查

ZooKeeper 的健康检查基本依赖:

复制代码
客户端断连

而 Nacos 提供了多种健康检测方式:

复制代码
TCP
HTTP
MySQL
客户端心跳
服务端主动检测

稳定性更高。

5、云原生友好

Nacos 对云原生生态支持非常好。

例如:

复制代码
Kubernetes
Spring Cloud
Dubbo

都可以无缝集成。

如果你在阿里云体系中:

复制代码
MSE
EDAS

也都是基于 Nacos 构建的。

Dubbo 为什么更适合 Nacos

从 Dubbo 3 开始,Nacos 的优势变得更明显。

因为 Dubbo 开始强化:

服务治理能力。

例如:

复制代码
权重控制
动态路由
熔断降级
标签路由
黑白名单

这些能力都需要:

更强的元数据管理。

而 Nacos 在这方面天然更强。

Dubbo 3 的服务元数据大概是这样的:

yaml 复制代码
metadata:
  version: 2.7.0
  protocols:
    - dubbo
    - rest
  params:
    timeout: 1000
    retries: 3

这些信息都可以在 Nacos 中统一管理。

**-**04-

实际迁移怎么做?

很多公司已经在做:

ZooKeeper → Nacos 迁移。

一个常见的方案是:

双注册中心。

步骤通常是:

第一步:双注册

复制代码
服务同时注册到
ZooKeeper
Nacos

第二步:消费者切换

逐步让消费者从:

复制代码
ZooKeeper

切到:

复制代码
Nacos

第三步:观察监控

确认:

复制代码
服务调用稳定
延迟正常
无异常流量

第四步:下线 ZooKeeper

最后彻底移除 ZooKeeper。

未来趋势:服务治理平台化

从更大的技术趋势看,这次变化其实不只是:

复制代码
ZooKeeper → Nacos

而是微服务架构的一次升级:

从:

复制代码
单一组件

走向:

复制代码
服务治理平台

未来很可能是:

复制代码
Nacos + Service Mesh

比如:

复制代码
Nacos + Istio

形成统一的服务治理平面。

**-**05-

总结

Dubbo 从 ZooKeeper 转向 Nacos,本质上反映的是微服务架构的演进:

过去的目标是:

复制代码
能实现服务发现

现在的目标是:

复制代码
统一服务治理平台

Nacos 提供的不只是注册中心,而是:

复制代码
服务发现
配置中心
服务治理
云原生集成

的一整套基础设施。

所以这次变化,看起来只是换了一个组件。

但背后其实是:

微服务架构进入云原生时代的一个缩影。

热门文章

一套能保命的高并发实战指南

架构师必备:用 AI 快速生成架构图

**-**06-

粉丝福利

点点关注,送你 Spring Cloud 微服务实战,如果你正在做项目,又或者刚准备做。可以仔细阅读一下,或许对你有所帮助!

相关推荐
seeInfinite1 小时前
MOE架构
架构
lUie INGA2 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
geBR OTTE2 小时前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
Porunarufu2 小时前
博客系统UI自动化测试报告
java
NineData2 小时前
NineData 新增支持 GaussDB 到 StarRocks 实时数据复制能力
后端
哑巴湖小水怪2 小时前
Android的架构是四层还是五层
android·架构
小白学大数据2 小时前
现代Python爬虫开发范式:基于Asyncio的高可用架构实战
开发语言·爬虫·python·架构
sghuter2 小时前
数字资源分发架构解密
后端·架构·dubbo
小码哥_常3 小时前
Spring Boot启动慢?这5个优化点带你起飞
后端