负载均衡入门:SLB原理、四层与七层转发区别
说到PaaS平台,负载均衡绝对是个绕不开的话题。我刚开始接触云原生那会儿,总觉得SLB就是个流量分发器,没啥技术含量。后来在线上环境栽过几次跟头,才明白这东西的水有多深。
今天咱们就聊聊SLB的原理,以及四层和七层转发到底差在哪。嗯,这里要注意,理解清楚这些区别,对你后面做PaaS网络方案设计会很有帮助。
SLB到底是什么?
SLB,全称Server Load Balancer,服务器负载均衡。说白了,就是把一堆请求均匀地分给后端多台服务器去处理。
你想想看,如果只有一个后端节点,流量大了它扛不住,节点挂了服务就断了。SLB就是为了解决这两个问题——高并发和高可用。
核心价值:
- 流量分发:把请求分散到多个后端,避免单点过载
- 健康检查:自动摘除故障节点,保证服务不中断
- 会话保持:同一个用户的请求,尽量打到同一台后端
我在项目中遇到过一种情况:某次大促活动,后端只配了两台4C8G的ECS,SLB也没做限流。结果流量一上来,两台机器CPU直接飙到100%,服务雪崩。后来我加了节点数,配了限流和熔断,才算稳住。
四层转发:简单粗暴,性能强悍
四层转发,工作在OSI模型的传输层。它只看IP和端口,不关心你传的是什么数据。
举个例子:客户端发一个TCP请求到SLB的VIP(虚拟IP),SLB根据负载策略,把请求转发给后端某台真实服务器。整个过程,SLB就是个“快递中转站”——它只负责把包裹送到,不拆包裹看里面装了什么。
我个人习惯:如果后端服务是纯TCP/UDP协议,比如数据库、缓存、游戏服务器,我首选四层转发。性能好,延迟低,资源开销小。
四层转发的典型流程是这样的:
客户端 → SLB(VIP:Port) → 后端服务器(Real Server:Port)
↑ 只做IP+端口转发,不解析应用层数据
我曾经踩过一个坑:某次用四层SLB转发MySQL流量,后端MySQL做了主从切换,IP变了。但SLB的健康检查还是按旧IP去探测,结果一直报后端不可用。嗯,后来我改用了域名方式,配合DNS解析,才算解决。
七层转发:智能灵活,功能丰富
七层转发,工作在应用层。它不光看IP和端口,还能解析HTTP、HTTPS等应用层协议的内容。
你想想看,四层转发只能根据IP和端口做分发,但七层转发可以根据URL、Cookie、Header、请求方法等来做更精细的路由。
比如:
- 根据URL路径,把
/api/的请求转发到API集群,把/static/的请求转发到CDN - 根据Cookie中的session ID,把同一个用户的请求始终转发到同一台后端
- 根据请求头中的User-Agent,区分移动端和PC端流量
七层转发的优势:
- 内容感知:能识别HTTP请求的具体内容
- 高级路由:支持URL、Header、Cookie等多种路由策略
- SSL卸载:SLB负责解密HTTPS,后端用HTTP通信,减轻后端压力
- 缓存与压缩:SLB可以缓存静态资源,压缩响应数据
但七层转发也有代价——性能比四层差。因为SLB需要解析应用层数据,CPU和内存开销更大。我建议,能用四层就别用七层,除非你真的需要那些高级功能。
四层 vs 七层:一张表说清楚
| 对比维度 | 四层转发 | 七层转发 |
|---|---|---|
| 工作层级 | 传输层(TCP/UDP) | 应用层(HTTP/HTTPS) |
| 转发依据 | IP + 端口 | URL、Header、Cookie等 |
| 性能 | 高,延迟低 | 较低,需要解析数据 |
| 功能丰富度 | 简单,仅分发 | 丰富,支持SSL卸载、缓存等 |
| 适用场景 | 数据库、缓存、游戏 | Web应用、API网关 |
| 会话保持 | 基于源IP | 基于Cookie、Session |
避坑指南:我踩过的那些雷
做负载均衡方案,有几个坑我不得不提。这些都是我用真金白银换来的教训。
我曾经犯过的错:
- 健康检查配置不当:有一次我把健康检查间隔设成了5秒,超时时间设了1秒。结果后端稍微有点波动,SLB就判定节点挂了,频繁摘除和加入节点,导致服务抖动。后来我改成间隔10秒、超时3秒,稳了。
- 会话保持没配:某电商项目,用户登录后请求被分发到不同后端,导致Session丢失,用户反复登录。后来配了基于Cookie的会话保持,问题解决。
- 忽略连接数限制:SLB本身也有性能上限。有一次并发连接数超过了SLB规格,导致新连接被丢弃。我后来加了监控告警,并在SLB前面加了限流。
如何选择?我的建议
其实选择四层还是七层,没那么复杂。我一般遵循这几个原则:
- 优先四层:如果后端是TCP/UDP协议,或者对性能要求极高,用四层准没错。
- 需要内容路由时用七层:比如你要根据URL路径做灰度发布、A/B测试,或者需要SSL卸载,那就上七层。
- 混合使用:有些场景可以四层+七层组合。比如四层SLB做流量入口,七层SLB做内部微服务网关。我在一个金融项目中就这么干的,效果不错。
小提示:如果你用的是云厂商的SLB产品,比如阿里云的SLB、腾讯云的CLB,它们通常都支持四层和七层两种模式。创建时选对类型就行。我个人习惯,生产环境用七层,测试环境用四层,因为七层功能多,方便调试。
好了,关于SLB的原理和四层七层区别,今天就聊到这。下一节咱们会深入讲讲SLB的调度算法和健康检查机制,到时候再细聊。