dubbo的负载均衡策略有哪些?如何配置

2 个回答

  • 张子陵
    你该反省的是你的见识与眼光,而不是你的真诚和善良。
    1. **随机(默认)**: - **策略**:随机选择一台服务提供者进行调用。 - **说明**:这种策略不会考虑服务提供者的负载和性能,只是简单的随机选择,因此在大多数情况下是比较均衡的。 ```yaml loadbalance: random ``` 2. **轮询**: - **策略**:按顺序轮询选择服务提供者。 - **说明**:按调用顺序依次选择不同的服务提供者,循环往复,能够较好地分摊请求到各个服务提供者。 ```yaml loadbalance: roundrobin ``` 3. **最少活跃调用数**: - **策略**:选择当前活跃调用数最少的服务提供者。 - **说明**:通过跟踪各个服务提供者的活跃调用数(即正在处理的请求数),选择其中最少的一个,以达到负载均衡的目的。 ```yaml loadbalance: leastactive ``` 4. **一致性哈希**: - **策略**:基于请求的一致性哈希算法选择服务提供者。 - **说明**:相同参数的请求总是发送到同一台服务提供者,适用于需要会话粘滞的场景。例如缓存等需要同一用户的请求落到同一台服务提供者上。 ```yaml loadbalance: consistenthash ``` ## 详细示例 ### 配置方式 可以在 Dubbo 的配置文件中设置全局的负载均衡策略,也可以在服务或方法级别上进行设置。 #### 全局配置 ```xml <dubbo:consumer loadbalance="leastactive" /> ``` #### 服务级别配置 ```xml <dubbo:service interface="com.example.DemoService" loadbalance="roundrobin" /> ``` #### 方法级别配置 ```xml <dubbo:reference interface="com.example.DemoService"> <dubbo:method name="sayHello" loadbalance="consistenthash" /> </dubbo:reference> ``` ### YAML 配置 在 Spring Boot 项目中使用 YAML 配置: ```yaml dubbo: consumer: loadbalance: leastactive references: demoService: interface: com.example.DemoService loadbalance: roundrobin methods: - name: sayHello loadbalance: consistenthash ``` 通过上述配置,你可以根据具体的应用场景和需求选择合适的负载均衡策略,以优化服务的性能和响应时间。
    发布于 2022-09-22 18:22 •IP属地 河南
    举报
    评论
    收藏

  • 董克平笔记
    垆边人似月,皓腕凝霜雪。
    ### 负载均衡策略LoadBalance 1. RandomLoadBalance:随机策略。按照概率设置权重,比较均匀,并且可以动态调节提供者的权重。 2. RoundRobinLoadBalance :轮询策略。轮询,按公约后的权重设置轮询比率。会存在执行比较慢的服务提供者堆积请求的情况,比如一个机器执行的非常慢,但是机器没有挂调用(如果挂了,那么当前机器会从Zookeeper的服务列表删除),当很多新的请求到达该机器后,由于之前的请求还没有处理完毕,会导致新的请求被堆积,久而久之,所有消费者调用这台机器上的请求都被阻塞。 3. LeastActiveLoadBalance:最少活跃调用数。如果每个提供者的活跃数相同,则随机选择一个。在每个服务提供者里面维护者一个活跃数计数器,用来记录当前同时处理请求的个数,也就是并发处理任务的个数。所以如果这个值越小说明当前服务提供者处理的速度很快或者当前机器的负载比较低,所以路由选择时候就选择该活跃度最小的机器。如果一个服务提供者处理速度很慢,由于堆积,那么同时处理的请求就比较多,也就是活跃调用数目越大,这也使得慢的提供者收到更少请求,因为越慢的提供者的活跃度越来越大。 4. ConsistentHashLoadBalance:一致性Hash策略。一致性Hash,可以保证相同参数的请求总是发到同一提供者,当某一台提供者挂了时,原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈变动。 ### 配置说明 方案配置方式,优先使用消费端配置 ``` <!--服务端配置--> <dubbo:service loadbalance="random"/> <!--消费端配置--> <dubbo:reference loadbalance="random"/> ``` #### 随机策略-RandomLoadBalance ``` <!-- weight:权重为5 --> <dubbo:service loadbalance="random" weight="5"/> ``` #### 轮询策略-RoundRobinLoadBalance ``` <!-- weight:权重为5 --> <dubbo:service loadbalance="roundrobin" weight="5"/> ``` #### 最少活跃调用数-LeastActiveLoadBalance ``` <!-- weight:权重为5 --> <dubbo:service loadbalance="leastactive" weight="5"/> ``` #### 一致性Hash策略-ConsistentHashLoadBalance ``` <!-- --> <dubbo:service loadbalance="consistenthash"/> ```
    编辑于 2022-03-03 18:04 •IP属地 福建
    举报
    评论
    收藏