AWS 计算服务容灾与高可用架构设计完全指南:从 EC2 到 Lambda 的多层防护体系(2026最新版)
Meta Description: AWS五大计算服务容灾架构深度解析:EC2多可用区高可用、Lambda多Region容灾、ECS/EKS容器自愈、Auto Scaling故障转移、LightSail快照恢复——从RTO/RPO设计到落地实施,构建99.
- 引言:当"云不会挂"成为最危险的幻觉
- 容灾与高可用的基础概念:RTO、RPO 与架构层级
- EC2 高可用架构:从单实例到跨 Region 的演进路径
- Lambda 容灾策略:Serverless 不等于零运维
- ECS/EKS 容器高可用:自愈能力是容器的天然优势
- LightSail 容灾:轻量≠裸奔
- Auto Scaling:所有计算服务容灾体系的核心引擎
- 五大计算服务容灾能力全景对比
Meta Description: AWS五大计算服务容灾架构深度解析:EC2多可用区高可用、Lambda多Region容灾、ECS/EKS容器自愈、Auto Scaling故障转移、LightSail快照恢复——从RTO/RPO设计到落地实施,构建99.99%可用性的云原生防线。
关键词:AWS容灾架构、EC2高可用、Lambda容灾、ECS故障转移、Auto Scaling弹性恢复、LightSail备份、RTO/RPO设计、Multi-AZ部署、云原生高可用、AWS Disaster Recovery
引言:当"云不会挂"成为最危险的幻觉
2026年6月,某头部电商平台因单可用区部署遭遇AWS US-East-1局部供电故障,业务中断4小时,直接损失超过800万美元。事后复盘发现:该团队的所有EC2实例、RDS数据库和Lambda函数全部部署在同一个可用区(AZ)内,零容灾设计。
很多人都默认"云服务天然高可用"——这是最危险的认知偏差。AWS确实提供了丰富的容灾工具,但高可用不会自动发生,它需要刻意设计。EC2实例可以随时被终止,Lambda冷启动可能超时,ECS容器可能因节点故障而漂移,LightSail更是轻量到几乎没有内置容灾能力。
本文将从RTO(恢复时间目标)和RPO(恢复数据目标)设计入手,逐一拆解EC2、Lambda、ECS/EKS、Auto Scaling和LightSail五大计算服务的容灾与高可用架构模式,并给出多层防护的落地实施路径。
一、容灾与高可用的基础概念:RTO、RPO 与架构层级
在深入具体服务之前,需要先厘清三个核心概念和一个分级框架。
1.1 RTO 与 RPO:容灾设计的两个北极星指标
| 指标 | 全称 | 定义 | 通俗理解 |
|---|---|---|---|
| RTO | Recovery Time Objective | 从故障发生到业务恢复的最大可接受时间 | "你能容忍业务停多久?" |
| RPO | Recovery Point Objective | 故障时可接受的最大数据丢失量(时间窗口) | "你能容忍丢多少数据?" |
RTO 和 RPO 是容灾架构设计的起点,不是终点。先定指标,再选方案——而不是反过来。一个典型的决策矩阵如下:
| 业务等级 | RTO | RPO | 推荐架构 | 年成本(相对基准) |
|---|---|---|---|---|
| 核心交易系统 | < 1 分钟 | 0(零数据丢失) | Multi-AZ Active-Active + 同步复制 | 3-5x |
| 重要业务系统 | < 1 小时 | < 5 分钟 | Multi-AZ Active-Passive + 异步复制 | 1.5-2x |
| 一般业务系统 | < 4 小时 | < 1 小时 | 跨Region Pilot Light + 定期快照 | 1.2-1.5x |
| 非关键系统 | < 24 小时 | < 24 小时 | 定期备份 + 手动恢复 | 1.0x(基准) |
1.2 AWS 容灾的四层架构模型
AWS 官方在 Well-Architected Framework 中将容灾策略分为四个层级:
┌─────────────────────────────────────────────────────┐
│ Layer 4: Multi-Region Active-Active │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Region A │ ←──→ │ Region B │ │
│ │ (us-east-1) │ 同步 │ (us-west-2) │ │
│ └─────────────────┘ └─────────────────┘ │
│ RTO < 1分钟, RPO = 0 │
├─────────────────────────────────────────────────────┤
│ Layer 3: Multi-AZ Active-Passive │
│ ┌─────────────────────────────────────┐ │
│ │ Region: AZ-a (Active) │ AZ-b (Standby)│ │
│ └─────────────────────────────────────┘ │
│ RTO < 15分钟, RPO < 5分钟 │
├─────────────────────────────────────────────────────┤
│ Layer 2: Pilot Light / Warm Standby │
│ ┌─────────────────────────────────────┐ │
│ │ 核心服务常驻 │ 扩展资源按需启动 │ │
│ └─────────────────────────────────────┘ │
│ RTO < 1小时, RPO < 1小时 │
├─────────────────────────────────────────────────────┤
│ Layer 1: Backup & Restore │
│ ┌─────────────────────────────────────┐ │
│ │ 定期快照 / AMI备份 → 故障后手动恢复│ │
│ └─────────────────────────────────────┘ │
│ RTO < 24小时, RPO < 24小时 │
└─────────────────────────────────────────────────────┘
关键认知:层级越高成本越高,但恢复越快。绝大多数企业不需要所有服务都达到 Layer 4——按业务重要性分级设计才是务实的做法。
二、EC2 高可用架构:从单实例到跨 Region 的演进路径
EC2 是 AWS 容灾能力最丰富的计算服务,但也意味着最容易被错误配置。以下是从低到高的四级架构方案。
2.1 Level 1:基础防护——EBS 快照 + AMI 备份
最简单的容灾起点,适用于开发测试环境和对 RTO 不敏感的非核心业务:
# 创建 EBS 快照(可通过 AWS Backup 自动化)
aws ec2 create-snapshot --volume-id vol-0abcd1234 \
--description "Daily backup $(date +%Y-%m-%d)" \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Backup,Value=Daily}]'
# 从运行中实例创建 AMI(包含根卷)
aws ec2 create-image --instance-id i-0abcd1234 \
--name "app-server-backup-$(date +%Y%m%d)" \
--no-reboot
2.2 Level 2:生产级——Auto Scaling Group + Multi-AZ + ALB
这是 EC2 高可用的标准配置,覆盖绝大多数业务场景:
┌──────────────┐
│ Route 53 │
│ (DNS 解析) │
└──────┬───────┘
│
┌──────▼───────┐
│ ALB │
│ (跨AZ分发) │
└──┬───────┬───┘
│ │
┌────────▼─┐ ┌──▼─────────┐
│ AZ-a │ │ AZ-b │
│ ┌───────┐ │ │ ┌─────────┐ │
│ │ EC2-1 │ │ │ │ EC2-3 │ │
│ │ EC2-2 │ │ │ │ EC2-4 │ │
│ └───────┘ │ │ └─────────┘ │
└───────────┘ └─────────────┘
配置要点:
- Auto Scaling Group(ASG) 跨至少 2 个 AZ,最小/期望/最大实例数设为 2/2/4
- Application Load Balancer(ALB) 开启健康检查(路径
/health,间隔 30 秒) - 启动模板 标准化实例配置,确保新实例可以自动加入集群
- 生命周期钩子 在实例终止前完成优雅下线(deregister from ALB → drain connections → terminate)
# 创建跨 2 个 AZ 的 Auto Scaling Group
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name "web-app-asg" \
--launch-template LaunchTemplateName=web-app-template,Version='$Latest' \
--min-size 2 --max-size 4 --desired-capacity 2 \
--vpc-zone-identifier "subnet-az-a,subnet-az-b" \
--target-group-arns "arn:aws:elasticloadbalancing:...:targetgroup/web-tg/xxx" \
--health-check-type ELB --health-check-grace-period 300
🔴 常见陷阱:只在 ASG 中配了一个 AZ 的子网——这不是高可用,只是自动重启。务必跨至少 2 个 AZ。
2.3 Level 3:跨 Region 灾备——Pilot Light 模式
对于需要跨 Region 容灾的核心业务,Pilot Light 是性价比最高的方案:
| 组件 | 主 Region(Active) | 灾备 Region(Pilot Light) |
|---|---|---|
| EC2 实例 | 全量运行 | 仅 1 台最小规格(或使用 AMI 待命) |
| RDS 数据库 | 主实例 | 跨 Region 只读副本 |
| EBS 数据卷 | 正常运行 | 通过 AWS Backup 跨 Region 复制快照 |
| Route 53 | 主域名指向 | 故障转移策略(Failover Routing) |
# 开启 EBS 快照跨 Region 复制
aws ec2 copy-snapshot \
--source-region us-east-1 \
--source-snapshot-id snap-0abcd1234 \
--destination-region us-west-2 \
--description "DR copy $(date +%Y-%m-%d)"
Switching到备用Region通常需要10-30分钟——通过自动化脚本一键拉起完整的ASG集群,而不是手动逐个启动实例。
三、Lambda 容灾策略:Serverless 不等于零运维
很多团队认为 Lambda "天然高可用"——AWS 确实在幕后做了大量容灾工作,但这不意味着你可以完全不考虑容灾设计。
3.1 Lambda 的默认容灾能力(你不需要做的部分)
AWS 在 Lambda 服务层面默认提供:
- 多 AZ 执行:Lambda 执行环境自动分布在 Region 内的多个 AZ
- 异步重试:异步调用失败后自动重试 2 次(总计 3 次尝试)
- 死信队列(DLQ):超过重试次数的事件进入 SQS/SNS 做后续处理
- 事件源映射重试:Kinesis/DynamoDB Streams 触发失败后按分片重试
3.2 你真正需要设计的容灾策略
(1)多 Region 部署
Lambda 不会自动跨 Region 容灾。如果 us-east-1 挂了,你的 Lambda 函数不会在 us-west-2 自动启动。解决方案:
# 使用 AWS SAM 或 CDK 部署到多个 Region
# sam deploy --region us-east-1 --stack-name app-prod
# sam deploy --region us-west-2 --stack-name app-dr
# Route 53 故障转移策略
Resources:
PrimaryRecord:
Type: AWS::Route53::RecordSet
Properties:
Failover: PRIMARY
HealthCheckId: !Ref HealthCheck
AliasTarget:
DNSName: !GetAtt PrimaryApi.DomainName # us-east-1
SecondaryRecord:
Type: AWS::Route53::RecordSet
Properties:
Failover: SECONDARY
AliasTarget:
DNSName: !GetAtt SecondaryApi.DomainName # us-west-2
(2)Provisioned Concurrency —— 消除冷启动同时也提升了可用性
冷启动不只是性能问题——在流量突增时,大量冷启动可能导致函数执行超时,本质上是一次微型的"可用性降级":
# 为关键函数配置预置并发
aws lambda put-provisioned-concurrency-config \
--function-name payment-processor \
--qualifier PROD \
--provisioned-concurrent-executions 10
(3)死信队列 + 事件回放 —— 把失败转化为可恢复
{
"dead_letter_config": {
"target_arn": "arn:aws:sqs:us-east-1:123456789:lambda-dlq"
},
"max_retry_attempts": 2,
"maximum_event_age_in_seconds": 21600
}
当灾难恢复后,可以通过 SQS 的 DLQ 消息回放功能,将失败的事件重新推回主队列进行补处理,确保最终一致性。
3.3 Lambda 容灾能力对照表
| 故障类型 | 默认行为 | 需要的额外配置 | RTO 估算 |
|---|---|---|---|
| 单次执行失败(同步) | 调用方收到错误,不重试 | 调用方实现重试逻辑 | < 1 秒 |
| 单次执行失败(异步) | 自动重试 2 次 → DLQ | 配置 SQS/SNS DLQ + 告警 | < 1 分钟 |
| 单个 AZ 故障 | 自动切到其他 AZ | 无需额外配置 | < 1 分钟 |
| 整个 Region 故障 | 不自动恢复 | 多 Region 部署 + Route 53 故障转移 | 5-30 分钟 |
| 并发配额耗尽 | 返回 429 错误 | 预留并发 + 请求队列缓冲 | < 1 分钟 |
核心结论:Lambda 的"免运维"止步于单 Region 内——跨 Region 容灾仍然需要你主动设计和部署。
四、ECS/EKS 容器高可用:自愈能力是容器的天然优势
容器的不可变基础设施(Immutable Infrastructure)特性天然适合容灾——出问题的容器直接替换,而不是修复。
4.1 ECS 高可用架构
ECS 的高可用核心在于"三层自愈机制":
Layer 1: Task 级自愈
└─ ECS Service 检测到 Task 异常 → 自动启动新 Task 替换
Layer 2: Container Instance 级自愈
└─ ASG (EC2 启动类型) 检测到 EC2 实例不健康 → 替换实例
└─ Fargate 自动迁移 Task 到健康的基础设施
Layer 3: AZ 级故障转移
└─ Service 跨多 AZ 部署 → ALB 自动路由到健康 AZ
ECS Fargate 的高可用配置示例:
# 创建跨 2 个 AZ 的 ECS Fargate Service
aws ecs create-service \
--cluster prod-cluster \
--service-name api-service \
--task-definition api-task:3 \
--desired-count 2 \
--launch-type FARGATE \
--platform-version LATEST \
--network-configuration "awsvpcConfiguration={
subnets=[subnet-az-a,subnet-az-b],
securityGroups=[sg-0abcd],
assignPublicIp=DISABLED
}" \
--deployment-controller type=ECS \
--deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}"
🔴 关键配置说明:
subnets必须包含至少 2 个 AZ 的子网deploymentCircuitBreaker开启后,当新部署持续失败时自动回滚——防止一次错误部署导致全面宕机desired-count: 2配合minimumHealthyPercent: 50确保滚动更新期间始终有 1 个 Task 在线
4.2 EKS 高可用架构
EKS 在 ECS 的基础上增加了 Kubernetes 原生的弹性机制:
| 机制 | 作用 | 配置方式 |
|---|---|---|
| PodDisruptionBudget(PDB) | 限制同时不可用的 Pod 数量,防止维护操作清空所有 Pod | maxUnavailable: 1 |
| Horizontal Pod Autoscaler(HPA) | 根据 CPU/内存自动扩缩 Pod | kubectl autoscale deployment api --min=2 --max=10 --cpu-percent=70 |
| Cluster Autoscaler | Pod 无法调度时自动增加 Worker Node | 部署 Cluster Autoscaler 组件 |
| Topology Spread Constraints | 确保 Pod 均匀分布在不同 AZ | topologyKey: topology.kubernetes.io/zone |
| Node Affinity + Anti-Affinity | 控制 Pod 的调度位置,避免单点 | podAntiAffinity.preferredDuringScheduling |
# EKS Deployment 示例:跨 AZ + PDB 保护
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
replicas: 3
template:
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: api-server
topologyKey: topology.kubernetes.io/zone
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: api-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: api-server
4.3 ECS vs EKS 容灾能力对比
| 能力维度 | ECS(Fargate) | EKS |
|---|---|---|
| 跨 AZ 部署 | ✅ Service subnet 配置 | ✅ topologySpreadConstraints |
| 自动故障替换 | ✅ 内置 | ✅ Kubernetes 原生 |
| 滚动更新保护 | ✅ deploymentCircuitBreaker | ✅ PDB + rolling update |
| 自动扩缩 | ✅ Service Auto Scaling | ✅ HPA + Cluster Autoscaler |
| 跨 Region 容灾 | ⚠️ 需手动配置(多 Cluster + Route 53) | ⚠️ 需手动配置 |
| 运维复杂度 | 低(AWS 托管) | 中-高(需运维控制平面) |
五、LightSail 容灾:轻量≠裸奔
LightSail 的定位是"开箱即用的轻量云服务器",不内置 Auto Scaling、不内置负载均衡、不内置跨 AZ 故障转移。但这不意味着 LightSail 只能裸奔——它有自己的容灾工具箱。
5.1 LightSail 的快照体系
LightSail 提供两种快照:
| 快照类型 | 触发方式 | 保留策略 | 用途 |
|---|---|---|---|
| 手动快照 | 控制台或 CLI 手动触发 | 永久(直到手动删除) | 重大变更前备份、长期归档 |
| 自动快照 | 每天自动触发 | 保留最近 7 天 | 日常恢复、误删回滚 |
# 手动创建 LightSail 实例快照
aws lightsail create-instance-snapshot \
--instance-name my-wordpress-server \
--instance-snapshot-name "pre-migration-snapshot-$(date +%Y%m%d)"
# 开启自动快照(每天一次,保留 7 天)
aws lightsail enable-add-on \
--resource-name my-wordpress-server \
--add-on-request addOnType=AutoSnapshot,autoSnapshotAddOnRequest={snapshotTimeOfDay=03:00}
5.2 LightSail 的容灾恢复流程
由于 LightSail 不支持跨 AZ/Region 的自动故障转移,恢复流程是完全手动的:
故障发生
│
▼
检测到实例不可达 (Ping / HTTP 健康检查)
│
▼
从最新快照创建新实例
│ aws lightsail create-instances-from-snapshot \
│ --instance-names "recovery-server" \
│ --availability-zone us-east-1a \
│ --instance-snapshot-name "auto-snapshot-20260713"
│
▼
分配静态 IP 到新实例
│ aws lightsail attach-static-ip \
│ --static-ip-name "production-ip" \
│ --instance-name "recovery-server"
│
▼
验证服务恢复 → 更新 DNS(如需要)
典型 RTO:15-30 分钟(取决于实例大小和快照体积)
5.3 LightSail 容灾的硬伤与弥补方案
硬伤清单:
- ❌ 单 AZ 绑定:实例一旦创建在某个 AZ,无法直接迁移
- ❌ 无内置负载均衡:无法做 Active-Active 或蓝绿部署
- ❌ 无 Auto Scaling:流量高峰无法自动扩容
- ❌ 快照只能恢复到 LightSail:无法直接升级到 EC2
弥补方案:
| 问题 | 弥补手段 | 成本 |
|---|---|---|
| 单 AZ 故障 | 定期导出快照到 S3 → 跨 Region 复制 → 备用 Region 创建 LightSail | $5-10/月 |
| 无负载均衡 | 前置 CloudFront CDN + 配置自定义源站 | $1-5/月 |
| 无 Auto Scaling | 业务扩展后迁移到 EC2 + ASG | 迁移一次性成本 |
| 恢复速度慢 | 维护一个最小规格的温备实例(Warm Standby) | $3.5-5/月 |
5.4 什么时候应该从 LightSail 升级到 EC2?
如果你的业务出现以下任一信号,就说明 LightSail 的容灾能力已经跟不上需求了:
- 需要跨 AZ 高可用(RTO < 5 分钟)
- 需要自动故障切换(无法接受手动恢复)
- 需要蓝绿/金丝雀部署(零停机发布)
- 需要配合负载均衡(单实例性能已到瓶颈)
六、Auto Scaling:所有计算服务容灾体系的核心引擎
Auto Scaling 不仅是成本优化工具——在容灾语境下,它的核心价值是"弹性恢复(Elastic Recovery)"。
6.1 Auto Scaling 的容灾价值矩阵
| 能力 | 对容灾的贡献 | 适用于 |
|---|---|---|
| 健康检查替换 | 不健康实例自动终止 + 新建替换 | EC2, ECS EC2 |
| 跨 AZ 再平衡 | 某个 AZ 不可用时在健康 AZ 补足实例 | EC2 ASG |
| 动态扩缩 | 流量切换/故障转移时自动扩容承接 | EC2, ECS, Lambda(并发) |
| 生命周期钩子 | 实例终止前完成状态保存和连接排空 | EC2 |
| 实例刷新 | 滚动替换所有实例到新 AMI(零停机) | EC2 |
6.2 容灾场景下的 Auto Scaling 配置最佳实践
# 关键容灾配置
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name "critical-app-asg" \
--min-size 2 \
--desired-capacity 2 \
--max-size 8 \
--availability-zones "us-east-1a" "us-east-1b" "us-east-1c" \
--health-check-type ELB \
--health-check-grace-period 300 \
--default-cooldown 180 \
--default-instance-warmup 120 \
--termination-policies "OldestInstance" \
--new-instances-protected-from-scale-in true \
--max-instance-lifetime 604800
容灾关键参数解读:
| 参数 | 推荐值 | 容灾意义 |
|---|---|---|
min-size | ≥ 2 | 确保至少 2 个实例,避免单个故障导致全部不可用 |
availability-zones | ≥ 2 | AZ 级故障时自动在幸存 AZ 重建实例 |
health-check-type | ELB | 结合应用层健康检查,而不仅仅是系统层 |
default-cooldown | 180s | 防止故障恢复期间过度扩缩造成的二次抖动 |
default-instance-warmup | 120s | 给新实例足够的启动时间才计入健康状态 |
max-instance-lifetime | 7 天 | 定期轮换实例,降低"长跑僵尸实例"风险 |
6.3 与不同计算服务的协同模式
Lambda (Provisioned Concurrency)
│
├── 类似 ASG 的"最小容量保障"
└── 应用层 Auto Scaling: 并发执行数自动伸缩
ECS Service Auto Scaling
│
├── Target Tracking: CPU/Memory 目标值
├── Step Scaling: 阶梯式扩缩
└── Scheduled Scaling: 定时调整 Task 数量
EC2 Auto Scaling Group
│
├── 管理 EC2 实例池的规模和分布
├── 集成 ELB 健康检查
└── 支持混合实例类型和竞价实例
七、五大计算服务容灾能力全景对比
| 能力维度 | EC2 | Lambda | ECS (Fargate) | EKS | LightSail | Auto Scaling |
|---|---|---|---|---|---|---|
| 单实例/Task 故障自愈 | ⚠️ 需 ASG | ✅ 内置 | ✅ 内置 | ✅ 内置 | ❌ | ✅ |
| 跨 AZ 高可用 | ✅ (ASG) | ✅ 内置 | ✅ | ✅ | ❌ | ✅ |
| 跨 Region 容灾 | ⚠️ 需手动 | ⚠️ 需手动 | ⚠️ 需手动 | ⚠️ 需手动 | ❌ | ❌ |
| 负载均衡集成 | ✅ ALB/NLB | ✅ API Gateway | ✅ ALB | ✅ ALB/NLB | ❌ | ✅ |
| 自动备份/快照 | ✅ EBS Snapshot | N/A(无状态) | N/A(无状态) | ⚠️ 需配置 | ✅ 手动+自动 | N/A |
| 零停机部署 | ✅ (ASG滚动) | ✅ ($LATEST别名) | ✅ (蓝绿部署) | ✅ (Rolling Update) | ❌ | ✅ |
| 异常回滚 | ✅ (ASG实例刷新) | ✅ (别名权重) | ✅ (CircuitBreaker) | ✅ (Rollback) | ❌ | ⚠️ |
| 默认 RTO(单Region故障) | 5-15 分钟 | < 1 分钟 | 2-5 分钟 | 2-5 分钟 | 15-30 分钟 | — |
| 运维复杂度 | 中 | 低 | 低 | 高 | 极低 | 中 |
八、容灾架构设计的七个黄金法则
基于以上分析,总结七条经过生产验证的容灾设计原则:
法则 1:永远不要把所有鸡蛋放在一个 AZ 里
几乎所有计算服务都支持跨 AZ——启用它。多 AZ 部署是性价比最高的可用性提升手段,通常只增加 10-20% 的基础设施成本,但能将可用性从 99.5% 提升到 99.99%。
法则 2:无状态设计是容灾最好的朋友
Lambda 和容器的核心优势就是无状态。对于 EC2 上的有状态应用,尽可能将状态外移到 RDS/ElastiCache/DynamoDB/S3,而不是存储在实例本地磁盘上。
法则 3:自动化恢复,而不是手动恢复
Runbook 写得再好,凌晨 3 点故障时也没有自动脚本快。用以下工具构建自动化恢复:
- AWS Systems Manager Automation:预定义恢复 Runbook
- EventBridge + Lambda:基于事件的自动响应
- ASG 生命周期钩子:实例级别自动恢复
- CloudWatch Alarm → ASG/ECS 动作:指标驱动的弹性恢复
法则 4:定期演练——不演练的容灾方案等于没有方案
AWS 提供 FIS(Fault Injection Simulator) 来模拟故障:
# 模拟终止一个 AZ 中的 EC2 实例
aws fis create-experiment-template \
--cli-input-json file://chaos-experiment.json
建议每季度至少做一次区域级故障演练(非生产环境),每年至少一次全链路生产故障演练。
法则 5:监控先行——你不知道故障来了,就谈不上恢复
必须监控的关键指标:
- EC2:StatusCheckFailed, CPU Credit Balance(T 系列)
- Lambda:Throttles, Errors, Duration, IteratorAge(流处理)
- ECS/EKS:Service Task Count vs Desired Count, CPU/Memory Reservation
- LightSail:Instance Status, Burst Capacity
- 全局:ALB 5xx 错误率, Route 53 健康检查失败
法则 6:成本与可用性的平衡是一门艺术
并非所有服务都需要 Multi-Region Active-Active。按业务分级合理分配预算:
┌────────────────────────────────────────────┐
│ 服务分级 │ 容灾投入占IT预算比例 │
├────────────────────────────────────────────┤
│ 核心交易 (Tier 1) │ 20-30% │
│ 重要业务 (Tier 2) │ 10-15% │
│ 一般业务 (Tier 3) │ 5-10% │
│ 非关键 (Tier 4) │ 1-3% │
└────────────────────────────────────────────┘
法则 7:从第一天就写恢复 Runbook
不要等第一次故障发生时才想怎么恢复。每个计算服务类型至少准备一份"最坏情况恢复 Runbook",内容包括:
- 故障检测方法(哪个指标触发?告警阈值是多少?)
- 故障范围判断(单实例?单 AZ?整个 Region?)
- 恢复步骤(逐步列出 CLI 命令和控制台操作)
- 回滚方案(恢复失败后怎么办?)
- 通知升级路径(什么时候通知谁?)
九、常见问题 FAQ
Q:EC2 的 Auto Recovery 和多 AZ 部署有什么区别?
A:EC2 Auto Recovery 是当单个实例的底层硬件故障时,AWS 自动在同 AZ 内用相同配置重新启动实例(更换物理主机)。多 AZ 部署是当整个 AZ 不可用时,流量切换到其他 AZ 的实例。两者互补:Auto Recovery 解决硬件级故障,多 AZ 解决数据中心级故障。
Q:Lambda 真的需要多 Region 部署吗?
A:取决于业务的 RTO 要求。Lambda 在单 Region 内的可用性 SLA 是 99.95%,这意味着一年约有 4.4 小时不可用时间。如果你的业务能接受这个窗口,单 Region 就够。如果不能——比如支付处理、订单核心链路——就需要多 Region 部署 + Route 53 故障转移。
Q:LightSail 快照能用来迁移到 EC2 吗?
A:不能直接迁移。LightSail 快照只能恢复为新的 LightSail 实例。如果需要迁移到 EC2,需要走导出流程:LightSail 快照 → 导出到 EC2 AMI(通过 LightSail 控制台的 "Export to Amazon EC2" 功能),然后用这个 AMI 启动 EC2 实例。
Q:Auto Scaling Group 的跨 AZ 再平衡会导致什么问题?
A:跨 AZ 再平衡(AZ Rebalance)会在 AZ 之间重新分配实例数量。这可能导致:① 正在处理请求的实例被终止 ② 短暂的容量不足。建议开启 ASG 的 instance-warmup 和 ELB 连接排空(Connection Draining)来缓解影响。
Q:ECS 和 EKS 哪个容灾能力更强?
A:EKS 的容灾能力更灵活(Kubernetes 原生生态),但运维复杂度也更高。ECS(Fargate)的容灾其实已经"够用"——对于 90% 的场景,ECS Fargate 的内置恢复 + Service Auto Scaling + deploymentCircuitBreaker 的组合已经能提供很强的容灾保障。选择的关键不在于"谁更强",而在于你的团队能否驾驭 Kubernetes 的复杂度。
总结
AWS 五大计算服务——EC2、Lambda、ECS/EKS、Auto Scaling 和 LightSail——各自提供了不同层次的容灾能力,但没有哪一个能"开箱即用"地满足所有容灾需求。
构建可靠的容灾体系,需要从三个维度同时发力:
- 架构层面:跨 AZ、无状态设计、自动化恢复
- 流程层面:定期演练、Runbook 维护、事件响应定级
- 文化层面:把容灾当作日常工程实践,而不是"等出了事再说"的应急方案
最终,容灾的目标不是"永不故障"——那不可能——而是故障发生时,用户感知不到,或者感知极小。这才是云原生时代真正的高可用。
本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多 AWS 云计算服务与解决方案。