【发布时间】:2017-12-09 20:32:28
【问题描述】:
我们将 AWS 经典 ELB 用于我们的服务,我们的服务一次只能处理 x 个请求。如果请求的数量大于 x,那么我们不想将这些请求路由到实例,也不想丢失这些请求。我们想限制在 ELB 中注册的实例的连接数。是否有一些 ELB 设置来配置与实例的最大连接数?
我能找到的另一个解决方案是使用 ELB 连接耗尽,但基于 ELB 文档 [1] ,使用连接耗尽将在处理飞行中的请求后将实例标记为 OutofService。这是否意味着在处理进行中的请求后,实例将被终止并从 ELB 中注销?我们不想终止和注销实例,我们只想限制与实例的连接数。有什么解决办法吗?
[1] http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-conn-drain.html
【问题讨论】:
-
您不想将多余的请求发送到实例,也不想丢失请求。你想对他们做什么?另外,您能否提供有关您的后端的更多信息——请求需要很长时间(例如 20 多秒)还是非常快速的请求?请求是来自网络浏览器还是来自后端系统(例如 API 调用)?
-
@John 的问题,“你想用它们做什么?” 至关重要。他们需要去某个地方,或者导致立即错误,或者他们需要在平衡器中排队,直到后端的可用插槽可用或在等待时间槽太久后超时到期。 ELB 无法做到这一点,但可以使用 HAProxy 来完成,HAProxy 可以部署在 ELB 后面以实现冗余。我在我的一些应用程序中执行此操作——暂停溢出请求,直到后端的时隙空闲。请说明您对溢出请求的预期操作。
-
@JohnRotenstein 请求将来自 API 调用。请求不需要很长时间(
-
为什么不让他们将消息放到 SQS 队列中呢?然后,您可以控制接收消息的速率,并让请求在发送时尽快进入,您需要某种方式将消息发送回请求者或像 Chris White 在他的回答中建议的那样扩展应用程序实例。
-
按照原标题,有没有办法告诉ELB“我的3个实例中的每一个最多只能处理150个并发;如果你得到超过450个并发,给我450和放下其余的”?
标签: amazon-web-services amazon-elb