转载

spring Cloud负载均衡Ribbon

Ribbon饥饿加载

默认情况下Ribbon是懒加载的。当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多。

解决方式:开启饥饿加载

ribbon:

eager-load:

enabled: true #开启饥饿加载

clients: server-1,server-2,server-3 #为哪些服务的名称开启饥饿加载,多个用逗号分隔

Ribbon负载均衡的八种算法,其中 ResponseTimeWeightedRule 已废除

规则名称 特点
AvailabilityFilteringRule 过滤掉一直连接失败的被标记为circuit tripped(电路跳闸)的后端Service,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤Server的逻辑,其实就是检查status的记录的各个Server的运行状态
BestAvailableRule 选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过
RandomRule 随机选择一个Server
ResponseTimeWeightedRule 已废弃,作用同WeightedResponseTimeRule
RetryRule 对选定的负责均衡策略机上充值机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的Server
RoundRobinRule 轮询选择,轮询index,选择index对应位置Server
WeightedResponseTimeRule 根据相应时间加权,相应时间越长,权重越小,被选中的可能性越低
ZoneAvoidanceRule (默认是这个)负责判断Server所Zone的性能和Server的可用性选择Server,在没有Zone的环境下,类似于轮询( RoundRobinRule

java文件配置Ribbon负载均衡规则:

package com.springcloud.demo.client.config;

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

/**
 * @Author: yzp
 * @Date: 2020-6-5 9:33
 * @description
 */
@Configuration
public class RibbonConfig {

    /**
     * @return 负载均衡规则
     */
    @Bean
    public IRule iRule() {
        return new RandomRule();
    }

}

配置文件配置Ribbon负载均衡规则:

# 服务名称 Service-ID
demo-user:
ribbon:
# 属性配置方式【推荐】配置文件配置负载均衡算法-这里使用的是自定义的Ribbon的负载均衡算法,默认
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

配置属性方式

<clientName>:

ribbon:

NFLoadBalancerClassName: #ILoadBalancer该接口实现类

NFLoadBalancerRuleClassName: #IRule该接口实现类

NFLoadBalancerPingClassName: #Iping该接口实现类

NIWSServerListClassName: #ServerList该接口实现类

NIWSServerListFilterClassName: #ServiceListFilter该接口实现类

在这些属性中定义的类优先于使用 @RibbonClient(configuration=RibbonConfig.class) Spring 定义的bean 以及由Spring Cloud Netflix提供的默认值。描述:配置文件中定义ribbon优先代码定义

配置方式 优点 缺点
代码配置 基于代码,更加灵活 有坑(父子上下文)
线上修改得重新打包,发布
属性配置 易上手 配置更加直观
线上修改无需重新打包,发布 
优先级更高
极端场景下没有配置配置方式灵活

实现负载均衡<全局>配置-随机

方式一:Ribbon的配置类定义在主类下

让ComponentScan上下文重叠( 强烈不建议使用

方式二:

@Configuration
@RibbonClients(defaultConfiguration = RibbonConfig.class)//Ribbon负载均衡全局粒度配置(所有服务都按照这个配置)
public class RibbonConfig {
}
原文  http://www.cnblogs.com/yuanzipeng/p/13048039.html
正文到此结束
Loading...