From ffb727bbf2ad03b480dcb98f16ea465a9ce16cfb Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 17 Sep 2020 09:36:14 +0800 Subject: [PATCH] feat: update dubbo-load-balancing --- .../dubbo-load-balancing.md | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/distributed-system/dubbo-load-balancing.md b/docs/distributed-system/dubbo-load-balancing.md index a5dc3ed..de98c56 100644 --- a/docs/distributed-system/dubbo-load-balancing.md +++ b/docs/distributed-system/dubbo-load-balancing.md @@ -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 ``` 或者 -``` xml +```xml ``` 或者 -``` xml +```xml @@ -82,13 +85,13 @@ dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略 配置示例如下: -``` xml +```xml ``` 或者 -``` xml +```xml ```