Dubbo 入门教程之三
大纲
前言
学习资源
Dubbo 核心功能
学习方法
学习内容
- 基于接口代理、注册中心、负载均衡策略、容错机制、Dubbo 协议
学习方法
接口代理
:Dubbo 的接口代理是如何实现的?注册中心
:Dubbo 在 Zookeeper 上面干了什么?负载均衡
:阅读官方文档、负载均衡策略配置使用、对应的源码混个脸熟容错机制
:阅读官方文档、容错机制配置使用、对应的源码混个脸熟Dubbo 协议
:阅读官方文档、模拟 Dubbo 客户端按照报文发送序列化数据
核心功能
接口代理
- Dubbo 的底层源码
- Dubbo 基于接口的代理实现
ReferenceConfig.get()
->ReferenceConfig.init()
->ReferenceConfig.createProxy()
->StubProxyFactoryWrapper.getProxy()
->JavassistProxyFactory.getProxy()
->DubboInvoker.doInvoke()
- Nettty 在远程过程调用的应用
NettyClient.doOpen()
->NettyClientHandler
NettyServer.doOpen()
->NettyHandler
- Dubbo 基于接口的代理实现
注册中心
Dubbo 的底层源码
- 将服务注册到 ZooKeeper
ZookeeperRegistry.doRegister()
- 从 ZooKeeper 订阅服务
ZookeeperRegistry.doSubscribe()
- 将服务注册到 ZooKeeper
Dubbo 在 ZooKeeper 中的存储结构
- 查看 ZooKeeper 的节点信息(Root)
1 | [zk: localhost:2181(CONNECTED) 7] ls /dubbo |
- 查看 ZooKeeper 的节点信息(Service)
1 | [zk: localhost:2181(CONNECTED) 9] ls /dubbo/com.clay.dubbo.service.DemoService |
- 查看 ZooKeeper 的节点信息(Type)
1 | [zk: localhost:2181(CONNECTED) 10] ls /dubbo/com.clay.dubbo.service.DemoService/providers |
将上述的 Provider 信息进行 URL 解码后,得到的内容如下:
1 | [dubbo://127.0.0.1:20880/com.clay.dubbo.service.DemoService?anyhost=true&application=dubbo-provider-application&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.clay.dubbo.service.DemoService&methods=sayHello&pid=24895&release=2.7.6&side=provider×tamp=1735287128612] |
负载均衡
Dubbo 提供了五种负载均衡策略,如下所示:
负载均衡策略 | 说明 | 适用场景 |
---|---|---|
RandomLoadBalance | 随机(默认策略),支持按权重设置随机概率 | 适用于请求量分散、服务性能相近的场景,能保证简单有效的负载均衡效果 |
RoundRobinLoadBalance | 轮询,支持按公约后的权重设置轮询比率 | 适用于服务节点性能相近、需要保证调用次数均匀的场景 |
LeastActiveLoadBalance | 最少活跃调用数,支持相同活跃数的权重随机 | 适用于服务性能差异较大或请求响应时间差异较大的场景,能提高请求分配效率 |
ConsistentHashLoadBalance | 一致性哈希,相同参数的请求总是发送到同一个服务提供者 | 适用于需要保证请求一致性的场景,例如:缓存服务或用户会话粘性 |
ShortestResponseLoadBalance | 最短响应时间优先,选择响应时间最短的服务提供者 | 适用于请求响应时间差异较大,且希望优先使用低延迟服务节点的场景 |