Dubbo 架构与原理

某团队从 Spring Cloud 迁移到 Dubbo 3.0 后,服务吞吐量从 5000 TPS 提升到 20000 TPS。

迁移的原因:

  1. Dubbo 3.0 引入了应用级服务发现,比 Spring Cloud 的接口级发现更轻量
  2. Triple 协议(兼容 gRPC)比 HTTP/2 性能更高
  3. Dubbo 的 RPC 序列化性能比 Spring Cloud 的 JSON 好

这是 Dubbo 在高性能场景下的典型优势。

【架构权衡】 Dubbo 和 Spring Cloud 是两种不同的微服务框架。Dubbo 更专注于 RPC,性能高;Spring Cloud 更注重生态,组件全。选择哪种,取决于业务对"性能"和"生态"的权衡。


一、核心问题 🔴

1.1 Dubbo 核心架构

┌─────────────────────────────────────────────────────────────────┐
│                        Dubbo 核心架构                             │
│                                                                  │
│  ┌─────────────┐                                               │
│  │   Consumer   │  ← 服务消费者                                │
│  │  调用方      │                                               │
│  └──────┬──────┘                                               │
│         │                                                        │
│         │ 1. 注册/订阅                                           │
│         ▼                                                        │
│  ┌─────────────┐                                               │
│  │ Registry    │  ← 注册中心(ZooKeeper / Nacos)               │
│  │ 注册中心    │                                               │
│  └──────┬──────┘                                               │
│         │ 2. 通知                                               │
│         ▼                                                        │
│  ┌─────────────┐                                               │
│  │  Monitor    │  ← 监控中心                                     │
│  │  监控      │                                               │
│  └─────────────┘                                               │
│         │                                                        │
│         │ 3. 调用                                               │
│         ▼                                                        │
│  ┌─────────────┐                                               │
│  │  Provider   │  ← 服务提供者                                   │
│  │  提供方     │                                               │
│  └─────────────┘                                               │
└─────────────────────────────────────────────────────────────────┘

1.2 Dubbo 调用流程

Dubbo 调用流程:

1. 服务启动
   └─ Provider 向注册中心注册服务
   └─ 注册中心记录 Provider 地址

2. 服务订阅
   └─ Consumer 向注册中心订阅服务
   └─ 注册中心推送 Provider 地址列表给 Consumer

3. 负载均衡
   └─ Consumer 根据负载均衡策略选择 Provider

4. RPC 调用
   └─ Consumer 调用 Provider
   └─ Provider 返回结果

5. 监控统计
   └─ Consumer 和 Provider 向 Monitor 上报调用统计

二、方案实现

2.1 服务注册与发现

// Dubbo 3.0 应用级服务发现
@Service(application = "order-service", version = "1.0.0")
public class OrderServiceImpl implements OrderService {

    @Override
    public Order createOrder(OrderRequest request) {
        // 业务逻辑
        return order;
    }
}

// 配置文件
dubbo:
  application:
    name: order-service
  registry:
    address: nacos://192.168.1.100:8848
    group: dubbo
  protocol:
    name: dubbo
    port: 20880

2.2 核心配置

dubbo:
  # 应用配置
  application:
    name: order-service
    qos-enable: true
    qos-port: 22222

  # 注册中心
  registry:
    address: nacos://192.168.1.100:8848
    group: dubbo
    register-mode: instance  # 应用级注册(Dubbo 3.0+)

  # 协议配置
  protocol:
    name: dubbo
    port: 20880
    threads: 200
    iothreads: 16
    queues: 0

  # 负载均衡
  provider:
    loadbalance: roundrobin  # 负载均衡策略

  # 超时配置
  consumer:
    timeout: 3000
    retries: 2

【架构权衡】 Dubbo 3.0 的核心改进是"应用级服务发现":不再以接口维度注册,而是以应用维度注册。这大大减少了注册中心的数据量,提升了服务发现的速度。

三、Dubbo vs Spring Cloud

对比维度DubboSpring Cloud
定位RPC 框架微服务生态
协议Dubbo/REST/gRPCHTTP/REST
序列化Hessian/Dubbo/KryoJSON/Kryo
性能
生态专注 RPC全家桶
服务发现应用级/接口级接口级
配置中心Nacos/ZooKeeperSpring Cloud Config
网关需要自选Spring Cloud Gateway

四、落地 Checklist

  • 注册中心:配置 ZooKeeper / Nacos
  • 协议选择:选择 Dubbo / Triple 协议
  • 序列化:选择合适的序列化方式
  • 负载均衡:配置负载均衡策略
  • 监控部署:部署 Dubbo Monitor