应用程序负载均衡器在自动缩放组打开新实例之前不会保留请求

Posted

技术标签:

【中文标题】应用程序负载均衡器在自动缩放组打开新实例之前不会保留请求【英文标题】:Application Load balancer doesn't keep requests till opening new instances by an autoscaling group 【发布时间】:2021-05-02 13:33:42 【问题描述】:

在 AWS 上,我使用自动扩展策略创建了一个自动扩展组,该策略基于应用程序负载均衡器添加新实例:每个目标的平均请求计数高于 5。

目标组是发送到负载均衡器的 HTTP 请求数。

ASG 设置为最小值 1、最大值 10 和所需的 1。

我尝试向 ELB 发送 200 个请求,并将接收请求的实例的 IP 记录在数据库中。我发现大多数请求都发送到同一个实例,其中一些收到(网关超时 504),很少收到什么。

ASG 启动新实例,但请求已经发送。因此,新实例不会收到来自负载均衡器的任何信息。

我认为原因是 Cloud Watch 每 > 1 分钟发送一次每个实例的平均请求数,并且可能打开一个新实例的时间比请求超时的时间长。

问:有没有一种方法可以将请求保留在队列中或增加它们的超时直到新实例存在,然后将这些请求分发到所有实例而不是丢失它们? 问:如果用户同时发送多个请求,我希望 ASG 立即开始扩展,这些请求均匀分布在实例上,保持每个实例的特定平均请求数。

【问题讨论】:

【参考方案1】:

解决方案是使用 Amazon Simple Queue Service。我们将消息从 API Gateway 转发到队列。然后,当队列大小> 1 时,使用云监视警报打开 ECS fargate 任务,以从队列中读取消息并进行处理。当队列为空时,另一个警报用于将ECS服务中的任务数设置为0。

【讨论】:

以上是关于应用程序负载均衡器在自动缩放组打开新实例之前不会保留请求的主要内容,如果未能解决你的问题,请参考以下文章

具有自动缩放和负载均衡器的永久实例

网络负载均衡器目标组中的 AWS Auto Scaling 目标

创建自动缩放网络服务器组添加到现有 elb

EC2 上的负载均衡器 + 自动缩放 + Mysql

当同一个实例组位于两个不同的负载均衡器后面时,速率限制将如何工作

自动缩放,弹性 IP