八股已死、场景当立(场景篇-负载均衡篇)
废话不多说,今天更新场景篇-负载均衡的知识点,做好了开始发车喽!
一、场景篇-负载均衡
1、Q:请解释什么是客户端负载均衡,它与传统的服务端负载均衡有何区别?
A:区别要点在于控制权,感知能力,部署复杂度:
- 控制权:客户端负载均衡把调度权交给业务方,便于实现灰度发布、权重调度等细粒度策略;服务端负载均衡则由外部设备统一管理。
 - 感知能力:客户端可以直接读取注册中心的健康状态、元数据(如权重、地域),实现更精准的调度;服务端只能基于网络层面的健康检查。
 - 部署复杂度:客户端方式不需要额外的硬件/容器层负载均衡器,适合云原生微服务;服务端方式在跨语言、跨集群场景下更通用。
 
- 客户端负载均衡指 调用方在本地完成服务实例的选择,常见实现有 Ribbon、Spring Cloud LoadBalancer 等。调用方先从注册中心获取全部可用实例列表,然后依据负载均衡算法挑选一个实例并直接发起请求。
 - 服务端负载均衡(如 Nginx、ALB)则在 网络入口处统一转发请求,调用方只知道统一的入口地址,真正的实例选择由负载均衡器完成。
 
2、Q: Ribbon 已进入维护模式,Spring Cloud 推荐使用哪款组件来替代?请说明两者在实现机制上的主要区别?
A:推荐替代组件:Spring Cloud LoadBalancer(SC‑LB)。
- 实现机制区别: 
- Ribbon:基于 Netflix Ribbon,在客户端维护一个 IClientConfig → IRule → ServerList 的完整链路,使用 阻塞式 
RestTemplate或Feign调用时通过@LoadBalanced注解完成拦截。 - SC‑LB:采用 响应式(Reactor) 编程模型,核心是 
ReactorServiceInstanceLoadBalancer接口,配合DiscoveryClient动态获取实例列表,默认实现RoundRobinLoadBalancer使用 原子计数器 实现轮询。 
 - Ribbon:基于 Netflix Ribbon,在客户端维护一个 IClientConfig → IRule → ServerList 的完整链路,使用 阻塞式 
 - 优势:SC‑LB 与 Spring Boot 2/3 完全兼容,启动更快、对 WebFlux 原生支持、更易自定义
 
3、Q: 列举并简要描述微服务常用的六种负载均衡算法,说明每种算法的适用场景?
A:六种的算法以及适用场景如下:
-  
算法 原理 典型场景 轮询(Round‑Robin) 按顺序循环分配请求,使用计数器取模 实例性能相近、流量均匀的普通业务 加权轮询(Weighted‑Round‑Robin) 为每个实例配置权重,权重越大分配的请求越多 实例硬件或业务处理能力不一致,需要倾斜流量 随机(Random) 通过随机数直接选取实例 对实例性能要求不敏感、希望降低调度开销的场景 加权随机(Weighted‑Random) 随机选取时考虑权重 与加权轮询类似,但更适合 突发流量 场景 一致性哈希(Consistent‑Hash) 根据请求关键字段(IP、用户ID)计算哈希,映射到固定实例 有状态缓存、会话粘性或需要 最小迁移 的业务 最小连接数(Least‑Connection) 选取当前活跃连接最少的实例 后端实例处理时长差异大、需要快速响应的实时业务  
4、Q: 在 Spring Cloud 中,如何分别配置轮询、随机 与 加权轮询 三种负载均衡策略?请给出关键的配置代码或属性示例?
A:无需额外配置,SC‑LB 默认实现即轮询、通过实现 
