弹性负载平衡器可以正确地将stream量分配给不同大小的实例

刚刚查看了Elastic Load Balancer。 据我所知,他们只是循环,平均分配连接到服务器后面的服务器。 那么,如果ELB背后有不同大小的实例会发生什么呢? 它发送更多的连接到更大的实例,还是继续平均分配连接,这意味着你真的不应该使用不同大小的实例。

据我所知,他们只是循环,平均分配连接到服务器后面的服务器。

有一种,但不是我想的 – 不幸的是, 亚马逊ELB路由文档不存在,所以需要组装一些作品得出结论。 以下是Elastic Load Balancing开发人员指南中唯一的片段,请参阅Elastic Load Balancing概述中的“ 粘滞会话”一节:

缺省情况下,负载均衡器将每个请求独立路由到负载最小的应用程序实例 。 但是,您可以使用粘滞会话function(也称为会话关联),该function使负载平衡器能够将用户的会话绑定到特定的应用程序实例。 这可确保在会话期间来自用户的所有请求将被发送到同一个应用程序实例。 [强调我的]

现在最小负载是什么意思? 同样,我所知道的唯一解释是从2009年到ELB战略的 AWS团队回应有些模糊:

ELB松散地跟踪在每个实例中有多less请求(或者TCP的连接)是未完成的。 它不监视每个实例的资源使用情况(如CPU或内存)。 ELB目前将在其认为最less的未完成要求的实例中进行循环。 [强调我的]

这对于他们的系统体系结构和解决用例有很大的意义,但显然不能提供高级高可用性场景所需的路由的透明度和/或控制。

请注意,根据解释的不同,最近的AWS团队对Elastic Load Balancing – 负载分配策略的响应可能会有些矛盾,

循环法确实起作用,但客户端会话并不总是遵守TTL或DNScaching,因此您可能会得到扭曲的结果和不均匀的请求分布。 ELB并没有实施哪些stream量/请求实例在那里进行stream量路由决策。 [强调我的]

健康检查

当然,上面的内容是通过适当logging,透明和可控的健康检查进行修改的 ,这样可以让您有一些杠杆作用(可能会暂时)将其从路由中移除,如前面提到的AWS小组对ELB策略也是如此:

负载均衡器监视您的负载均衡器中注册的实例的健康状况。 当负载均衡器检测到实例出现问题时,会停止向其分配stream量。 当实例再次健康时,负载均衡器将重新启动向其分配stream量。 这个过程允许您的应用程序自动对失败的实例做出反应,而不必在configuration健康检查之外参与其中。

结论

虽然当然不寻常,但我不明白为什么ELB不应该与不同的Amazon EC2实例types的池一起工作 – 我还没有尝试过,并build议使用CloudWatch监控负载均衡器以及监控您的个人EC2实例并关联结果,以便最终获得相应的洞察力和信心。

根据迄今为止所做的声明,分配algorithm非常简单。

ELB的前端通常是多于一个的ELB实例,分发是循环的。

后端(你的实例)algorithm声称是:

ELB松散地跟踪在每个实例中有多less请求(或者TCP的连接)是未完成的。 它不监视每个实例的资源使用情况(如CPU或内存)。 ELB目前将在其认为最less的未完成要求的实例中进行循环。

这将推断如果一个较大的实例有较less的未完成的请求,那么更多的stream量将被路由到它们。 没有办法保证这一点。