Amazon SOA-C02: 计算与自动伸缩 — 学习指南
属于 AWS SysOps Administrator Associate SOA-C02 — 学习指南. 使用经过验证的答案练习: Amazon 考试中心, 或参加限时模拟考试: ExamRoll.io.
实例放置、容量规划与伸缩指标
放置决策影响延迟和故障域:放置组提供 cluster(低延迟网络)、spread(关键实例分散到不同机架)和 partition(故障隔离的分区)策略。ASG 默认在多个可用区(AZ)之间均衡实例;推荐采用感知可用区的容量规划,以避免单可用区热点。CLI 命令:aws ec2 create-placement-group –strategy cluster|spread|partition。
容量规划需考虑实例类型、购买选项和指标:
- 实例类型:根据工作负载选择 CPU/内存/网络优化的实例系列(M/C/R/T/D/I);通过有代表性的负载测试进行衡量。
- 购买选项:On-Demand 用于可预测性,Reserved 或 Savings Plans 用于稳态工作负载的成本削减,Spot 用于瞬态工作负载的成本效益;使用 MixedInstancesPolicy 组合不同的实例类型和购买选项。
- 伸缩指标:默认的 ASG 指标使用组内平均 CPU 使用率;推荐使用应用层指标进行目标跟踪,例如 ALB 的 RequestCountPerTarget 或自定义 CloudWatch 指标(如队列深度)。常见模式:
- 当需要每个实例处理稳定数量的请求时,使用目标跟踪伸缩策略,并结合 ALB 的 request-count-per-target 指标。
- 对于突然的大规模流量峰值,使用步进伸缩,并定义好恢复步骤。
- 对于每日周期性工作负载,考虑使用 Predictive Scaling。
实例恢复、终止行为与维护
通过为硬件问题启用自动恢复(使用带 EC2 Recover 操作的 CloudWatch 警报)和处理计划事件(describe-instance-status),来为实例故障和维护做好规划。配置 instance-initiated-shutdown-behavior 和 EBS 的 DeleteOnTermination 标志来控制卷的生命周期;使用 aws ec2 modify-instance-attribute –instance-id i-xxx –block-device-mappings 进行调整。
ASG 中的终止行为:ASG 终止策略决定首先终止哪个实例(默认:最旧的启动配置、实例健康状况和可用区均衡的启发式算法)。重要的操作细节:
- 本地状态是临时的:实例存储卷和内存中的缓存会在实例终止时丢失。不要假设替换实例会保留本地状态;应将关键数据持久化到 EBS(并进行适当的快照/备份)、S3 或外部缓存(ElastiCache)。
- 在实例终止前,使用生命周期挂钩来排空流量并卸载状态。
- 使用实例刷新或蓝/绿部署进行维护,以安全地替换实例;aws autoscaling start-instance-refresh –auto-scaling-group-name my-asg –preferences file://prefs.json。
常见陷阱与决策标准
- 依赖默认冷却时间和仅基于 CPU 的指标:应选择与应用程序行为一致的指标(如 ALB RequestCountPerTarget、队列深度);设置冷却时间以适应启动时间,并设置 HealthCheckGracePeriod 以避免伸缩振荡。
- 未使用生命周期挂钩进行优雅终止:没有挂钩,正在处理的请求和本地缓存会丢失;应通过 SNS/SQS/Lambda 实现挂钩,以排空连接并持久化状态。
- 假设实例替换会保留本地状态:本地实例存储和内存缓存是临时的;应设计为无状态实例,或将状态复制到持久化存储中。
- 过度使用粘性会话(stickiness):粘性会话会加剧负载分布不均,并使伸缩和更新复杂化;推荐使用外部会话存储(如 ElastiCache、DynamoDB)以支持横向扩展。
- 忽略可用区均衡和放置组:将过多实例放在单个可用区或 cluster 放置组中会产生单点故障;应使用 ASG 的多可用区分布和适当的放置组策略。
- 错误配置健康检查集成:ASG 的 health-check-type 必须与 ELB/目标组的健康检查相匹配,并且 HealthCheckGracePeriod 必须足够长以支持应用初始化,否则健康的实例也可能被终止。
实践问题:用例场景
StreamingCo 公司运营一个视频缩略图 API,该 API 每天都会经历流量高峰,并在 EC2 实例上使用本地磁盘缓存;最近,扩容速度缓慢,且被终止的实例会丢失缓存,导致响应时间变差。
- 将启动配置迁移到启动模板(Launch Template),并制作一个包含运行时依赖的轻量级 AMI;使用 aws ec2 create-launch-template 和版本控制来实现不可变部署。
- 配置一个带有 MixedInstancesPolicy 的 ASG,该策略列出多种实例类型,并采用 Spot + On-Demand 的分配策略来平衡成本和容量。
- 挂载一个 ALB,并基于 ALB 的 RequestCountPerTarget 指标使用目标跟踪伸缩(TargetTrackingScaling),同时将 HealthCheckGracePeriod 设置为应用程序的启动时间。
- 在 ASG 终止时实施生命周期挂钩,以排空连接,并在实例终止前运行一个 Lambda/SNS 流程,将必要的缓存键持久化到 ElastiCache 或 S3。
- 将会话和缓存状态外部化到 ElastiCache 或 S3,并使用放置组/可用区分布来满足延迟和故障域的要求。
理由:使用启动模板和不可变部署可以减少启动时间的差异性;基于 ALB 的目标跟踪伸缩将伸缩与请求负载而非 CPU 挂钩;生命周期挂钩可防止终止时的数据丢失;将缓存外部化消除了对临时本地状态的依赖,从而通过混合实例/购买策略实现快速、安全的伸缩并降低成本。
练习这些题目 → · 在 ExamRoll.io 上限时练习 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
通过考试 →