Dubbo RPC 微服务治理入门

知识库
知识库文档
/tech-stacks/apache-dubbo/tutorial/Dubbo RPC 微服务治理入门.md

文档

前言

RPC(Remote Procedure Call)是微服务通信的基石。与 REST HTTP 不同,RPC 让你像调用本地方法一样调用远程服务。Dubbo 是 Java 生态中最成熟的 RPC 框架,承载着双十一、12306 等超大规模流量。


第一章:Dubbo 架构总览

1.1 核心角色

┌──────────┐  注册/订阅   ┌──────────────┐
│ Provider │◄──────────→│ Registry      │
└────┬─────┘             │ (Nacos/ZK)    │
     │                   └──────┬────────┘
     │ RPC 调用                 │ 发现地址
     ▼                          ▼
┌──────────┐              ┌──────────┐
│ Consumer │──RPC 调用──→│ Provider │
└──────────┘              └──────────┘

Monitor ←─── 统计信息(异步上报)

1.2 调用链路

Consumer 调用 GreetingService.sayHello("Alice")
  → 1. 从 Registry 获取 Provider 地址列表
  → 2. LoadBalance 选择一台 Provider
  → 3. 序列化请求参数(Hessian2 / Protobuf)
  → 4. 通过 Netty 发送二进制数据
  → 5. Provider 反序列化 → 执行 → 序列化结果返回
  → 6. Consumer 收到响应 → 反序列化 → 返回给调用方

第二章:Dubbo 3 新特性

2.1 Triple 协议(HTTP/2 + Protobuf)

Dubbo 2 时代:
  协议: dubbo://(私有协议,非标准)
  序列化: Hessian2
  穿透网关: 需要协议转换

Dubbo 3 时代:
  协议: tri://(基于 HTTP/2,兼容 gRPC)
  序列化: Protobuf(推荐)/ JSON
  穿透网关: 原生 HTTP/2,Envoy/网关直接转发

2.2 应用级服务发现

Dubbo 2: 接口级注册(N 个接口注册 N 条)
   /dubbo/com.example.GreetingService/providers
   /dubbo/com.example.OrderService/providers
   /dubbo/com.example.PaymentService/providers

Dubbo 3: 应用级注册(一个应用注册 1 条)
   /dubbo/demo-provider/instances
   → 大幅减轻注册中心压力

2.3 流量路由与灰度发布

# 标签路由:将流量路由到特定实例
dubbo:
  provider:
    tag: v2  # 只接收 tag=v2 的流量
// 消费者指定路由标签
RpcContext.getClientAttachment().setAttachment("dubbo.tag", "v2");

2.4 自适应负载均衡

Dubbo 3.2+ 引入 P2C(Pick Two Choose One)算法,根据实例实际负载动态选择,而非简单的轮询/随机。


第三章:Dubbo 协议对比

协议 传输层 序列化 适用场景 性能
dubbo:// TCP (Netty) Hessian2 内部 RPC(默认) ⭐⭐⭐⭐
tri:// HTTP/2 Protobuf 跨语言/网关 ⭐⭐⭐⭐⭐
rest:// HTTP JSON 对外开放 API ⭐⭐⭐
grpc:// HTTP/2 Protobuf gRPC 生态 ⭐⭐⭐⭐⭐
redis:// TCP JSON 轻量级 ⭐⭐

第四章:Dubbo vs Spring Cloud vs gRPC

维度 Dubbo Spring Cloud (Feign) gRPC
通信协议 TCP 二进制 HTTP/1.1 + JSON HTTP/2 + Protobuf
性能
跨语言 中等(Go/Rust) 天然 HTTP 原生
服务治理 ✅ 强大 ✅ 中等 ❌ 需额外组件
网关友好 Tri 协议 ✅
Spring 集成 ✅ 原生 ✅ 原生 ✅ spring-grpc
学习曲线 中高
国内生态 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐

第五章:性能调优要点

5.1 线程模型

dubbo:
  protocol:
    name: dubbo
    # I/O 线程池
    iothreads: 4
    # 业务线程池(默认 200)
    threads: 200

5.2 序列化选择

# 高性能场景:Protobuf
dubbo:
  provider:
    serialization: protobuf

# 兼容性优先:Hessian2(默认)
dubbo:
  provider:
    serialization: hessian2

5.3 连接管理

dubbo:
  consumer:
    connections: 1       # 对每个 Provider 的连接数
    actives: 0           # 并发限制(0=不限制)
    actives: 100         # 每服务每消费者最大并发

思考题

  1. Dubbo 3 为什么要从接口级注册改为应用级注册?解决了什么问题?
  2. Triple 协议为什么要基于 HTTP/2?相比 dubbo 协议的 TCP 长连接有什么优势和劣势?
  3. 在 Dubbo 中,超时(timeout)和重试(retries)应该怎么配合设置?设置不当会引发什么"雪崩"?
  4. Dubbo 的 Mock 功能(本地伪装)能解决什么问题?它在生产环境中有哪些实际用途?

下一步

  • 学习 Dubbo + Sentinel 实现限流熔断
  • 学习 Dubbo + Seata 实现分布式事务
  • 学习 Dubbo Mesh(Proxyless Service Mesh)

信息

路径
/tech-stacks/apache-dubbo/tutorial/Dubbo RPC 微服务治理入门.md
更新时间
2026/5/31