Java社招面试题:Zookeeper 负载均衡和 Nginx 负载均衡有什么区别?
很多后端工程师在面试时都会遇到一个问题:Zookeeper 的负载均衡和 Nginx 的负载均衡有什么区别?
乍一听好像都是“分流请求”,但其实一个更像是调度中心,一个更像是高速收费站。今天我就用一个小故事,把这两个技术讲清楚,让你在面试时不但能回答,还能讲出技术深度。
故事从一家“网红火锅店”开始
前几天我和朋友去吃火锅,结果排队排了半小时。这时候我突然想到:这不就是负载均衡吗?
假设这家火锅店特别火,顾客源源不断进来。为了不让某一家店挤爆,他们想出了两种不同的分流方式。
第一种方式:门口安排一个分流员
顾客来了之后,门口的分流员会说:
- “今天A店比较空,你去A店。”
- “B店已经满了,你去C店。”
这个分流员不仅知道每家店的人数,还可以随时调整策略。这就像Zookeeper 的负载均衡。
第二种方式:建一个超级大的收费站
顾客开车过来,每个车道都有不同的权重。例如:
- 1号车道 50%
- 2号车道 30%
- 3号车道 20%
车辆按照比例进入不同车道。这个模式就像Nginx 的负载均衡。
这两个方案乍一看都是分流,但背后的设计思路完全不同。
Zookeeper 的负载均衡:更像“调度中心”
在分布式系统里,Zookeeper 更像一个服务注册 + 调度中心。系统通常是这样工作的:
- 服务启动 → 注册到 Zookeeper
- Zookeeper → 保存服务列表
- 客户端 → 从 Zook
