一、什么是 Load Balancer(负载均衡)
一句话定义:
Load Balancer 位于客户端和后端服务器之间,负责把请求分发到多个后端资源上。
请求(task):浏览器发来的 HTTP / HTTPS 请求
资源(resource):运行应用的 EC2 实例
请求路径
Client Browser → Load Balancer → EC2 Instance → Load Balancer → Client Browser== 负载均衡器在“请求和响应的路径中”==
二、为什么用 ELB,而不是自己装 Nginx / HAProxy?
Elastic Load Balancing(ELB)的核心优势:
| 能力 | ELB |
|---|---|
| 运维 | ✅ 无需维护 |
| 高可用 | ✅ 默认多 AZ |
| 自动扩缩 | ✅ 自动适配流量 |
| 支持目标 | EC2 / IP / Lambda / 容器 |
| 混合架构 | ✅ 可负载到本地 IP |
“不需要你管理、自动高可用、自动扩展”
三、ELB 的三大核心能力
1️⃣ 高可用(High Availability)
必须部署在多个 Availability Zones
AWS 自动在多个 AZ 创建负载节点
单 AZ 故障 ≠ 服务不可用
2️⃣ 自动伸缩(Scalability)
自动应对流量突增
不需要你设置实例数量
对客户端是透明的
3️⃣ 健康检查(Health Checks)
健康检查 = ELB 是否继续给某台实例发流量的依据
❌ 错误做法
只检查端口是否打开
只访问 / 首页
✅ 正确做法(强考点)
为应用创建一个:
/monitor该页面应检查:
是否能访问数据库(如 DynamoDB)
是否能访问 S3
核心依赖是否可用
== 只有通过健康检查的实例,才会接收流量==
四、ELB + Auto Scaling 的协作机制
扩容(Scale Out)
Auto Scaling 启动新 EC2
ELB 进行健康检查
通过后 → 开始接收流量
故障处理
ELB 发现实例不健康
停止向其发送流量
通知 Auto Scaling
Auto Scaling 替换实例
缩容(Scale In)& Connection Draining
Connection Draining(连接耗尽)
不再接收新连接
等待已有连接结束
再终止实例
防止:用户请求中途被断开
五、ELB 的 3 个核心组件
1️⃣ Listener(监听器)
- 客户端连接点
定义:
协议(HTTP / HTTPS / TCP / TLS)
端口(80 / 443 / 8080 等)
== 一个 Load Balancer 可以有多个 Listener==
2️⃣ Target Group(目标组)
后端资源集合
可以是:
EC2
IP 地址
Lambda
每个 Target Group 都要定义健康检查
3️⃣ Rules(规则)
把 Listener 的流量路由到 Target Group
基于条件:
Path(/upload)
Host(api.example.com)
Header
Source IP
Method
六、Application Load Balancer(ALB)
定位:L7(应用层)负载均衡
ALB 的核心能力
1️⃣ 基于 HTTP 内容路由
URL path
Host
Headers
Method
Query String
Source IP
== 非常适合 微服务 / API 网关===
2️⃣ TLS / HTTPS 卸载
SSL 证书来自:
ACM(推荐,免费)
IAM 导入
客户端 ↔ ALB 加密
后端无需处理 TLS
3️⃣ 直接响应客户端
Fixed Response(返回 HTML)
Redirect(HTTP → HTTPS)
4️⃣ 用户认证
OpenID Connect
SAML / LDAP / Microsoft AD
在进入后端前完成认证
5️⃣ 路由算法
Round Robin(默认)
Least Outstanding Requests(重点)
当:
实例性能不同
请求复杂度不一致
使用 Least Outstanding Requests
6️⃣ Sticky Sessions
基于 HTTP Cookie
适用于 有状态应用
7️⃣ 安全
使用 Security Group
控制允许的 IP / 端口
⚠️ ALB 适用范围
✅ HTTP / HTTPS
❌ 不支持 TCP / UDP
七、Network Load Balancer(NLB)
定位:L4(连接层)负载均衡
NLB 的核心能力
1️⃣ 支持协议
TCP
UDP
TLS
不理解 HTTP 内容
2️⃣ 路由算法:Flow Hash
基于:
协议
源 IP / 端口
目标 IP / 端口
TCP sequence
条件相同 → 一直发给同一个目标
3️⃣ Sticky Sessions
基于 Source IP
不用 Cookie
4️⃣ TLS 卸载
支持 TLS 终止
但不做 HTTP 层处理
5️⃣ 极高性能
瞬间支持百万级请求
无需预热扩容
6️⃣ IP 地址支持
Static IP
Elastic IP
👉 适用于:
客户端不能用 DNS
防火墙基于 IP 白名单
7️⃣ 保留客户端真实 IP
后端看到的是真实 Client IP
ALB 看到的是 Load Balancer IP
八、ALB vs NLB 对比(考试必背)
| 特性 | ALB | NLB |
|---|---|---|
| 工作层级 | L7 | L4 |
| 协议 | HTTP / HTTPS | TCP / UDP / TLS |
| 内容路由 | ✅ | ❌ |
| Path / Host 路由 | ✅ | ❌ |
| 用户认证 | ✅ | ❌ |
| Fixed / Redirect | ✅ | ❌ |
| Sticky Session | Cookie | Source IP |
| TLS 卸载 | ✅ | ✅ |
| 静态 IP | ❌ | ✅ |
| 保留客户端 IP | ❌ | ✅ |
| 极端高吞吐 | ⚠️ | ✅ |
九、一句话选型总结(非常重要)
Web / API / 微服务 → ✅ ALB
TCP / UDP / 游戏 / 金融系统 → ✅ NLB
需要静态 IP / 客户端 IP → ✅ NLB
需要 URL / Header 路由 → ✅ ALB