Ribbon是什么?
-
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法
-
Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等。简单的说,就是在配置文件中列出后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等默认轮询的方式)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
- Ribbon提供负载均衡算法有如下几种:
负载均衡
负载均衡是网络压力,和缓解处理能力扩容的重要手段之一 负载均衡算法
负载均衡分为硬件负载均衡和软件负载均衡
硬件负载均衡:主要是在服务器端,服务器几个节点之间安装专门用于负载均衡的设备比如F5
软件负载均衡:比如Nginx
Ribbon是实现客户端负载均衡调用接口的方法
实现原理
维护了一个被@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); }; } } }