|
|
@ -1 +1,42 @@
|
|
|
|
努力编写中...
|
|
|
|
## Dubbo 负载均衡简介
|
|
|
|
|
|
|
|
负载均衡,无论在常用的中间件 及 框架中,还是现实生活中,都有所体现。比如,一个团队干活,老大肯定要尽可能把任务均匀合理地分下去,让整个团队能高速运转,能力强的多分点,能力弱的少分点,绝对不能去逮着一个人 让他累到死,让其它人闲着。这样的均匀分配任务及压力的思想 放在开发领域 即是“负载均衡”。它就相当于是一个压力均衡机制,通过各种策略,为集群中的每台服务器合理地分配压力,这样 即能提升整个集群的运行效率,又能尽量避免 某个节点因为压力过大而宕机。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在 Dubbo 中也需要负载均衡机制,将消费者的请求 合理分配到服务提供者集群的各个节点上,以提升集群的整体运行效率 和 避免单个节点压力过大而宕机的问题。Dubbo 提供了4种负载均衡实现,缺省为 RandomLoadBalance 加权随机调用,如下。
|
|
|
|
|
|
|
|
- RandomLoadBalance:加权随机算法,按权重设置随机概率;
|
|
|
|
|
|
|
|
- RoundRobinLoadBalance:加权轮询算法,按公约后的权重设置轮询比率;
|
|
|
|
|
|
|
|
- LeastActiveLoadBalance:最少响应时间算法,使快速响应的服务提供者 接收更多请求,慢的提供者收到更少请求;
|
|
|
|
|
|
|
|
- ConsistentHashLoadBalance:一致性hash算法,相同参数的请求总是发到同一提供者。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 源码赏析
|
|
|
|
|
|
|
|
### LoadBalance接口 和 AbstractLoadBalance
|
|
|
|
|
|
|
|
AbstractLoadBalance 实现了 LoadBalance接口,是负载均衡的抽象类,提供了权重计算的功能。
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### RandomLoadBalance
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### RoundRobinLoadBalance
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### LeastActiveLoadBalance
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### ConsistentHashLoadBalance
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|