面试题答案
一键面试Ribbon内置负载均衡策略
- RoundRobinRule(轮询策略): 按照线性顺序依次选择服务实例,例如有3个实例A、B、C,请求依次会分配到A、B、C、A、B、C……。这种策略简单公平,适用于各实例性能相近的场景。
- RandomRule(随机策略): 从服务实例列表中随机选择一个实例。在某些情况下,能在一定程度上分散请求,但可能会出现部分实例请求集中的情况。
- WeightedResponseTimeRule(加权响应时间策略): 根据每个实例的平均响应时间计算权重,响应时间越短权重越高,被选中的概率越大。该策略更倾向于选择性能好的实例,适合对响应时间敏感的业务。
- BestAvailableRule(最佳可用策略): 先过滤掉多次访问故障而处于断路器跳闸状态的实例,然后选择并发量最小的实例。适用于对高并发有要求且希望减少故障实例调用的场景。
- RetryRule(重试策略): 在一个配置时间段内当选择某实例失败后,会尝试选择其他实例,直到成功或者超过最大重试次数。可用于网络不稳定等情况,增加请求成功的概率。
- AvailabilityFilteringRule(可用性过滤策略): 先过滤掉处于断路器跳闸状态的实例和并发连接数超过阈值的实例,然后从剩余实例中选择一个。在保证实例可用性的同时,避免高并发下过载实例被选中。
高并发场景下优化负载均衡策略
- 业务需求分析:
- 对响应时间敏感:若业务要求快速响应,如实时数据查询业务,可选择WeightedResponseTimeRule策略,优先选择响应快的实例,提高用户体验。
- 对高并发稳定性要求高:对于电商抢购等高并发场景,BestAvailableRule或AvailabilityFilteringRule策略更合适,前者减少故障实例调用,后者避免过载实例被选中,保证系统在高并发下稳定运行。
- 实例性能差异不大:若各实例配置和性能相近,RoundRobinRule策略简单高效,能均匀分配请求,维持系统整体负载均衡。
- 动态调整策略: 在高并发场景下,系统状态不断变化,可考虑动态调整负载均衡策略。例如通过监控系统实时收集实例的响应时间、并发数等指标,根据这些指标动态切换策略。当发现某个实例响应时间突然变长,可暂时切换到BestAvailableRule策略,避开该实例,待其恢复后再调整回原策略。
- 结合其他技术:
- 与断路器结合:Ribbon可与Hystrix断路器配合,当某个实例故障次数达到一定阈值,Hystrix将其断路,Ribbon不再选择该实例,避免大量无效请求,进一步提高系统稳定性。
- 使用服务网格:如Istio,它提供了更高级的流量管理和负载均衡功能,可在高并发场景下实现更细粒度的流量控制和负载均衡优化,与Ribbon结合使用能更好地满足复杂业务需求。