← 返回题目列表

Dubbo 是什么?它和 Spring Cloud 有什么区别、怎么选?

中等 第 19 / 24 题 更新于 2026/07/28
DubboRPCSpring 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

维度DubboSpring Cloud
定位RPC 框架 + 服务治理微服务全家桶(生态集成)
通信Dubbo 协议(TCP 长连接 + 二进制)HTTP + REST(Feign)
性能高(二进制、长连接)稍逊(HTTP + JSON)
调用方式RPC(像调本地方法)HTTP 调用(声明式 Feign)
注册中心ZooKeeper/NacosEureka/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 系停更」。