使用AWS ELB限制与实例的连接数

时间:2017-07-06 02:00:46

标签: amazon-web-services amazon-elb

我们使用AWS classic ELB作为我们的服务,我们的服务一次只能提供x个请求。如果请求数大于x,那么我们不希望将这些请求路由到实例,也不想丢失这些请求。我们希望限制与ELB注册的实例的连接数。是否有一些ELB设置来配置与实例的最大连接?

我能找到的另一个解决方案是使用ELB连接耗尽但是基于ELB doc [1] ,使用连接耗尽会在提供飞行请求后将实例标记为OutofService。这是否意味着在提供飞行请求后,实例将被终止并取消注册ELB?我们不想终止和取消注册实例,我们只想限制实例的连接数。任何解决方案?

[1 ] http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-conn-drain.html

3 个答案:

答案 0 :(得分:3)

ELB更倾向于在为其注册的实例之间均匀地分配流量。如果你有更多的流量,你会抛出更多的实例来处理它。这通常是load balancer is matched with an auto scaling group的原因。 Auto Scaling组将查看设置约束,并根据该设置约束旋转更多实例或将其拉低(即,您的流量开始减慢)。

连接耗尽更多是为了从不良实例中提取流量,因此它不会丢失。错误的实例意味着它们没有通过运行状况检查,因为实例上的某些内容被破坏了。 ELB本身并不终止实例,这是Auto Scaling Group打算做的另一部分(基本上终止坏实例并启动一个新实例来替换它)。所有ELB都会停止向其发送流量。

答案 1 :(得分:2)

看来你的情况是:

  • 用户正在向您的Load Balancer发送API请求
  • 您有多个与Load Balancer相关联的实例来处理这些请求
  • 您似乎没有使用Auto Scaling
  • 您并不总是有足够的容量来回复传入的请求,但您不想丢失任何请求

如果请求的速度高于处理速度,则基本上有三种选择:

  1. 您可以将消息放入队列,并在容量可用时使用它们。您可以将所有放入队列(简单),或者只在事情太忙(更复杂)时才使用队列。
  2. 您可以通过 Auto Scaling 添加其他Amazon EC2实例或使用 AWS Lambda 进行处理请求(Lambda自动缩放)。
  3. 您可以删除您无法处理的请求。除非你已经实现了一个队列,否则如果请求超过你处理它们的能力,这将在某个时候发生。
  4. 最佳解决方案是使用 AWS Lambda函数,而不是要求使用Amazon EC2实例。 Lambda可以直接绑定到 AWS API Gateway ,它可以前端API请求并提供安全性,限制和缓存。

    最简单的方法是使用 Auto Scaling 来增加尝试处理已到达请求量的实例数。当存在可预测的使用模式时,这是最好的,例如白天的高负载和晚上的负载较少。当尖峰在短暂,不可预测的时期出现时,它就没用了。

    为了完全保证不会丢失请求,您需要使用队列。您需要一个接收请求并将其推送到队列中的初始层,而不是直接发送到您的应用程序的请求。然后,后端进程将处理该消息并返回以某种方式作为响应传回的结果。 (对通过队列传递的消息提供响应更加困难,因为请求和响应之间存在脱节。)

答案 2 :(得分:0)

AWS ELB几乎没有获取请求的限制。如果您的应用程序仅处理'N'连接,请使用ELB后面的多个服务器并设置ELB运行状况检查URL将是您的应用程序URL。一旦您的应用程序无法响应请求,ELB会自动将您的请求转发给ELB后面的另一台服务器。这样你就不会错过任何请求。