Dubbo概述
Apache Dubbo 是一个高性能 Java RPC 框架,核心用于分布式服务治理,解决服务间调用、负载均衡、容错、注册发现等问题。
本质定位:
- RPC框架(远程调用)
- 服务治理框架(微服务基础设施)
- 高性能通信框架(基于Netty等)
1.Dubbo 核心能力
| 能力 | 说明 |
|---|---|
| 服务注册与发现 | 动态服务上下线 |
| 负载均衡 | 多策略(随机、轮询、一致性哈希) |
| 容错机制 | Failover、Failfast、Failsafe 等 |
| 动态配置 | 无需重启调整 |
| 服务降级 | fallback、mock |
| 高性能通信 | NIO + 长连接 |
2. Dubbo 架构详解
2.1 总体架构模型

2.2 五大核心角色
| 角色 | 说明 |
|---|---|
| Provider | 服务提供者 |
| Consumer | 服务消费者 |
| Registry | 注册中心 |
| Monitor | 监控中心 |
| Container | 运行容器(Spring等) |
2.3 架构分层
Dubbo 采用分层架构设计(非常关键)
flowchart TB
A[Service接口层] --> B[Config配置层]
B --> C[Proxy代理层]
C --> D[Registry注册中心层]
C --> E[Cluster集群容错层]
E --> F[LoadBalance负载均衡]
E --> G[Router路由]
E --> H[Directory目录]
C --> I[Protocol协议层]
I --> J[Exchange信息交换层]
J --> K[Transport网络传输层]
K --> L[Netty通信实现]
3. Dubbo 执行流程(核心重点)
3.1 服务启动流程(Provider)
sequenceDiagram
participant Provider
participant Registry
Provider->>Registry: 注册服务地址
Provider->>Provider: 启动服务监听端口
关键点:
- 暴露接口
- 注册到注册中心
- 启动Netty监听端口
3.2 服务引用流程(Consumer)
sequenceDiagram
participant Consumer
participant Registry
Consumer->>Registry: 订阅服务
Registry-->>Consumer: 返回Provider列表
Consumer->>Consumer: 本地缓存服务列表
关键点:
- 本地缓存(避免频繁访问注册中心)
- 支持动态更新(Watcher机制)
3.3 RPC调用完整流程(重点)
sequenceDiagram
participant Consumer
participant Proxy
participant Cluster
participant Provider
participant Netty
Consumer->>Proxy: 调用本地接口
Proxy->>Cluster: 发起远程调用
Cluster->>Cluster: 负载均衡选择Provider
Cluster->>Netty: 发送请求
Netty->>Provider: 网络传输
Provider->>Provider: 执行业务逻辑
Provider-->>Netty: 返回结果
Netty-->>Cluster: 响应
Cluster-->>Proxy: 返回结果
Proxy-->>Consumer: 返回调用结果
4. 调用链核心机制拆解
4.1 负载均衡策略
| 策略 | 特点 |
|---|---|
| Random | 默认,权重随机 |
| RoundRobin | 轮询 |
| LeastActive | 最少活跃调用 |
| ConsistentHash | 一致性哈希 |
4.2 集群容错模式
| 模式 | 说明 |
|---|---|
| Failover | 失败自动重试(默认) |
| Failfast | 失败立即报错 |
| Failsafe | 忽略异常 |
| Failback | 失败后异步重试 |
| Forking | 并行调用多个 |
4.3 Directory(目录服务)
核心作用:
- 维护 Provider 列表
- 动态更新
- 提供路由过滤