SpringCloud项目中Ribbon负载均衡策略调整

一、Ribbon简介

        在 Spring Cloud 中,Ribbon 是一个基于客户端的负载均衡器,它允许开发者在客户端配置负载均衡策略,而不需要依赖于服务器端的负载均衡器。Ribbon 提供了多种内置的负载均衡策略,可以通过简单的配置来切换和定制。

  •  具体策略

策略名称类名描述适用场景
轮询(Round Robin)com.netflix.loadbalancer.RoundRobinRule按照顺序轮流选择服务器。适用于服务器性能相近且网络条件稳定的情况。
随机(Random)com.netflix.loadbalancer.RandomRule随机选择服务器。适用于对服务器性能要求不高,且希望均匀分配流量的情况。
权重轮询(Weighted Response Time)com.netflix.loadbalancer.WeightResponseTimeRule根据服务器的响应时间动态调整权重,响应时间越短的服务器权重越高。适用于服务器性能差异较大,希望根据性能动态分配流量的情况。
最少连接数(Least Connections)com.netflix.loadbalancer.BestAvailableRule选择当前活动连接数最少的服务器。适用于处理长时间连接或资源消耗较大的请求,希望减少服务器压力的情况。
IP 哈希(IP Hash)com.netflix.loadbalancer.IPHashRule根据请求的 IP 地址进行哈希运算,将请求分配到固定的服务器上。适用于需要保持会话粘性,确保同一用户请求始终分配到同一服务器的情况。
可用性过滤器(Availability Filtering)com.netflix.loadbalancer.AvailabilityFilteringRule先过滤掉不可用的服务器,然后在剩下的服务器中选择一个。适用于网络环境不稳定或服务器可能出现故障的情况,确保只选择健康的服务器。
区域感知(Zone Awareness)com.netflix.loadbalancer.ZoneAvoidanceRule结合了可用性过滤和区域感知,优先选择同一区域内的服务器。适用于分布式部署的微服务架构,希望减少跨区域调用的延迟和成本。

二、调整方式

1.全局调整

在服务消费者的配置类中定义IRule实现

package cn.cds.order.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class IRuleConfiguration {
    @Bean
    public IRule randomRule(){
        //根据需要在此配置策略
        return new RandomRule();
    }
}

参数为1,4和2,3的同种请求被随机到了8081和8082端口

2.配置文件方式(针对某个微服务)

在服务消费者的配置文件(.yml或.properties)中配置策略

userservice: #服务的名称,表示配置是针对名为 userservice 的微服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则

我们将配置类中的@Bean注释掉,重启服务,可以看到本次依然通过随机策略将2,3,4和1分别随机给了两个端口

 三、Ribbon扩展:饥饿加载

我们重启服务在网页发起请求并抓取网络信息,可以看到第一次请求用时348ms是后续请求的数十倍,这其中有一重要原因即Ribbon默认采用懒加载

 在进行第一次访问时才会创建LoadBalanceClient,我们可以看到一开始的server stats为空,直到运行才开始拉取并缓存

 我们可以通过修改配置文件来将加载策略改为饥饿加载

ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients: #指定饥饿加载的服务名称
      - userservice
      #- xxsservice 多个服务这样写

 此时重启服务,直接就进行了userservice的拉取

 我们再在浏览器进行请求测试,可以看到请求时长有明显下降,至于为什么还远高于第二次请求,是因为第一次请求除了拉取LoadBalanceClient还要初始化其他内容。

好了,今天的分享到此结束,感谢观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值