Ribbon负载均衡策略介绍及自定义负载策略

本文介绍了Ribbon作为客户端负载均衡器,除了默认的轮询策略外,还支持其他策略。通过实现IRule接口,用户可以自定义负载均衡策略。文中展示了如何在SpringCloud中配置并使用自定义的负载策略,返回服务列表的第一个服务作为示例。
摘要由CSDN通过智能技术生成

        Ribbon作为一款客户端负载均衡框架,默认的负载策略是轮询,除轮询外,它还提供了其它策略,能够让用户根据自身业务需求进行选择。

    BestAvailableRule:选择一个最小的并发请求的Server,逐个考察Server,如果Server被标记为错误,则跳过,然后再选择ActiveRequestCount中最小的Server;
    AvailabilityFilteringRule:过滤掉那些一直连接失败的且被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤Server的逻辑。其实就是检查Status里记录的各个Server的运行状态;
    ZoneAvoidanceRule:使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个Server,前一个判断判定一个Zone的运行性能是否可用,剔除不可用的Zone,AvailabilityPredicate用于过滤掉连接数过多的Server;
    RandomRule:随机选择一个Server;
    RoundRobinRule:轮询查询,轮询index,选择index对应位置的Server;
    RetryRule:对选定的负载均衡策略机上重试机制,也就是说当选定了某个策略进行请求负载时,在一个配置的时间段内若选择的Server不成功,则一直尝试使用subRule的方式选择一个可用的Server;
    ResponseTimeWeightedRule:(WeightedResponseTimeRule)根据响应时间分配一个Weight(权重),响应时间越长,Weight越小,被选中的可能性越低。ResponseTimeWeightedRule后来被命名为WeightedResponseTimeRule

        通过实现IRule接口可以自定义负载策略,主要的选择服务逻辑在choose方法中。下面只演示怎么自定义负载策略,没写选择的逻辑,直接返回服务列表中第一个服务,代码如下:

import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;

import java.util.List;

/**
 * 自定义Ribbon负载均衡
 */
public class MyRule implements IRule {

    private ILoadBalancer lb;

    @Override
    public Server choose(Object key) {
        List<Server> servers = lb.getAllServers();
        for (Server server:servers){
            System.out.println(server.getHostPort());
        }
        return servers.get(0);
    }

    @Override
    public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
        this.lb = iLoadBalancer;
    }

    @Override
    public ILoadBalancer getLoadBalancer() {
        return lb;
    }
}

        在SpringCloud中,可通过配置的方式使用自定义的负载均衡。

smile-eureka-client:
  ribbon.NFLoadBalancerRuleClassName: com.smile.ribbonnativedemo.config.MyRule

其中,smile-eureka-client是要调用的服务名称,com.smile.ribbonnativedemo.config.MyRule是自定义负载均衡实现类的路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

one_smail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值