面试官问用过 Dubbo 没,我说就是调远程接口用的。他追问那和直接写 HTTP 有什么不一样,我卡住了。回来补了一下才理清楚。

一句话:它是服务间通信的框架

早期单体拆成多个服务后,A 服务要调 B 的方法。用 HTTP 加 JSON 也能调,但不够「像本地方法」。Dubbo 把这些远程调用包装成接口的样子,本地写一个接口注入进来直接用,底层帮你做了网络传输、序列化和负载均衡。

它解决的几件事

  • 服务注册发现:服务上线把地址注册到注册中心,比如 ZooKeeper 或 Nacos,调用方动态拿到可用列表。
  • 负载均衡:同一个服务多实例,随机、轮询、一致性哈希策略可选。
  • 容错:失败重试、快速失败、熔断降级都能配。
  • 服务治理:超时、限流、路由规则统一在配置里管。

现在还用吗

Dubbo 经历过停更又重启,现在是 Apache 顶级项目,Dubbo 3 支持应用级发现,和云原生结合更紧。国内不少公司仍在大规模使用,尤其是电商和金融这类对性能敏感、内部服务多的场景。

和 Spring Cloud 比

Spring Cloud 是一整套解决方案,HTTP 加 REST 风格,生态全但偏重。Dubbo 更聚焦 RPC 通信这一块,性能通常更好,组件也少。选哪个看团队和既有技术栈,两者也能混用。现在的趋势是往 Service Mesh 走,把这层通信能力下沉到 sidecar,业务代码更干净。

说到底,Dubbo 只是把服务调用这件事做得更顺手。服务怎么拆、边界怎么划,才是更难的活,框架帮不上太多忙。