Dubbo基础知识!

官网:https://cn.dubbo.apache.org/zh-cn/

搭建Dubbo源码环境

直接从官方仓库 https://github.com/apache/dubbo Fork 到自己的仓库。

1
git clone git@github.com:xxxxxxxx/dubbo.git 

然后切换分支,因为目前最新的是 Dubbo 3.2 版本。

1
git checkout -b dubbo-3.2 dubbo-3.2

执行 mvn 命令进行编译:

1
mvn clean install -Dmaven.test.skip=true 

执行下面的命令转换成 IDEA 项目:

1
mvn idea:idea // 要是执行报错,就执行这个 mvn idea:workspace 

在 IDEA 中导入源码,因为这个导入过程中会下载所需的依赖包,所以会耗费点时间。

通信协议

Dubbo协议:

  • 缺省协议,采用单一长连接和 NIO 异步通讯
    • 适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

负载均衡

Dubbo 提供了 几种 种负载均衡实现:

  • 随机负载均衡:RandomLoadBalance
    • 随机的选择一个,是Dubbo的默认负载均衡策略
  • 基于 Hash 一致性:ConsistentHashLoadBalance
    • 相同参数的请求总是落在同一台机器上
  • 基于权重随机算法:RandomLoadBalance
  • 基于最少活跃调用数算法:LeastActiveLoadBalance
    • 相同活跃数的随机
    • 活跃数指调用前后计数差,使慢的 Provider 收到更少请求
      • 因为越慢的 Provider 的调用前后计数差会越大
  • 基于加权轮询算法:RoundRobinLoadBalance
  • 基于最短响应时间:ShortestResponseLoadBalance

广播响应

对于一个Dubbo消费者,广播调用多个Dubbo提供者

  • 该消费者可以收集所有服务提供者的响应结果。

广播调用所有服务提供者,逐个调用,并且可以完整的返回所有服务提供者的执行结果(正确或异常)

  • 并将所有服务提供者的响应结果存于RpcContext

服务下线

Dubbo 服务消费端会使用 Zookeeper 里面的 Watch 来针对 Zookeeper 端的 /providers 节点注册监听。

  • 一旦这个节点下的子节点发生变化,Zookeeper 就会发送一个事件通知 Dubbo Client 端。

Dubbo Client 端收到事件以后,就会把本地缓存的这个服务地址删除,完成服务下线。