Dubbo基础知识!
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 端收到事件以后,就会把本地缓存的这个服务地址删除,完成服务下线。