我们使用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
答案 0 :(得分:3)
ELB更倾向于在为其注册的实例之间均匀地分配流量。如果你有更多的流量,你会抛出更多的实例来处理它。这通常是load balancer is matched with an auto scaling group的原因。 Auto Scaling组将查看设置约束,并根据该设置约束旋转更多实例或将其拉低(即,您的流量开始减慢)。
连接耗尽更多是为了从不良实例中提取流量,因此它不会丢失。错误的实例意味着它们没有通过运行状况检查,因为实例上的某些内容被破坏了。 ELB本身并不终止实例,这是Auto Scaling Group打算做的另一部分(基本上终止坏实例并启动一个新实例来替换它)。所有ELB都会停止向其发送流量。
答案 1 :(得分:2)
看来你的情况是:
如果请求的速度高于处理速度,则基本上有三种选择:
最佳解决方案是使用 AWS Lambda函数,而不是要求使用Amazon EC2实例。 Lambda可以直接绑定到 AWS API Gateway ,它可以前端API请求并提供安全性,限制和缓存。
最简单的方法是使用 Auto Scaling 来增加尝试处理已到达请求量的实例数。当存在可预测的使用模式时,这是最好的,例如白天的高负载和晚上的负载较少。当尖峰在短暂,不可预测的时期出现时,它就没用了。
为了完全保证不会丢失请求,您需要使用队列。您需要一个接收请求并将其推送到队列中的初始层,而不是直接发送到您的应用程序的请求。然后,后端进程将处理该消息并返回以某种方式作为响应传回的结果。 (对通过队列传递的消息提供响应更加困难,因为请求和响应之间存在脱节。)
答案 2 :(得分:0)
AWS ELB几乎没有获取请求的限制。如果您的应用程序仅处理'N'连接,请使用ELB后面的多个服务器并设置ELB运行状况检查URL将是您的应用程序URL。一旦您的应用程序无法响应请求,ELB会自动将您的请求转发给ELB后面的另一台服务器。这样你就不会错过任何请求。