微服务必不可少的负载组建Ribbon

负载介绍

负载均衡白话解释:售票厅的售票窗口,就是很好的例子,买票的人(请求)多了就多开几个窗口(服务),买票人会随机(随机负载算法)到一个窗口排队。

负载分两种:

  • 客户端负载:服务列表存储在客户端,好比买票的人心里都知道有几个窗口在卖票,自己选择去哪边排队,Ribbon属于这种
  • 服务端负载:服务列表存储在服务端,好比黄牛票,买票的人不知道几个窗口买票,所以都找黄牛,但是黄牛知道有多少窗口,他自己去排队,Nginx属于这种

添加依赖

在引入openfeign时,会同时引入ribbon,所以不用单独引入。
在这里插入图片描述
这里提示重复,是因为在nacos/discovery中也引入了ribbon组建。

LoadBalancerClient 主要接口介绍

public interface ServiceInstanceChooser {
	// 根据serviceId和负载策略,在服务列表中选择一个可用的服务实例
	ServiceInstance choose(String serviceId);
}

public interface LoadBalancerClient extends ServiceInstanceChooser {
	// 执行服务调用
	<T> T execute(String serviceId, LoadBalancerRequest<T> request) throws IOException;
	// 执行服务调用
	<T> T execute(String serviceId, ServiceInstance serviceInstance,
			LoadBalancerRequest<T> request) throws IOException;
	// 根据服务实例解析真实的URI
	URI reconstructURI(ServiceInstance instance, URI original);
}

LoadBalancerAutoConfiguration 自动配置类

自动配置类主要干了这么几件事:

  • 创建一个LoadBalancerAutoConfigurationbean,用于拦截对外请求,然后执行负载流程
  • @LoadBalanced标注的RestTemplate保存到一个列表中
  • 创建一个RestTemplateCustomizerbean,给上面列表中的RestTemplate添加拦截器LoadBalancerAutoConfiguration

自动配置就是把添加了负载的RestTemplate保存下来,并添加拦截器,每次对外请求(Ribbon是客户端负载组建)都会被拦截器拦截住,施加负载策略,然后再真正执行服务调用。

修改负载策略

因为Ribbon是客户端负载,所以要把策略IRule配置在请求发起端,即客户端。

@Configuration
public class ProxyConfig {
    @Bean
    IRule iRule(){
        return  new RandomRule();
    }
}
Ribbon中的7中负载均衡算法:

(1)RoundRobinRule:轮询;

(2)RandomRule:随机;

(3)AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;

(4)WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越大。刚启动时如果统计信息不足,则使用RoundRobinRule(轮询)策略,等统计信息足够,会切换到WeightedResponseTimeRule;

(5)RetryRule:先按照RoundRobinRule(轮询)策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务;

(6)BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;

(7)ZoneAvoidanceRule:复合判断Server所在区域的性能和Server的可用性选择服务器,在没有Zone的情况下是类似轮询的算法;

扩展阅读

https://www.jianshu.com/p/1bd66db5dc46

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值