主题
附录 A · 负载均衡面试题速查
按主题分类,每题含 考察点 / 标准答案 / 易错点。建议先自己做一遍,再对照答案。
一、基础概念
Q1. 什么是负载均衡?解决什么问题?
考察点:是否理解 SPOF 与水平扩展。
标准答案:在多个提供相同服务的服务器之间分配请求,解决单机性能瓶颈和单点故障,提升吞吐量、可用性和可扩展性。
易错点:只说「平均分」——负载均衡的核心是 调度策略 和 故障转移,不只是平均。
Q2. 负载均衡和反向代理的区别?
考察点:概念辨析。
标准答案:反向代理隐藏后端,对外提供统一入口;负载均衡在多个后端间选择一台处理请求。Nginx 常同时承担两者。
易错点:认为是一回事。
Q3. 水平扩展和垂直扩展?
标准答案:水平扩展是加机器(Scale Out),垂直扩展是升级单机配置(Scale Up)。互联网主流是水平扩展 + LB。
二、L4 vs L7
Q4. 四层和七层负载均衡的区别?(超高频)
标准答案:
- L4:基于 IP、端口、TCP/UDP 转发,不解析应用协议,性能高,功能少
- L7:解析 HTTP 等应用协议,可按 URL/Header 路由,支持鉴权限流,功能强
- 生产常 L4 前置扛连接,L7 后置做业务路由
易错点:只说「L7 慢」不说 为什么慢、慢多少、换来什么。
Q5. 为什么 Web 场景多用七层?
标准答案:需要路径分流、HTTPS 终结、基于 Cookie 的路由、灰度发布、API 级限流——必须看懂 HTTP。
Q6. LVS 是什么?用在哪?
标准答案:Linux Virtual Server,内核级 L4 负载均衡,性能极高,常用于超大流量入口,上层再挂 Nginx 做 L7。
三、调度算法
Q7. 常见负载均衡算法有哪些?
标准答案:轮询、加权轮询、随机、最少连接、加权最少连接、IP Hash、一致性哈希、最短响应时间。
Q8. 轮询和加权轮询区别?
标准答案:轮询均等分配;加权轮询按 weight 比例分配,适合异构机器混部。
Q9. 什么时候用 least_conn?
标准答案:请求处理时间差异大、长连接/WebSocket/gRPC 流式场景,避免慢请求导致某台连接堆积。
Q10. 一致性哈希解决什么问题?
标准答案:后端节点增减时,避免普通 hash % N 导致几乎全部 key 重映射;适合缓存路由。常配合虚拟节点解决分布不均。
Q11. ip_hash 有什么问题?
标准答案:NAT 导致分布不均;移动网络 IP 变化丢会话;扩缩容大量重映射。现代应用应 Session 外置 Redis 或 JWT,而非依赖 ip_hash。
四、健康检查与高可用
Q12. 主动和被动健康检查区别?
标准答案:
- 被动:真实请求失败时标记 down(Nginx max_fails)
- 主动:定时探针(HTTP/TCP),无流量也能发现故障
- 生产推荐主动检查
Q13. 怎么实现优雅下线?
标准答案:LB 将节点标为 draining,停止分配新请求,等待存量请求完成后再关闭进程;K8s 用 preStop + readiness。
Q14. LB 自身单点怎么解决?
标准答案:Keepalived VIP 主备、云 LB 多 AZ、DNS 多入口。
五、会话与状态
Q15. 如何保证 Session 不丢?
标准答案:① Cookie/IP 粘性(遗留方案);② Redis 集中 Session(推荐);③ JWT 无状态。
Q16. 有状态和无状态服务对 LB 的要求?
标准答案:无状态可用任意算法;有状态需粘性路由或集中状态存储。架构上应尽量无状态。
六、软件与云原生
Q17. Nginx 如何实现负载均衡?
标准答案:upstream 定义后端池,proxy_pass 指向池名;可选 least_conn、ip_hash、weight、max_fails 等。
Q18. Nginx 上游长连接怎么开?
标准答案:upstream { keepalive N; } + proxy_http_version 1.1 + proxy_set_header Connection ""。
Q19. HAProxy 和 Nginx 选型?
标准答案:Nginx 适合 Web 反代 + 静态;HAProxy 更专业的 LB 统计和主动健康检查;API 网关场景 APISIX/Kong。
Q20. K8s Service 和 Ingress 区别?
标准答案:Service 提供集群内稳定入口和 Pod LB;Ingress 是 L7 HTTP 路由,按 Host/Path 分到不同 Service。
Q21. readiness 和 liveness 区别?
标准答案:readiness 决定能否接流量,失败从 Endpoints 摘除;liveness 判断进程存活,失败重启 Pod。
Q22. K8s Service 类型有哪些?
标准答案:ClusterIP、NodePort、LoadBalancer、ExternalName。
七、踩坑与治理
Q23. 为什么重试可能导致重复下单?
标准答案:LB/客户端超时重试,POST 非幂等会执行两次;需幂等键、唯一约束,谨慎开启 POST 重试。
Q24. 什么是雪崩?和 LB 的关系?
标准答案:慢节点 → 重试增多 → 更多堆积 → 全挂。需熔断、限流、超时、降级,不能无限重试。
Q25. proxy_next_upstream 要注意什么?
标准答案:可对错误/超时重试到其他后端;默认不重试 POST;非幂等接口要谨慎。
八、综合场景
Q26. 秒杀场景 LB 要注意什么?
标准答案:入口限流、least_conn 或轮询、禁止 POST 重试、幂等、HPA 扩容、发布预热、缓存扛读。
Q27. 如何排查「时快时慢」?
标准答案:查健康节点数、热点、长连接、重试风暴、后端依赖慢、发布预热。
Q28. 多机房负载均衡怎么做?
标准答案:DNS GSLB 地理解析 + 各机房 CLB + 数据层复制;故障时 DNS 或全局 LB 切换。
Q29. WebSocket 负载均衡注意点?
标准答案:支持协议升级;长 read timeout;连接级粘性;下线 draining。
Q30. 客户端负载均衡优缺点?
标准答案:少一跳、与注册中心联动;但每语言要实现,一致性难。常见于 gRPC/Dubbo。
九、进阶
Q31. 什么是虚拟节点?
标准答案:一致性哈希中每台物理机映射多个环上点位,使 key 分布更均匀。
Q32. Service Mesh 中的负载均衡?
标准答案:Sidecar(Envoy)做客户端 LB,支持加权、熔断、金丝雀,配合 xDS 动态配置。
Q33. 加权值怎么定?
标准答案:应基于压测(CPU、QPS、延迟),不是拍脑袋;可结合动态权重(部分产品支持)。
更多 Nginx 配置细节面试题见
front/nginx/qa.md第 16~19 题。