Spring Cloud Ribbon面试题大全
目录
文档索引
面试题汇总
Q:Ribbon的总体流程?
Q:Ribbon如何选择调用哪个实例?
Q:服务列表的获取过程?
Q:Ribbon如何避免调用失效实例?
Q:Ribbon有哪些负载均衡策略?
文档索引
面试题汇总
Q:Ribbon的总体流程?
A: 针对被@LoadBalanced修饰的RestTemplate,给该RestTemplate增加LoadBalancerInterceptor拦截器,从而实现对负载均衡器的调用。负载均衡器通过服务名获取过滤后的服务列表,通过负载均衡算法获取其中某台实例,并进行调用
Q:Ribbon如何选择调用哪个实例?
A:
1、获取服务列表:为了减少服务的延迟,客户端会通过eureka.instance.metadata-map.zone指定的zone对服务列表进行过滤
2、负载均衡:通过负载均衡策略从服务列表中获得其中一台,默认是RoundRobinRule轮询策略,再对服务端进行调用
Q:服务列表的获取过程?
A:
1、服务列表默认是基于服务发现的,在应用启动时Ribbon就会从Eureka服务器中获取所有注册服务的列表数据,并保持同步。也可以通过动态设置的方式在配置文件中进行指定
2、通过ServerListFilter对服务器列表进行过滤
ZoneAffinityServerListFilter:基于区域感知的方式,实现对服务实例的过滤,仅返回与本身所处区域一直的服务提供者实例列表;
ServerListSubsetFilter:该过滤器继承自ZoneAffinityServerListFilter,在进行区域感知过滤后,仅返回一个固定大小的服务列表。默认将返回20个服务实例,可以通过ribbon.ServerListSubsetFilter.size进行设置;
ZonePreferenceServerListFilter:使用Eureka和Ribbon时默认的过滤器。实现通过配置或者Eureka所属区域来过滤出同区域的服务实例列表。
Q:Ribbon如何避免调用失效实例?
A:
1、通过IPing检测实例,如果检测到某服务实例不存在/一定时间未响应,则会从持有服务列表中及时移除
2、保留zone的统计数据,ribbon可以避免可能访问失效的zone(剔除无实例、实例故障率大于阈值)
Q:Ribbon有哪些负载均衡策略?
A: