负载均衡基础:从概念到实战

各位同学好,我是老张。今天咱们聊聊负载均衡。

说实话,我入行那会儿,负载均衡还是个挺神秘的东西。那时候公司刚上第一套F5,大家都围着看,觉得这玩意儿能自动分流,太神奇了。现在呢?随便一个云服务商都标配了。但基础原理,其实没变过。

什么是负载均衡?

说白了,就是「别让一台机器累死」。

你想想看,一个网站访问量大了,单台服务器扛不住。怎么办?加机器。但加完机器,流量怎么分?总不能用户点一下,你手动分配吧?

负载均衡干的就是这件事——它站在服务器前面,像个交通指挥员。来一个请求,它看看哪台服务器空闲,就把请求扔过去。

核心定义:负载均衡是一种将网络流量分发到多个后端服务器的技术。目的是提高系统容量、增强可用性、降低延迟。

我在项目中遇到过最典型的场景:双十一大促。平时100台服务器够用,大促那天流量翻10倍。没有负载均衡?那只能看着服务器一个个挂掉。有了它,你只需要提前扩容,流量自动分配。

负载均衡的层级:L4 vs L7

这里有个关键概念——层级。我习惯把负载均衡分成两层:四层和七层。

为什么叫四层、七层?因为OSI模型。四层是传输层,七层是应用层。嗯,这里要注意,实际工作中我们很少纠结OSI七层全部,但这两个层级必须搞明白。

对比项 L4(四层) L7(七层)
工作层级 传输层(TCP/UDP) 应用层(HTTP/HTTPS)
转发依据 IP + 端口 URL、Header、Cookie等
性能 高(内核态转发) 较低(需要解析报文)
灵活性
典型产品 LVS、F5 LTM Nginx、HAProxy

L4负载均衡

四层负载均衡,只看IP和端口。它不关心你发的是什么内容,是HTTP还是MySQL,它不管。它只做一件事:把数据包从入口转发到后端。

我曾经用LVS做过一个游戏服务器的负载均衡。游戏用的是自定义TCP协议,七层根本解析不了。这时候只能用四层。性能也高,单机轻松跑满万兆。

我的建议:如果你的业务协议是自定义的,或者对性能要求极高(比如每秒百万连接),优先考虑L4。

L7负载均衡

七层就不一样了。它能看懂HTTP协议,知道用户访问的是 /api/login 还是 /static/image.jpg。然后根据这些信息做精细化调度。

举个例子。我做过一个电商平台,静态资源用CDN,动态请求走应用服务器。七层负载均衡可以做到:看到 .jpg、.css 后缀,直接转发到CDN节点;看到 /api/,转发到后端Java服务。

这种灵活性,四层做不到。

注意:七层需要解析报文内容,会消耗更多CPU。高并发场景下,七层负载均衡本身可能成为瓶颈。我曾经踩过这个坑——Nginx单机扛到5万QPS就开始丢包了。

负载均衡算法:选哪个?

算法决定了「下一个请求该给谁」。我常用的有四种,咱们一个一个说。

1. 轮询(Round Robin)

最简单。请求来了,按顺序分:第一个给A,第二个给B,第三个给C,然后循环。

适合场景:后端服务器配置一样,请求处理时间差不多。

我刚开始做负载均衡时,全用轮询。后来发现不对劲——有的请求处理快,有的慢。轮询不管这些,结果就是慢请求堆积,快的服务器闲着。

2. 最小连接(Least Connections)

这个就聪明一点。它看每台服务器当前有多少活跃连接,把新请求给连接数最少的那个。

适合场景:请求处理时间差异大。比如有的请求查数据库要2秒,有的只要10毫秒。

我在一个在线教育项目里用过。学生连上来做直播推流,有的推流时间长,有的短。用最小连接算法,服务器负载均衡多了。

3. 加权(Weighted)

有时候服务器配置不一样。一台是64核,一台是16核。你让它们平分流量?不合理。

加权算法就是给每台服务器设个权重。64核的权重设4,16核的设1。流量按4:1分配。

我建议:权重根据实际压测结果来调,别拍脑袋。我曾经见过有人把权重设成10:1,结果小机器直接被打挂。

4. 哈希(Hash)

哈希算法最特别。它不关心服务器负载,而是根据请求的某个特征(比如客户端IP、URL)计算哈希值,然后映射到某台服务器。

好处是:同一个客户端的请求,永远打到同一台服务器。这对有状态的服务特别重要。比如用户登录后,session存在A服务器,下次请求还去A,不用重新登录。

我踩过的坑:哈希算法会导致负载不均。如果某个IP段的用户特别多,那台服务器就惨了。解决方案是「一致性哈希」,这个后面章节会细讲。

算法 优点 缺点 推荐场景
轮询 实现简单,无状态 不考虑服务器负载 同配置、同处理时间的服务
最小连接 动态感知负载 需要维护连接数状态 请求处理时间差异大的场景
加权 支持异构服务器 权重需要手动调整 服务器配置不一致
哈希 保持会话亲和性 可能导致负载不均 有状态服务、缓存服务

一张图看懂负载均衡

下面这张图,是我自己画的。它展示了负载均衡的核心逻辑:用户请求进来,经过负载均衡器,根据算法分发到后端服务器池。

用户请求 负载均衡器 L4/L7 算法:轮询/最小连接/加权/哈希 服务器 A 权重: 2 服务器 B 权重: 1 服务器 C 权重: 3 负载均衡核心流程:请求 → 均衡器 → 算法选择 → 后端服务器

选型建议

说了这么多,到底怎么选?我个人习惯这样判断:

  • 性能优先:选L4,比如LVS。能扛百万并发。
  • 功能优先:选L7,比如Nginx。能做URL路由、SSL卸载、限流。
  • 中小规模:Nginx就够了。配置简单,社区活跃。
  • 大规模集群:LVS做入口四层转发,后面挂Nginx做七层精细控制。两层架构,各司其职。

一个小技巧:刚开始做负载均衡,别追求完美。先用轮询跑起来,观察一段时间。如果发现某台服务器负载特别高,再切换到最小连接或加权。逐步优化,比一步到位更靠谱。

好了,负载均衡的基础就聊到这儿。记住三个核心:层级决定能力,算法决定效率,选型决定上限。后面咱们会深入每个算法的实现细节,还有健康检查、会话保持这些实战内容。


公众号:蓝海资料掘金营,微信deep3321