Dubbo概述

Apache Dubbo 是一个高性能 Java RPC 框架,核心用于分布式服务治理,解决服务间调用、负载均衡、容错、注册发现等问题。

本质定位:

  • RPC框架(远程调用)
  • 服务治理框架(微服务基础设施)
  • 高性能通信框架(基于Netty等)

1.Dubbo 核心能力

能力 说明
服务注册与发现 动态服务上下线
负载均衡 多策略(随机、轮询、一致性哈希)
容错机制 Failover、Failfast、Failsafe 等
动态配置 无需重启调整
服务降级 fallback、mock
高性能通信 NIO + 长连接

2. Dubbo 架构详解

2.1 总体架构模型

685007ca64f4e3c8a7ee5e0ac488e213.png


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 列表
  • 动态更新
  • 提供路由过滤