aws-doc/课程/第二阶段-核心服务/第10天-AutoScaling与负载均衡.md
2026-05-08 10:24:39 +08:00

172 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第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台
```
**工作流程**
1. 用户请求到达 ALB
2. ALB 把请求分发给健康的服务器
3. 如果流量增大服务器 CPU 升高
4. Auto Scaling 检测到 CPU 超标自动启动新服务器
5. 新服务器启动后ALB 自动把它加入分发列表
6. 流量下降后Auto Scaling 自动关闭多余的服务器
**全程无需人工干预。**
---
## 一个真实的例子
某在线教育平台
- 工作日白天5000 并发用户 需要 5 台服务器
- 周末晚上直播课50000 并发用户 需要 50 台服务器
- 凌晨 3 100 并发用户 需要 2 台服务器
如果固定 50 台服务器每月费用约 $3,600
Auto Scaling每月费用约 $800省了 78%
---
## 今天的小测验
1. 负载均衡器的作用是什么用你自己的话解释
2. Auto Scaling "最小值期望值最大值"分别是什么意思
3. 如果你的网站流量每天早上 9 点开始增长应该用什么伸缩策略
4. 为什么要设置"最大值"不设会怎样
---
## 延伸阅读
- [ELB 产品介绍](https://aws.amazon.com/elasticloadbalancing/)
- [Auto Scaling 用户指南](https://docs.aws.amazon.com/autoscaling/ec2/userguide/)
---
## 明天预告
明天进入无服务器计算AWS Lambda不用管服务器只写一个函数AWS 帮你运行按调用次数付费不调用不花钱