Ribbon其实就是一个软负载均衡的客户端组件。
二:负载均衡(LB)是什么?
用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)
三:负载均衡分类?
- 集中式 LB :在服务的消费方和提供方之间使用独立的LB设施,如Nginx
- 进程内 LB:消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。例如Ribbon
四:Ribbon是如何通过一个@LoadBalanced注解就实现负载均衡的
- 在创建RestTemplate的bean时添加@LoadBalanced注解
- LoadBalancerAutoConfiguration自动配置筛选出添加@LoadBalanced注解的RestTemplate
- 为RestTemplate设置LoadBalancerInterceptor,目的是使用LoadBalancerClient来发起请求
- 请求过程中,根据负载均衡策略,调用LoadBalancerClient.choose()方法获取最终ServiceInstance
- 根据ServiceInstance获取真实host、port,发起最后请求
五:Ribbon有哪些负载均衡策略?
- 轮询策略
- 重试策略:先按照轮询的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
- 随机策略
- 最低并发策略:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
- 可用过滤策略:先过滤掉故障实例,再选择并发较小的实例
- 响应时间加权重策:响应速度越快的实例选择权重越大,越容易被选择
- 区域权重策略:复合判断server所在区域的性能和server的可用性选择服务器
六:如何修改Ribbon的负载均衡策略?
-
在配置类中配置IRule
表示,访问CLOUD_pAYMENT_SERVICE的服务时,使用我们自定义的负载均衡算法
-
在application.yml配置文件中配置
user-service:
ribbon:
NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡则则
这两种配置方式有什么不同?
(1)配置类方式是全局生效的,意思是只要是 order-service 服务采用 Ribbon 进行的负载均衡调用都是使用的自定义负载均衡策略。
(2)yml 配置的方式是局部生效的,意思是在 order-service 服务采用 Ribbon 进行负载均衡的时候,只有请求 user-service 服务的请求是使用的自定义负载均衡策略。
七:如何自定义负载均衡策略?