1.Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
2.Ribbon主要功能是提供客户端负载均衡算法和服务调用
3.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。
4.Ribbon会基于某种规则(如简单轮询,随机连接等)去连接指定服务
5.程序员很容易使用Ribbon的负载均衡算法实现负载均衡
6.一句话:Ribbon:负载均衡+RestTemplate调用
Ribbon目前进入维护模式,未来替换方案是Spring Cloud LoadBalancer
LB分类
1.集中式LB
即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
LB(Load Balance负载均衡)
2.进程内LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后再从这些地址中选择出一个合适的服务地址。
Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
实例-前面member-consumer轮询负载访问10000/10002
底层就是Ribbon默认的轮询负载算法
策略名 | 描述 |
BestAvailableRule | 选择一个最小的并发请求的server。。逐个考察Server,如果Server被tripped(跳闸)了,则忽略,再选择其中ActiveRequestsCount最小的server。 |
AvailabilityFilteringRule | 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤楨那些高并发的的后端server(active connections超过配置的阈值) |
WeightedResponseTimeRule | 根据响应时间分配一个weight,响应时间越长,weighti越小,被选中的可能性越低。 |
RetryRule | 对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server |
RoundRobinRule | 轮询index,选择index.对应位置的server |
RandomRule | 随机选择一个server。在index上随机,选择index对应位置的server |
ZoneAvoidanceRule | 复合判断server所在区域的性能和server的可用性选择server |
需求分析
1.需求:将默认的轮询算法改成随机算法RandomRule
2.浏览器输入:http://localhost/member/consumer/query/1
3.要求访问的10000/10002端口的服务是随机的
代码实现
因为是进程内LoadBalance,所以在consumer内配置即可:
可以在上表“策略名”中选择算法,返回即可。
@Configuration
public class RibbonRule {@Beanpublic IRule turnRule(){return new RandomRule();}
}
因为上面这个配置是全局配置,不配置到启动程序也可以使用。如果要配置,可以这样配置
@RibbonClient(name="MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class)
public class MemberConsumerApplication {
测试
浏览器地址栏输入:http://localhost/member/consumer/query/1 进行测试
通过不断刷新查看随机分配的provider
上一篇:ALSA学习(3)——声卡的创建
下一篇:贪心算法例题与讲解(1)