6.0 KiB
6.0 KiB
第10天:Auto Scaling 与负载均衡——自动应对流量洪峰
今天你将学到什么
今天学两个配合使用的服务:负载均衡器(ELB)和自动伸缩(Auto Scaling)。它们解决的问题是:流量来了自动加机器,流量走了自动减机器,全程不需要人工干预。
为什么需要这两个东西
场景一:单台服务器的困境
你开了一个网站,只有一台服务器。
- 平时 100 人访问:没问题,服务器轻松应对
- 突然上了热搜,10000 人同时涌入:服务器扛不住,网站崩了
- 你手忙脚乱地加服务器,等你加好了,热度已经过了
场景二:多台服务器的困境
你学聪明了,一开始就部署了 10 台服务器。
- 平时 100 人访问:9 台服务器在空转,白白烧钱
- 突然 10000 人来了:可能还是不够
- 你不知道该准备多少台才"刚好"
Auto Scaling + 负载均衡 = 完美解决方案:
- 负载均衡器:把用户请求均匀分配给多台服务器
- Auto Scaling:根据流量自动增减服务器数量
负载均衡器(ELB)——流量的"交通警察"
什么是负载均衡
想象一个银行大厅有 5 个柜台窗口。门口有一个引导员(负载均衡器),他的工作是:
- 看哪个窗口人少,就把新来的客户引导到那个窗口
- 如果某个窗口的柜员去上厕所了(服务器故障),就不再往那个窗口引导人
- 客户不需要自己选窗口,引导员帮你选最快的
负载均衡器做的就是这件事:把用户的请求分发到多台健康的服务器上。
AWS 的三种负载均衡器
| 类型 | 工作层级 | 适合场景 | 生活类比 |
|---|---|---|---|
| ALB(应用负载均衡器) | HTTP/HTTPS 层 | 网站、API、微服务 | 餐厅领位员(根据你要吃什么引导到不同区域) |
| NLB(网络负载均衡器) | TCP/UDP 层 | 游戏、IoT、超高性能 | 高速公路收费站(只管放行,不看车里装什么) |
| GWLB(网关负载均衡器) | 网络层 | 防火墙、安全设备 | 安检通道 |
90% 的场景用 ALB 就够了。
ALB 的智能路由
ALB 不只是简单地"轮流分配",它还能根据请求内容做智能路由:
- 访问
www.example.com/api/*→ 发到 API 服务器组 - 访问
www.example.com/images/*→ 发到图片服务器组 - 访问
admin.example.com→ 发到管理后台服务器
健康检查
ALB 会定期"问候"每台服务器:"你还活着吗?"
- 每隔 30 秒发一个请求到服务器的
/health路径 - 如果服务器连续几次没回应 → 标记为"不健康"
- 不健康的服务器不再接收新的用户请求
- 服务器恢复后,自动重新加入
用户完全感知不到某台服务器挂了——因为 ALB 已经悄悄把流量切走了。
Auto Scaling——自动增减服务器
核心概念
启动模板:新服务器的"配置清单"——用什么操作系统、什么实例类型、装什么软件。相当于"造机器的图纸"。
Auto Scaling 组(ASG):管理一群服务器,定义三个数字:
- 最小值(min):保底数量,永远不会少于这个数。比如 2 台。
- 期望值(desired):正常情况下的数量。比如 4 台。
- 最大值(max):上限,防止无限扩展(防止账单爆炸)。比如 20 台。
伸缩策略——什么时候加机器、什么时候减机器
策略一:目标跟踪(最简单,推荐新手用)
你只需要说:"我希望所有服务器的平均 CPU 使用率保持在 50%。"
然后 Auto Scaling 自动帮你:
- CPU 超过 50% → 加机器
- CPU 低于 50% → 减机器
就像空调的恒温模式——你设定 25 度,空调自动调节制冷/制热。
策略二:计划伸缩(适合有规律的流量)
如果你知道流量的规律:
- 每天早上 9 点流量开始上升 → 8:50 提前扩到 8 台
- 每天晚上 10 点流量下降 → 22:00 缩回 3 台
- 每周五下午流量特别大 → 周五 14:00 扩到 12 台
就像定时开关灯——你知道什么时候需要,提前安排好。
策略三:步进伸缩(更精细的控制)
设置多个阈值:
- CPU > 60% → 加 1 台
- CPU > 80% → 加 3 台
- CPU > 95% → 加 5 台(紧急!)
- CPU < 30% → 减 1 台
两者配合的完整架构
用户访问你的网站
↓
负载均衡器(ALB)
┌───┼───┐
↓ ↓ ↓
服务器A 服务器B 服务器C ← Auto Scaling 管理
(AZ-a) (AZ-b) (AZ-c) 最小2台,最大10台
工作流程:
- 用户请求到达 ALB
- ALB 把请求分发给健康的服务器
- 如果流量增大,服务器 CPU 升高
- Auto Scaling 检测到 CPU 超标,自动启动新服务器
- 新服务器启动后,ALB 自动把它加入分发列表
- 流量下降后,Auto Scaling 自动关闭多余的服务器
全程无需人工干预。
一个真实的例子
某在线教育平台:
- 工作日白天:5000 并发用户 → 需要 5 台服务器
- 周末晚上直播课:50000 并发用户 → 需要 50 台服务器
- 凌晨 3 点:100 并发用户 → 需要 2 台服务器
如果固定 50 台服务器:每月费用约 $3,600 用 Auto Scaling:每月费用约 $800(省了 78%)
今天的小测验
- 负载均衡器的作用是什么?用你自己的话解释。
- Auto Scaling 的"最小值、期望值、最大值"分别是什么意思?
- 如果你的网站流量每天早上 9 点开始增长,应该用什么伸缩策略?
- 为什么要设置"最大值"?不设会怎样?
延伸阅读
明天预告
明天进入无服务器计算:AWS Lambda。不用管服务器,只写一个函数,AWS 帮你运行。按调用次数付费,不调用不花钱。