能否用少量代码写一个负载均衡器?
考察说明
考查对负载均衡核心原理与最小实现的理解。
回答思路
- 【回答框架 1】负载均衡器核心是选择一个后端节点处理请求,最少可用随机算法实现:维护可用节点列表,每次请求随机选一个。若加权重,可按权重构建累积区间,生成随机数并二分查找,复杂度为 O(log n)。
- 【回答框架 2】可进一步加入健康检查:定时探测后端可用性,剔除失败节点,恢复时重新加入,保证选择始终针对存活实例。
- 【回答框架 3】也可实现轮询算法:用原子计数器递增并对节点数取模,但需注意节点变动时使用版本号或锁保证一致性。
- 【回答框架 4】生产环境还需考虑会话保持、连接复用和超时处理,但最小实现只关注选择逻辑和简单的容错。
- 【回答框架 5】可用 Nginx、HAProxy 等成熟方案对比:自带算法和配置,但自己实现几行代码即可演示核心思路。
- 【关键点 1】随机或轮询是最简单的负载均衡算法,代码量少
- 【关键点 2】健康检查是保证可靠性的关键,不能省略
- 【关键点 3】加权随机需用到概率区间与二分查找
- 【关键点 4】生产级负载均衡器还需考虑会话保持和故障转移
- 【易错点 1】忽略健康检查会导致请求打到故障节点
- 【易错点 2】计数器轮询在多线程环境下需要原子操作
- 【易错点 3】权重分配不精确会影响实际负载分布的公平性