feat: update dubbo-load-balancing

This commit is contained in:
yanglbme 2020-09-17 09:36:14 +08:00
parent a38ffd0ccd
commit ffb727bbf2

View File

@ -1,4 +1,5 @@
## 面试题
dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
## 面试官心理分析
@ -7,10 +8,10 @@ dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略
说白了,就是看你对 dubbo 熟悉不熟悉:
* dubbo 工作原理:服务注册、注册中心、消费者、代理通信、负载均衡;
* 网络通信、序列化dubbo 协议、长连接、NIO、hessian 序列化协议;
* 负载均衡策略、集群容错策略、动态代理策略dubbo 跑起来的时候一些功能是如何运转的?怎么做负载均衡?怎么做集群容错?怎么生成动态代理?
* dubbo SPI 机制:你了解不了解 dubbo 的 SPI 机制?如何基于 SPI 机制对 dubbo 进行扩展?
- dubbo 工作原理:服务注册、注册中心、消费者、代理通信、负载均衡;
- 网络通信、序列化dubbo 协议、长连接、NIO、hessian 序列化协议;
- 负载均衡策略、集群容错策略、动态代理策略dubbo 跑起来的时候一些功能是如何运转的?怎么做负载均衡?怎么做集群容错?怎么生成动态代理?
- dubbo SPI 机制:你了解不了解 dubbo 的 SPI 机制?如何基于 SPI 机制对 dubbo 进行扩展?
## 面试题剖析
@ -20,6 +21,8 @@ dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略
默认情况下dubbo 是 RandomLoadBalance ,即**随机**调用实现负载均衡,可以对 provider 不同实例**设置不同的权重**,会按照权重来负载均衡,权重越大分配流量越高,一般就用这个默认的就可以了。
算法思想很简单。假设有一组服务器 servers = `[A, B, C]`,他们对应的权重为 weights = `[5, 3, 2]`,权重总和为 10。现在把这些权重值平铺在一维坐标值上`[0, 5)` 区间属于服务器 A`[5, 8)` 区间属于服务器 B`[8, 10)` 区间属于服务器 C。接下来通过随机数生成器生成一个范围在 `[0, 10)` 之间的随机数,然后计算这个随机数会落到哪个区间上。比如数字 3 会落到服务器 A 对应的区间上,此时返回服务器 A 即可。权重越大的机器,在坐标轴上对应的区间范围就越大,因此随机数生成器生成的数字就会有更大的概率落到此区间内。只要随机数生成器产生的随机数分布性很好,在经过多次选择后,每个服务器被选中的次数比例接近其权重比例。比如,经过一万次选择后,服务器 A 被选中的次数大约为 5000 次,服务器 B 被选中的次数约为 3000 次,服务器 C 被选中的次数约为 2000 次。
#### RoundRobinLoadBalance
这个的话默认就是均匀地将流量打到各个机器上去,但是如果各个机器的性能不一样,容易导致性能差的机器负载过高。所以此时需要调整权重,让性能差的机器承载权重小一些,流量少一些。
@ -54,19 +57,19 @@ dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略
可以通过以下几种方式配置重试次数:
``` xml
```xml
<dubbo:service retries="2" />
```
或者
``` xml
```xml
<dubbo:reference retries="2" />
```
或者
``` xml
```xml
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
@ -82,13 +85,13 @@ dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略
配置示例如下:
``` xml
```xml
<dubbo:service cluster="failsafe" />
```
或者
``` xml
```xml
<dubbo:reference cluster="failsafe" />
```