Skip to content

微服务负载均衡、P2C、EWMA与长连接面试题

本页只放标准回答、追问和原理跳转。

1. L4 和 L7 负载均衡有什么区别

标准回答: L4 基于 IP、端口和连接转发,性能高但通常在建连接时选后端;L7 理解 HTTP/gRPC,可按 Host、Path、Header 路由并做请求级重试、灰度和观测。选择粒度决定长连接上的多个请求是否重新均衡。

原理:DNS、L4与L7

2. 客户端负载均衡和服务端负载均衡有什么区别

标准回答: 客户端从注册发现快照本地选择实例,少一跳且策略灵活,但每种语言SDK要治理且视图可能不一致;服务端通过Gateway/LB统一选择,客户端简单但代理成为额外容量和故障层。两者都需健康、超时和路由版本。

原理:完整选择链

3. 为什么Round Robin不能保证请求负载均匀

标准回答: 请求成本不同、Keep-Alive复用、HTTP/2多Stream和实例性能差异都会让轮询不等于实际负载均匀。Round Robin只保证选择次数顺序,不观察未完成请求和延迟。

原理:Random与Round Robin

4. 平滑加权轮询怎样工作

标准回答: 每轮给所有节点的Current加上有效权重,选择Current最大者,再从赢家Current减去总权重。这样按权重长期分配,同时避免朴素权重轮询把高权重节点请求集中成突发。

原理:平滑加权轮询Demo

5. Least Connections 和 Least Request 的区别

标准回答: Least Connections比较连接数,适合连接代表主要成本的场景;Least Request/Active比较未完成请求,更接近请求压力。HTTP/2一个连接可承载大量Stream,因此连接少不一定负载低;客户端Active通常只是局部视图。

原理:Least算法

6. 什么是P2C

标准回答: Power of Two Choices随机抽两个健康候选,比较Active、EWMA或综合分数后选择更优者。它以O(1)采样避免全量扫描,并显著改善纯随机最大负载,适合大规模实例集合。

原理:P2C

7. EWMA在负载均衡中做什么

标准回答: EWMA让新延迟样本权重大、旧样本衰减,可与Active和权重形成负载分数。它有冷启动、异常值、局部视图和反馈滞后问题,完全不给慢实例流量后还需探测恢复。

原理:EWMA

8. Maglev与一致性哈希有什么区别

标准回答: Maglev根据后端生成排列并填充固定查找表,数据面按Hash索引表实现近O(1)选择,适合高性能LB;一致性哈希通常在环上顺时针查找并通过虚拟节点均衡。两者都只解决映射,不处理状态迁移和单热Key。

原理:MaglevHash亲和

8.1 P2C为什么要结合Active和EWMA

标准回答: 只看Active会把历史很慢但当前空闲的实例选中;只看EWMA会忽略当前已经排队的实例。P2C随机抽两个候选后,用Active、EWMA、权重和错误状态算综合分数,可以用很低选择成本避开慢实例和排队实例。但这些统计通常是客户端局部视图,仍要配合熔断、Outlier和探测恢复。

原理:P2C + Active + EWMA Demo

9. 服务扩容后为什么新Pod没有流量

标准回答: Endpoint已更新不代表旧连接会重选。L4、Keep-Alive、HTTP/2或gRPC长连接可能继续绑定旧Pod;需要检查选择粒度、连接数/Stream、最大连接年龄、排空、Resolver更新和慢启动,而不是只看Pod数量。

原理:选择单位商业场景

10. 什么是慢启动

标准回答: 新实例Ready后,JIT、缓存和连接池仍可能冷;慢启动从低有效权重逐步增加流量,根据延迟和错误率暂停或继续,避免刚启动就被满流量打垮并被Outlier再次剔除。

原理:慢启动

11. Outlier Detection是全局摘除吗

标准回答: 通常不是。每个客户端或代理按自己观察的连续5xx、连接错误、成功率或延迟本地剔除,因此不同代理视图不同。要设置最小样本、检测窗口、最大剔除比例、剔除时长和恢复探测。

原理:Outlier Detection

11.1 Outlier Detection和熔断有什么区别

标准回答: Outlier Detection偏实例级治理,目标是把某台Full GC、连接失败或持续5xx的坏实例临时摘除;熔断偏依赖级治理,目标是在整个下游服务异常或过慢时快速失败,保护调用方资源。如果库存服务数据库整体故障,只摘除某几个实例没有意义,应触发依赖级熔断、降级和限流。

原理:异常实例摘除状态机微服务稳定性

12. 流量不均怎样排查

标准回答: 先确认选择单位,按实例比较QPS、连接、Active Stream、尾延迟和CPU;再查发现快照、权重、连接池/DNS缓存、算法统计口径、热Key/亲和、慢启动、Outlier和多层重试。不能只看集群平均CPU。

原理:负载均衡Runbook