springCloud--Ribbon

是什么?在哪里用?

是netflix发布,提供客户端的软件负载均衡算法和服务调用

和NGINX不同,NGINX是服务端负载均衡,请求到达NGINX之后,NGINX实现转发。

原理?

在调用微服务接口时候,会在注册中心获取注册列表,缓存到jvm本地,从而在本地实现RPC远程服务调用技术。比如消费者负载均衡,去调用生产者的所有微服务。

执行步骤:1.优先选择在同一个区域内负载较少的server2.根据用户的策略,在注册列表中选择一个地址。

总共的策略,以及每个策略的意思?

策略名策略声明策略描述实现说明
RandomRulepublic class RandomRule extends AbstractLoadBalancerRule随机选择一个server在index上随机,选择index对应位置的server
RoundRobinRulepublic class RoundRobinRule extends AbstractLoadBalancerRuleroundRobin方式轮询选择server轮询index,选择index对应位置的server
RetryRulepublic class RetryRule extends AbstractLoadBalancerRule对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
WeightedResponseTimeRulepublic class WeightedResponseTimeRule extends RoundRobinRule根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成status时,使用roubine策略选择server。
BestAvailableRule     public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule选择一个最小的并发请求的server 选择一个最小的并发请求的server    逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server
AvailabilityFilteringRule         public class AvailabilityFilteringRule extends PredicateBasedRule  过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态
ZoneAvoidanceRule         public class ZoneAvoidanceRule extends PredicateBasedRule  默认规则,复合判断server所在区域的性能和server的可用性选择server使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。

怎么使用?

需要注意的点。

 pom文件:和eureka-client包含了ribbon的包。

配置文件:

主启动类:@EnableEurekaClient

业务类:在调用生产者的路径的方法或者类上用@loadbalanced

------------------------------------------------------------------负载规则替换

方式 1.在@ComponetScan(一般指的是main函数当中的@SpringbootApplication中包含了扫描)所扫描的当前包外,写一个类,

@Configuration

MyRule{

@Bean

MyRule(){}

}

2.主启动类

加@RibbonClient(name="对应服务名",configuration="MyselfRule.class")

方式2

    @Configuration
    @AvoidScan
    public class MyConfiguration{
        @Bean
        public IRule ribbonRule(){
        return new RandomRule();
        }
    }
/*在启动类里面加上如下的注解即可完成针对具体的服务源使用不同的负载均衡策略,使用@AvoidScan注解告诉Spring容器不要去扫描该注解,具体的服务源是使用特定的配置指定特定负载均衡的策略。*/
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@RibbonClient(name = "ribbon-client",configuration = MyConfiguration.class)
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = AvoidScan.class)})
public class RibbonBalancerApplication {
    //定义一个负载均衡的RestTemplate
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
 
    public static void main(String[] args) {
        SpringApplication.run(RibbonBalancerApplication.class,args);
    }
}
//复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值