AWS 自动伸缩与弹性负载均衡全解析
1. 自动伸缩实例的处理与终止
在 AWS 环境中,新创建的两个实例会迅速处理队列中的任务,使队列长度降至缩减阈值以下。当 CelerySQSLowAlarm 触发时,会终止其中两个实例。
实例终止时,默认会终止启动配置最旧的实例。若有多个实例运行旧配置,或所有实例配置相同,AWS 会终止最接近下一个实例小时的实例,这是最具成本效益的策略,能最大化实例的有效使用寿命。若实例是一起启动的(在自动伸缩组中很常见),有多个实例都“最接近”完整实例小时,此时会从这些实例中随机选择一个终止。也可通过为自动伸缩组分配终止策略来进一步控制此逻辑。
若确认自动伸缩正常工作,且原实例在缩减时未被终止,可使用以下命令恢复 Celery 进程:
supervisorctl celery start
这样,基础设施的 Celery 部分就能根据待处理任务数量动态伸缩,既保证任务快速处理,又避免运行过多实例造成资金浪费。
2. 弹性负载均衡的必要性
系统故障是系统管理员工作中不可避免的一部分。若应用仅托管在单个服务器上,服务器故障会导致应用不可用,直至新服务器或虚拟实例配置完成。为提高应用可靠性,可将其托管在多个实例上,并在它们之间分配流量。当单个实例出现故障时,只要剩余实例有足够能力承担额外请求,应用就能继续平稳运行,这就是负载均衡,负责分配流量的服务器就是负载均衡器。
在 AWS 中,自动伸缩可自动启动新实例替换故障实例,或动态增加容量以响应需求。目前,仅在基础设施的 Celery 部分