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

6.0 KiB
Raw Blame History

第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. 为什么要设置"最大值"?不设会怎样?

延伸阅读


明天预告

明天进入无服务器计算AWS Lambda。不用管服务器只写一个函数AWS 帮你运行。按调用次数付费,不调用不花钱。