应用程序负载均衡器不会保留请求,直到自动缩放组打开新实例
Application Load balancer doesn't keep requests till opening new instances by an autoscaling group
在 AWS 上,我使用自动扩展策略创建了一个自动扩展组,该策略基于 Application Load Balancer 添加了一个新实例:每个目标的平均请求数高于 5。
目标组是发送到负载均衡器的 HTTP 请求数。
ASG 设置为最小 1、最大 10 和所需的 1。
我尝试向ELB发送200个请求,并将接收请求的实例IP记录在数据库中。我发现大多数请求都发送到同一个实例,其中一些请求收到(网关超时 504),很少有人什么也没收到。
ASG 启动新实例,但在请求已发送之后。因此,新实例不会从负载均衡器收到任何东西。
我认为原因是云监视每 > 1 分钟发送每个实例的平均请求数,并且打开一个新实例的时间可能比请求超时时间更长。
问:有没有一种方法可以将请求保持在队列中或增加它们的超时时间直到新实例存在,然后将这些请求分发到所有实例而不是丢失它们?
问:如果用户同时发送许多请求,我希望 ASG 立即开始扩展并将这些请求均匀分布在实例上,保持每个实例的特定平均请求数。
解决方案是使用 Amazon Simple Queue Service。我们将消息从 API 网关转发到队列。然后,使用云监视警报在队列大小 > 1 时打开 ECS fargate 任务,以从队列中读取消息并进行处理。当队列为空时,使用另一个警报将ECS服务中的任务数设置为0。
在 AWS 上,我使用自动扩展策略创建了一个自动扩展组,该策略基于 Application Load Balancer 添加了一个新实例:每个目标的平均请求数高于 5。
目标组是发送到负载均衡器的 HTTP 请求数。
ASG 设置为最小 1、最大 10 和所需的 1。
我尝试向ELB发送200个请求,并将接收请求的实例IP记录在数据库中。我发现大多数请求都发送到同一个实例,其中一些请求收到(网关超时 504),很少有人什么也没收到。
ASG 启动新实例,但在请求已发送之后。因此,新实例不会从负载均衡器收到任何东西。
我认为原因是云监视每 > 1 分钟发送每个实例的平均请求数,并且打开一个新实例的时间可能比请求超时时间更长。
问:有没有一种方法可以将请求保持在队列中或增加它们的超时时间直到新实例存在,然后将这些请求分发到所有实例而不是丢失它们? 问:如果用户同时发送许多请求,我希望 ASG 立即开始扩展并将这些请求均匀分布在实例上,保持每个实例的特定平均请求数。
解决方案是使用 Amazon Simple Queue Service。我们将消息从 API 网关转发到队列。然后,使用云监视警报在队列大小 > 1 时打开 ECS fargate 任务,以从队列中读取消息并进行处理。当队列为空时,使用另一个警报将ECS服务中的任务数设置为0。