Java基础之《微服务(4)—负载均衡ribbon》
一、什么是ribbon
1、ribbon介绍 (1)ribbon是一个基于http和tcp的客户端负载均衡工具,它是基于Netflix Ribbon实现的。 (2)它不像springcloud服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个springcloud微服务中。包括feign提供的声明式服务调用也是基于该ribbon实现的。 (3)ribbon默认提供很多种负载均衡算法,例如轮询、随机等等。甚至包括自定义的负载均衡算法。 (4)他解决并提供了微服务的负载均衡的问题。
3、ribbon的架构图 集中式负载均衡:
进程内负载均衡:
二、负载均衡策略
1、轮询策略(默认)(RoundRobinRule)RoundRobinRule 轮询策略表示每次都顺序取下一个provider,比如一共有5个provider,第1次取第1个,第2次取第2个,以此类推。
2、权重轮询策略—WeightedResponseTimeRule (1)根据每个provider的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越低。 (2)原理:一开始为轮询策略,并开启一个计时器,每30秒收集一次每个provider的平均响应时间,当信息足够时,给每个provider附上一个权重,并按权重随机选择provider权重越高的provider会被高概率选中。
3、随机策略(RandomRule) 从provider列表中随机选择一个provider。
4、最少并发数策略(BestAvailableRule) 选择正在请求中的并发数最小的provider,除非这个provider在熔断中。
5、在“选定的负载均衡策略”基础上进行重试机制(RetryRule) (1)“选定的负载均衡策略”这个策略是轮询策略RoundRobinRule。 (2)该重试策略先设定一个阈值时间段,如果在这个阈值时间段内当选择provider不成功,则一直尝试采用“选定的负载均衡策略:轮询策略”最后选择一个可用的provider。A失败了会去重试B。
6、可用性敏感策略(AvailabilityFilteringRule) 过滤性能差的provider,有两种: 第一种,过滤掉在erueka中一直处于连接失败的provider 第二种,过滤掉高并发的provider
7、区域敏感性策略(ZoneAvoidanceRule) (1)以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的provider。 (2)如果这个ip区域内有一个或多个实例不可达或响应变慢,都会降低该ip区域内其他ip被选中的权重。
8、代码设置负载均衡策略 在springboot启动类中添加:
@Bean public IRule ribbonRule() { return new RandomRule(); }
9、配置文件设置负载均衡策略
#设置负载均衡策略 provider-NAME.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
三、点对点直连,开发调试ribbon
1、剔除eureka 2、加入ribbon依赖包 3、修改配置文件
#禁用eureka ribbon.eureka.enabled=false #指定具体的服务实例清单 provider-NAME.ribbon.listOfServers=192.168.10.61:8081