As I understand it they just do round robin, evenly distributing connections to the servers behind them.
Mais ou menos, eu acho - infelizmente, a documentação de roteamento do Amazon ELB está longe de ser inexistente, então é preciso montar algumas peças para chegar a uma conclusão. Este é o único fragmento do Guia do desenvolvedor do Elastic Load Balancing que estou ciente de, veja a seção Sticky Sessions em Visão geral do Elastic Load Balanceamento :
By default, a load balancer routes each request independently to the application instance with the smallest load. However, you can use the sticky session feature (also known as session affinity), which enables the load balancer to bind a user's session to a specific application instance. This ensures that all requests coming from the user during the session will be sent to the same application instance. [emphasis mine]
Agora, o que menor carga significa exatamente? Mais uma vez, a única explicação que eu conheço é a resposta da equipe da AWS, um pouco vaga, de 2009 a estratégia da ELB :
ELB loosely keeps track of how many requests (or connections in the case of TCP) are outstanding at each instance. It does not monitor resource usage (such as CPU or memory) at each instance. ELB currently will round-robin amongst those instances that it believes has the fewest outstanding requests. [emphasis mine]
Isso faz muito sentido com relação à arquitetura do sistema e aos casos de uso abordados, mas obviamente não fornece a transparência e / ou o controle do roteamento que você pode desejar ou precisa para cenários avançados de alta disponibilidade.
Por favor, note que, dependendo da interpretação, isso pode ou não ser contradito um pouco por uma resposta mais recente da equipe da AWS para Elastic Load Balancing - Políticas de distribuição de carga :
Round-robin does come into play but the client sessions do not always honour TTL's or DNS caches so you can get skewed results and uneven distributions of requests. The ELB does not take into effect what traffic/requests instances have received to-date in there traffic routing decisions. [emphasis mine]
Verificações de saúde
É claro que o texto acima foi corrigido com os exames de saúde devidamente documentados, transparentes e controláveis. , que dá a você alguma vantagem para (potencialmente temporariamente) remover as instâncias de serem incluídas no roteamento em primeiro lugar, conforme resumido na resposta da equipe da AWS mencionada anteriormente a Estratégia ELB também:
The load balancer monitors the health of your instances registered with your load balancer. When the load balancer detects a problem with an instance, it stops distributing traffic to it. When the instance is healthy again, the load balancer restarts distributing traffic to it. This process allows your application to automatically react to failed instances without your having to be involved beyond configuring the healthcheck.
Conclusão
Embora certamente incomum, não vejo por que o ELB não deve funcionar com um pool de tipos de instâncias diferentes do Amazon EC2 também - embora eu não tenha tentado isso e recomende os dois, Como monitorar seu balanceador de carga Usando o CloudWatch , bem como monitorando suas instâncias individuais do EC2 e correlacionando os resultados, a fim de obter insights e confiança em tais configurações eventualmente.