Elastic Load Balancer 能否将流量正确分配到不同大小的实例

Sea*_*ter 10 amazon-ec2 amazon-web-services amazon-elb

刚刚在研究弹性负载均衡器。据我了解,他们只是进行循环,将连接均匀地分配到它们后面的服务器上。那么如果在 ELB 后面有不同大小的实例会发生什么?它会向更大的实例发送更多连接还是继续均匀分布连接,这意味着您真的不应该使用不同大小的实例。

Ste*_*pel 15

据我了解,他们只是进行循环,将连接均匀地分配到它们后面的服务器上。

有点,但我认为不完全 - 不幸的是,Amazon ELB路由文档并非不存在,因此需要组合一些部分才能得出结论。下面是从唯一的片段弹性负载平衡开发者指南我所知道的,见会话粘贴弹性负载均衡的概述

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

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

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

这对于他们的系统架构和解决的用例很有意义,但显然没有提供您可能想要或需要的高级 HA 场景的透明度和/或路由控制。

请注意,根据解释,这可能与最近 AWS 团队对Elastic Load Balancing - Load distribution policies 的响应有所矛盾,也可能不矛盾:

Round-robin 确实发挥了作用,但客户端会话并不总是遵循 TTL 或 DNS 缓存,因此您可能会得到不平衡的结果和不均匀的请求分布。ELB 不会在流量路由决策中考虑迄今为止收到的流量/请求实例。 [强调我的]

健康检查

当然,上述内容经过适当记录、透明和可控的健康检查进行了修改,这使您可以(可能暂时)首先从路由中删除实例,如上述 AWS 团队对ELB 的响应所述策略也是:

负载均衡器监控在负载均衡器中注册的实例的运行状况。当负载均衡器检测到实例有问题时,它会停止向其分配流量。当实例再次健康时,负载均衡器会重新开始向其分配流量。此过程允许您的应用程序自动对失败的实例做出反应,而无需您参与配置运行状况检查之外的工作。

结论

虽然肯定不寻常,但我不明白为什么 ELB 也不应该与不同Amazon EC2 实例类型的池一起使用- 不过我自己还没有尝试过,但会推荐两者,使用 CloudWatch 监控负载均衡器以及监控您的各个 EC2 实例并将结果关联起来,以便最终获得对此类设置的相应洞察力和信心。