Dubbo 是什么?它和 Spring Cloud 有什么区别、怎么选?
简化版
Dubbo 是阿里开源的「RPC 框架 + 服务治理框架」——它让服务调用像调用本地方法一样(远程过程调用 RPC),并提供服务注册发现、负载均衡、容错、限流等治理能力。它和 Spring Cloud 的核心区别在「定位和通信方式」:Dubbo 是「RPC 框架」,默认用「自定义的 Dubbo 协议 + 二进制序列化(TCP 长连接)」通信,性能高;Spring Cloud 是「微服务全家桶(生态)」,服务间用「HTTP + REST(OpenFeign)」通信,通用但性能稍逊。另一个区别:Dubbo 更聚焦「服务调用和治理」(是一个 RPC 框架 + 一套治理),而 Spring Cloud 是「一整套微服务解决方案」(注册中心、配置中心、网关、熔断、链路追踪等全套组件的集成)。怎么选:追求高性能 RPC 调用、内部服务通信为主、且团队熟悉阿里生态 → Dubbo(现在是 Dubbo 3,也支持 Triple 协议兼容 gRPC);追求生态完整、HTTP 通用、和 Spring 全家桶无缝 → Spring Cloud。现在 Dubbo 3 也在向云原生靠拢,两者边界在模糊。
详细版
Dubbo vs Spring Cloud:
| 维度 | Dubbo | Spring Cloud |
|---|---|---|
| 定位 | RPC 框架 + 服务治理 | 微服务全家桶(生态集成) |
| 通信 | Dubbo 协议(TCP 长连接 + 二进制) | HTTP + REST(Feign) |
| 性能 | 高(二进制、长连接) | 稍逊(HTTP + JSON) |
| 调用方式 | RPC(像调本地方法) | HTTP 调用(声明式 Feign) |
| 注册中心 | ZooKeeper/Nacos | Eureka/Nacos/Consul |
| 组件完整度 | 聚焦调用+治理 | 全套(网关/配置/熔断/追踪) |
| 生态 | 阿里系 | Spring 生态 |
// Dubbo:像调本地方法(RPC)
// 服务提供者
@DubboService // 暴露服务
public class UserServiceImpl implements UserService {
public User getUser(Long id) { ... }
}
// 服务消费者
@DubboReference // 引用远程服务
private UserService userService; // 像本地对象一样调
User u = userService.getUser(1L); // 底层是远程调用(Dubbo 协议)
// Spring Cloud(OpenFeign):声明式 HTTP 调用
@FeignClient("user-service")
public interface UserClient {
@GetMapping("/users/{id}")
User getUser(@PathVariable Long id); // 底层是 HTTP 调用
}
⚠️ 理解 Dubbo 和 Spring Cloud 的区别,关键是分清「RPC 框架」和「微服务生态」两个不同层次。Dubbo 本质是一个高性能的 RPC 框架(外加服务治理),它把重心放在「服务之间怎么高效调用」——用自定义的 Dubbo 协议、TCP 长连接、二进制序列化,性能比 HTTP 好。Spring Cloud 本质是一套微服务组件的集成方案(一个「全家桶」)——它把服务发现、配置中心、网关、熔断、链路追踪等一堆组件整合在一起,服务间通信只是其中一环(用 HTTP/Feign)。所以严格说它们不完全是同一层次的东西:Dubbo 更接近「gRPC 那样的 RPC 框架 + 治理」,Spring Cloud 更接近「微服务架构的整体方案」。实际中,Dubbo 也能和 Spring Cloud 的组件配合(如 Spring Cloud Alibaba 里 Dubbo 做 RPC、Nacos 做注册配置、Sentinel 做限流),两者不是纯粹的二选一。
完整版教学
一、Dubbo 是什么:RPC + 治理
先理解 Dubbo 的定位:
Dubbo = RPC 框架 + 服务治理
RPC(Remote Procedure Call,远程过程调用):
让"调用远程服务"像"调用本地方法"一样
@DubboReference UserService userService;
userService.getUser(1L); // 看起来是本地调用,实际是远程调用
→ Dubbo 帮你处理了:序列化、网络传输、找到服务提供者、返回结果
服务治理(Dubbo 提供的能力):
① 服务注册与发现(提供者注册、消费者发现,靠注册中心如 Nacos/ZK)
② 负载均衡(多个提供者选一个,随机/轮询/最少活跃等)
③ 容错(失败重试、快速失败、失败切换 Failover 等)
④ 限流、熔断、降级
⑤ 服务分组、版本、路由规则
Dubbo 的核心价值:
高性能的 RPC 调用 + 一套完整的服务治理
→ 专注于"服务之间怎么高效、可靠地调用"
Dubbo 3(现在):
向云原生演进——支持 Triple 协议(兼容 gRPC、基于 HTTP/2)、
应用级服务发现、和 K8s 更好集成
Dubbo = RPC 框架 + 服务治理。RPC:让调用远程服务像调本地方法(userService.getUser(1L) 看似本地实际远程,Dubbo 处理序列化/网络/找提供者/返回)。服务治理:服务注册发现(靠 Nacos/ZK)、负载均衡、容错(重试/失败切换)、限流熔断降级、分组版本路由。核心价值是「高性能 RPC 调用 + 完整服务治理」(专注服务间高效可靠调用)。Dubbo 3 向云原生演进(Triple 协议兼容 gRPC、应用级服务发现、K8s 集成)。理解「Dubbo=RPC 框架(调远程像调本地)+服务治理(注册发现/负载均衡/容错/限流)、专注服务间高效调用、Dubbo3 向云原生(Triple 兼容 gRPC)」,就理解了 Dubbo 的定位。
二、Dubbo 的通信:Dubbo 协议
Dubbo 高性能的关键是「Dubbo 协议 + 长连接 + 二进制」:
默认 Dubbo 协议的特点:
① 基于 TCP 长连接:
消费者和提供者之间建立长连接、复用
→ 不像 HTTP 每次请求可能新建连接(虽有 keep-alive)
→ 单连接多请求,适合高频调用
② 二进制序列化:
默认 Hessian2(或其他),二进制而非 JSON 文本
→ 体积小、序列化快
③ 自定义协议头:紧凑、高效
对比 HTTP + JSON(Spring Cloud/Feign):
Dubbo 协议:TCP 长连接 + 二进制 → 性能高
HTTP + JSON:文本 + HTTP 开销 → 通用但慢一些
性能差异:
高频、内部服务调用场景,Dubbo 协议的性能优势明显
(长连接省了连接开销、二进制省了序列化和带宽)
Dubbo 3 的 Triple 协议:
基于 HTTP/2,兼容 gRPC
→ 既保留高性能,又向标准(HTTP/2、gRPC 生态)靠拢
→ 能穿透网关、更云原生友好
Dubbo 高性能的关键是「Dubbo 协议 + 长连接 + 二进制」:① 基于 TCP 长连接(消费者提供者间建长连接复用、单连接多请求、适合高频调用,不像 HTTP 每次可能新建连接);② 二进制序列化(默认 Hessian2、体积小快,不是 JSON 文本);③ 自定义紧凑协议头。对比 HTTP+JSON(Spring Cloud/Feign)性能高。Dubbo 3 的 Triple 协议基于 HTTP/2、兼容 gRPC(保留高性能又向标准靠拢、更云原生友好)。理解「Dubbo 协议高性能:TCP 长连接(复用/高频)+二进制序列化(小而快)+紧凑协议头、比 HTTP+JSON 快、Dubbo3 Triple 基于 HTTP/2 兼容 gRPC」,就掌握了 Dubbo 的通信。
三、Spring Cloud 是什么:微服务全家桶
对比理解 Spring Cloud 的定位:
Spring Cloud = 微服务组件的集成方案(全家桶)
它整合了微服务架构需要的一整套组件:
服务注册发现:Eureka/Nacos/Consul
服务调用:OpenFeign(声明式 HTTP)/ RestTemplate / WebClient
负载均衡:Spring Cloud LoadBalancer
网关:Spring Cloud Gateway
配置中心:Spring Cloud Config / Nacos Config
熔断降级:Resilience4j / Sentinel
链路追踪:Micrometer Tracing / Sleuth
→ 把微服务需要的各种能力"集成"起来,开箱即用
服务间通信:HTTP + REST(OpenFeign)
@FeignClient 声明式调用,底层是 HTTP 请求
→ 通用(HTTP)、和 Spring 生态无缝
Spring Cloud 的核心价值:
"一整套微服务解决方案"——不只是调用,而是微服务架构的方方面面
且和 Spring Boot / Spring 生态深度集成
所以定位不同:
Dubbo:聚焦"服务调用和治理"(RPC 框架 + 治理)
Spring Cloud:覆盖"微服务架构全套"(生态集成)
Spring Cloud = 微服务组件的集成方案(全家桶)——整合了微服务需要的一整套组件:服务注册发现(Eureka/Nacos)、服务调用(OpenFeign 声明式 HTTP)、负载均衡(LoadBalancer)、网关(Gateway)、配置中心(Config/Nacos)、熔断(Resilience4j/Sentinel)、链路追踪。服务间通信用 HTTP + REST(OpenFeign)(通用、和 Spring 生态无缝)。核心价值是「一整套微服务解决方案」(覆盖架构方方面面、和 Spring 深度集成)。所以定位不同:Dubbo 聚焦服务调用治理、Spring Cloud 覆盖微服务全套。理解「Spring Cloud=微服务全家桶(整合注册发现/调用 Feign/网关/配置/熔断/追踪)、服务间用 HTTP+REST(Feign)、核心是一整套微服务方案覆盖全套、和 Spring 集成」,就理解了 Spring Cloud 的定位。
四、核心区别:RPC 框架 vs 微服务生态
把两者的核心区别讲清:
最本质的区别:不完全是同一层次的东西
Dubbo(RPC 框架 + 治理):
重心在"服务之间怎么高效调用"
≈ gRPC + 服务治理
→ 是一个"调用框架 + 治理"
Spring Cloud(微服务生态):
重心在"微服务架构的整体方案"
服务调用(Feign)只是其中一环,还有网关、配置、熔断、追踪等
→ 是一个"微服务组件集成方案"
对比维度:
① 通信:Dubbo 协议(TCP+二进制,快)vs HTTP+JSON(Feign,通用)
② 范畴:Dubbo 聚焦调用+治理 vs Spring Cloud 全套组件
③ 生态:阿里系 vs Spring 系
④ 侵入性:Dubbo 用注解暴露/引用服务(RPC 风格)
Spring Cloud 用 REST(HTTP,服务本身就是 HTTP 接口)
所以它们的"重叠"部分是"服务调用和治理":
Dubbo 在这块性能更好(RPC)
Spring Cloud 在这块通用(HTTP)+ 有全套周边组件
不是纯粹的二选一:
Spring Cloud Alibaba 就是把 Dubbo(RPC)、Nacos(注册配置)、
Sentinel(限流)等整合进 Spring Cloud 体系
→ Dubbo 做 RPC,其他用 Spring Cloud 组件,混搭
两者最本质的区别是「不完全是同一层次」:Dubbo(RPC 框架+治理) 重心在服务间高效调用(≈ gRPC + 治理);Spring Cloud(微服务生态) 重心在架构整体方案(服务调用只是一环,还有网关/配置/熔断/追踪)。对比:通信(Dubbo 协议快 vs HTTP+JSON 通用)、范畴(Dubbo 聚焦调用治理 vs Spring Cloud 全套)、生态(阿里系 vs Spring 系)。不是纯二选一:Spring Cloud Alibaba 把 Dubbo(RPC)、Nacos(注册配置)、Sentinel(限流)整合进 Spring Cloud 体系(混搭)。理解「本质区别不同层次:Dubbo(RPC+治理≈gRPC)vs Spring Cloud(微服务生态覆盖全套)、重叠在服务调用治理(Dubbo 性能好 vs Spring Cloud 通用有周边)、不是二选一(Spring Cloud Alibaba 混搭)」,就掌握了核心区别。
五、怎么选
综合对比,给出选择建议:
选 Dubbo(RPC 框架 + 治理):
① 追求高性能 RPC 调用(内部服务高频通信)
② 服务间通信为主的场景(不太需要对外 HTTP)
③ 团队熟悉阿里/Dubbo 生态
④ 需要精细的服务治理(路由、分组、版本、限流)
→ Dubbo 3 现在也支持 Triple(HTTP/2、兼容 gRPC),更云原生
选 Spring Cloud(微服务生态):
① 追求生态完整(一站式:网关、配置、熔断、追踪全套)
② 服务本身就是 HTTP/REST(通用、浏览器/外部能调)
③ 和 Spring Boot / Spring 全家桶深度集成
④ 团队熟悉 Spring 生态
混合(Spring Cloud Alibaba):
Dubbo(RPC)+ Nacos(注册配置)+ Sentinel(限流)
+ Spring Cloud Gateway(网关)...
→ 取各家之长:Dubbo 的高性能 RPC + Spring Cloud 的生态
现实趋势:
Dubbo 3 向云原生靠拢(Triple、K8s)
Spring Cloud 也在演进(Spring Cloud Alibaba 整合国产组件)
→ 边界在模糊,很多时候是"用 Spring Cloud 体系 + Dubbo 做 RPC"
结论:
内部高性能 RPC 为主 → Dubbo
生态完整 + HTTP 通用 → Spring Cloud
两者也可混用(Spring Cloud Alibaba)
选择建议:选 Dubbo(追求高性能 RPC、内部服务高频通信为主、熟悉阿里生态、需精细治理;Dubbo 3 支持 Triple 更云原生);选 Spring Cloud(追求生态完整一站式、服务本身是 HTTP/REST 通用、和 Spring 深度集成、熟悉 Spring 生态);混合(Spring Cloud Alibaba):Dubbo 做 RPC + Nacos 注册配置 + Sentinel 限流 + Gateway 网关(取各家之长)。现实趋势是边界模糊(Dubbo 3 向云原生、Spring Cloud Alibaba 整合,常「Spring Cloud 体系 + Dubbo 做 RPC」)。理解「选 Dubbo:高性能 RPC/内部高频/阿里生态/精细治理;选 Spring Cloud:生态完整/HTTP 通用/Spring 集成;混合 Spring Cloud Alibaba(Dubbo RPC+Nacos+Sentinel);趋势边界模糊」,就掌握了选择建议。
六、演进与现状
理解两者的演进和现状,避免过时认知:
Dubbo 的演进:
Dubbo 2.x:经典的高性能 RPC(Dubbo 协议、ZooKeeper 注册)
Dubbo 3.x:
- Triple 协议(基于 HTTP/2、兼容 gRPC)→ 更云原生、能穿网关
- 应用级服务发现(更适合大规模、K8s)
- 和 Spring Cloud 更好融合
→ 不再是"只有 Dubbo 协议的老框架"
Spring Cloud 的演进:
Spring Cloud Netflix(早期,Eureka/Hystrix/Zuul,很多已停更)
→ Spring Cloud 新组件(LoadBalancer/Resilience4j/Gateway)
→ Spring Cloud Alibaba(Nacos/Sentinel/Dubbo/Seata,国产生态活跃)
现状:
① Netflix 系组件很多停更 → 别再用 Hystrix/Zuul/Eureka(老)
② Spring Cloud Alibaba 生态活跃(Nacos 注册配置、Sentinel 限流)
③ Dubbo 3 云原生化,可和 Spring Cloud 生态融合
面试注意:
别停留在"Dubbo 是 RPC、Spring Cloud 是 HTTP"的老对比
要知道 Dubbo 3 的 Triple、Spring Cloud Alibaba 的整合
→ 两者边界在模糊,实践中常混用
演进现状:Dubbo 从 2.x(Dubbo 协议、ZK)到 3.x(Triple 协议基于 HTTP/2 兼容 gRPC、应用级服务发现、更云原生)。Spring Cloud 从 Netflix 系(Eureka/Hystrix/Zuul 很多已停更)到新组件(LoadBalancer/Resilience4j/Gateway)和 Spring Cloud Alibaba(Nacos/Sentinel/Dubbo/Seata,国产生态活跃)。现状:Netflix 系停更别再用、Spring Cloud Alibaba 活跃、Dubbo 3 云原生化可融合。面试别停留在「Dubbo 是 RPC、Spring Cloud 是 HTTP」的老对比,要知道 Dubbo 3 Triple、Spring Cloud Alibaba 整合。理解「演进:Dubbo 2.x→3.x(Triple 兼容 gRPC 云原生)、Spring Cloud Netflix(停更)→新组件→Alibaba(活跃);现状 Netflix 停更别用/Alibaba 活跃/Dubbo3 可融合;别停留老对比」,就避免了过时认知。
记忆钩子:「Dubbo=RPC 框架+服务治理(调远程像调本地@DubboReference,默认 Dubbo 协议 TCP 长连接+二进制序列化→高性能);Spring Cloud=微服务全家桶(整合注册发现/调用 Feign/网关/配置/熔断/追踪,服务间用 HTTP+REST 通用);核心区别不同层次:Dubbo 聚焦调用+治理(≈gRPC)vs Spring Cloud 覆盖微服务全套(调用只是一环);选择:高性能 RPC/内部高频用 Dubbo、生态完整/HTTP 通用用 Spring Cloud、可混用(Spring Cloud Alibaba:Dubbo RPC+Nacos+Sentinel);Dubbo3 Triple 基于 HTTP/2 兼容 gRPC 云原生,Netflix 系停更别用,边界在模糊」。
七、常见误区与追问
- 误区:Dubbo 和 Spring Cloud 是同一层次、纯粹二选一的东西。 不完全是——Dubbo 本质是 RPC 框架 + 治理(≈ gRPC + 治理),聚焦服务调用;Spring Cloud 是微服务生态(全家桶),覆盖注册/配置/网关/熔断/追踪全套,服务调用只是一环;它们可以混用(Spring Cloud Alibaba 里 Dubbo 做 RPC、Nacos 做注册配置)。
- 误区:Dubbo 只能用 Dubbo 协议、不支持 HTTP/2。 Dubbo 3 引入了 Triple 协议——基于 HTTP/2、兼容 gRPC,既保留高性能又向标准靠拢、能穿透网关、更云原生友好;不再是「只有 Dubbo 协议」的老框架。
- 误区:Spring Cloud 就用 Eureka/Hystrix/Zuul。 那是 Netflix 系组件,很多已停更(Hystrix、Zuul、Eureka);现在推荐用 Spring Cloud LoadBalancer、Resilience4j、Spring Cloud Gateway,或 Spring Cloud Alibaba 的 Nacos、Sentinel;别用停更的老组件。
- 误区:Dubbo 性能高就一定比 Spring Cloud 好。 Dubbo 的高性能 RPC 适合内部服务高频调用;但 Spring Cloud 的 HTTP/REST 通用、浏览器和外部能调、生态完整(网关/配置/追踪一站式);选择看场景(内部高性能 RPC vs 生态完整通用),不是绝对好坏。
- 追问:Dubbo 为什么比 Spring Cloud(Feign)性能好? Dubbo 默认用 Dubbo 协议——基于 TCP 长连接(消费者提供者间建长连接复用、单连接多请求、省连接开销)+ 二进制序列化(Hessian2 等,体积小、序列化快,不是 JSON 文本);而 Spring Cloud 的 Feign 用 HTTP + JSON(文本冗余、HTTP 开销);所以内部高频调用 Dubbo 协议性能优势明显。
- 追问:什么是 Spring Cloud Alibaba? 是 Spring Cloud 的一套国产实现/扩展——整合了阿里系的组件:Nacos(注册中心 + 配置中心)、Sentinel(限流熔断降级)、Dubbo(RPC 框架)、Seata(分布式事务)、RocketMQ 等;它把这些组件融入 Spring Cloud 体系,让你能用 Spring Cloud 的编程模型 + 阿里的高性能组件(如 Dubbo 做 RPC、Nacos 做注册配置),是国内很活跃的微服务技术栈。
- 追问:现在做微服务该选 Dubbo 还是 Spring Cloud? 看需求:内部服务高频调用、追求高性能 RPC、需要精细治理 → Dubbo(3.x 也云原生了);追求生态完整(网关/配置/熔断/追踪一站式)、服务是 HTTP/REST(通用、外部能调)、和 Spring 深度集成 → Spring Cloud;很多实践是混用——用 Spring Cloud 体系搭架子 + Dubbo 做内部高性能 RPC(Spring Cloud Alibaba),取各家之长;两者边界在模糊。
八、加强记忆
Dubbo 是阿里开源的「RPC 框架 + 服务治理框架」——让服务调用像调本地方法(@DubboReference RPC),提供服务注册发现、负载均衡、容错、限流等治理。它默认用「Dubbo 协议:TCP 长连接 + 二进制序列化」通信,性能高。Spring Cloud 是「微服务全家桶(生态集成)」——整合注册发现、服务调用(OpenFeign 声明式 HTTP)、网关、配置中心、熔断、链路追踪一整套,服务间用 HTTP + REST(通用)。核心区别是层次不同:Dubbo 聚焦「服务调用和治理」(≈ gRPC + 治理),Spring Cloud 覆盖「微服务架构全套」(调用只是一环);通信上 Dubbo 协议(TCP+二进制,快)vs HTTP+JSON(通用);生态上阿里系 vs Spring 系。怎么选:内部高性能 RPC 为主、精细治理 → Dubbo(3.x 有 Triple 协议基于 HTTP/2 兼容 gRPC、更云原生);生态完整、HTTP 通用、和 Spring 集成 → Spring Cloud;两者可混用(Spring Cloud Alibaba:Dubbo 做 RPC + Nacos 注册配置 + Sentinel 限流),不是纯二选一。注意 Netflix 系(Eureka/Hystrix/Zuul)已停更别用,边界在模糊。一句话「Dubbo=RPC 框架+治理(Dubbo 协议 TCP 长连接+二进制→高性能)、Spring Cloud=微服务全家桶(HTTP+Feign 通用+全套组件);区别不同层次:Dubbo 聚焦调用治理 vs Spring Cloud 覆盖全套;高性能 RPC 用 Dubbo、生态完整用 Spring Cloud、可混用(Spring Cloud Alibaba);Dubbo3 Triple 兼容 gRPC,Netflix 系停更」。