Ribbon是一套客户端负载工具
负载均衡(LB)
nginx实现负载均衡属于集中式LB,即在服务的消费方和提供方提供LB设施,当消费方发请求调提供方时,消费方的请求会先进入nginx,通过nginx转发分配到提供方集群
Ribbon属于进程内LB,消费方自己选择调用哪个提供方
之前的案例中通过80轮询负载访问8001、8002,拉取了eureka的依赖,新版的eureka依赖中已经集成了ribbon
ribbon等同于负载均衡+RestTemplate调用
负载均衡规则:
RoundRobinRule # 轮询
RandomRule # 随机
RetryRule # 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重
WeightedResponseTimeRule # 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
BestAvailableRule # 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
AvailabilityFilteringRule # 先过滤掉故障实例,再选择并发较小的实例
ZoneAvoidanceRule # 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
配置自定义负载均衡规则,案例:使80随机调用8001、8002
修改80订单模块,自定义的规则类不能放在@ComponentScan所扫描的当前包及其子包下;在当前项目中该注解在启动类上,规则类就不能放在启动类所在的包下,因此新建一个包myrule,然后编写自定义规则类
在启动类上添加注解,指定要调的提供者微服务和要使用的负载规则:@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)