Ribbon是什么?

  • Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法

  • Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等。简单的说,就是在配置文件中列出后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等默认轮询的方式)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

  • Ribbon提供负载均衡算法有如下几种:

Spring Cloud核心组件:Ribbon,Feign

 

 

负载均衡

负载均衡是网络压力,和缓解处理能力扩容的重要手段之一 负载均衡算法

负载均衡分为硬件负载均衡和软件负载均衡
硬件负载均衡:主要是在服务器端,服务器几个节点之间安装专门用于负载均衡的设备比如F5
软件负载均衡:比如Nginx 

Ribbon是实现客户端负载均衡调用接口的方法

 

Spring Cloud核心组件:Ribbon,Feign

 

 实现原理

维护了一个被@LoadBalanced注解注释的RestTemplate对象列表,并在LoadBalancerAutoConfiguration
进行初始化,通过调用RestTemplateCustomizer 的实例来给需要客户端负载均衡的RestTemplate增加
LoadBalancerInterceptor 拦截器。 通过线性负载均衡规则

具体的负载均衡算法可以参考 AbstractLoadBalancerRule 实现类

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnClass({RestTemplate.class})
@ConditionalOnBean({LoadBalancerClient.class})
@EnableConfigurationProperties({LoadBalancerProperties.class})
public class LoadBalancerAutoConfiguration {

  @Configuration(
        proxyBeanMethods = false
    )
    @Conditional({LoadBalancerAutoConfiguration.RetryMissingOrDisabledCondition.class})
    static class LoadBalancerInterceptorConfig {
        LoadBalancerInterceptorConfig() {
        }

        @Bean
        public LoadBalancerInterceptor loadBalancerInterceptor(LoadBalancerClient loadBalancerClient, LoadBalancerRequestFactory requestFactory) {
            return new LoadBalancerInterceptor(loadBalancerClient, requestFactory);
        }

        @Bean
        @ConditionalOnMissingBean
        public RestTemplateCustomizer restTemplateCustomizer(final LoadBalancerInterceptor loadBalancerInterceptor) {
            return (restTemplate) -> {
                List<ClientHttpRequestInterceptor> list = new ArrayList(restTemplate.getInterceptors());
           //restTemplate 添加拦截器
                list.add(loadBalancerInterceptor);
                restTemplate.setInterceptors(list);
            };
        }
    }
}
LoadBalancerAutoConfiguration

相关文章: