Pelo que entendi, eles fazem round robin, distribuindo uniformemente as conexões com os servidores por trás deles.
Acho que não, mas não é bem assim - infelizmente, a documentação de roteamento do Amazon ELB não existe, portanto é preciso montar algumas peças para tirar uma conclusão. Aqui está o único fragmento do Guia do desenvolvedor do Elastic Load Balancing que eu conheço, consulte a seção Sessões vinculativas na Visão geral do Elastic Load Balancing :
Por padrão, um balanceador de carga roteia cada solicitação independentemente para a instância do aplicativo com a menor carga . No entanto, você pode usar o recurso de sessão permanente (também conhecido como afinidade de sessão), que permite ao balanceador de carga vincular a sessão de um usuário a uma instância específica do aplicativo. Isso garante que todas as solicitações vindas do usuário durante a sessão sejam enviadas para a mesma instância do aplicativo. [ênfase minha]
Agora, o que significa exatamente a menor carga ? Novamente, a única explicação que tenho conhecimento é a resposta da equipe da AWS, de certa forma vaga, de 2009 à Estratégia ELB :
O ELB monitora livremente quantas solicitações (ou conexões no caso do TCP) estão pendentes em cada instância. Ele não monitora o uso de recursos (como CPU ou memória) em cada instância. Atualmente, o ELB fará rodízio entre as instâncias que acredita ter o menor número de solicitações pendentes. [ênfase minha]
Isso faz muito sentido em relação à arquitetura do sistema e aos casos de uso abordados, mas obviamente não fornece a transparência e / ou controle do roteamento que você pode desejar ou precisar para cenários avançados de alta disponibilidade.
Observe que, dependendo da interpretação, isso pode ou não ser contradito por uma resposta mais recente da equipe da AWS às políticas de Elastic Load Balancing - Load Distribution :
O round-robin entra em ação, mas as sessões do cliente nem sempre respeitam os caches de TTL ou DNS, para que você possa obter resultados distorcidos e distribuições desiguais de solicitações. O ELB não efetua quais instâncias de tráfego / solicitações receberam até hoje nas decisões de roteamento de tráfego. [ênfase minha]
Verificações de Saúde
Obviamente, o acima foi alterado com as verificações de integridade devidamente documentadas, transparentes e controláveis , que permitem alavancar (potencialmente temporariamente) a remoção de instâncias da inclusão no roteamento em primeiro lugar, conforme resumido na resposta da equipe da AWS acima mencionada ao ELB Estratégia também:
O balanceador de carga monitora a integridade de suas instâncias registradas no seu balanceador de carga. Quando o balanceador de carga detecta um problema com uma instância, ele para de distribuir o tráfego para ele. Quando a instância estiver íntegra novamente, o balanceador de carga reiniciará a distribuição de tráfego para ela. Esse processo permite que seu aplicativo reaja automaticamente a instâncias com falha sem que você precise se envolver além da configuração da verificação de integridade.
Conclusão
Embora certamente incomum, não vejo por que o ELB não deve funcionar com um conjunto de diferentes tipos de instâncias do Amazon EC2 - eu ainda não tentei isso e recomendo os dois: Monitorando o seu balanceador de carga usando o CloudWatch e monitorando suas instâncias individuais do EC2 e correlacione os resultados para obter, eventualmente, informações e confiança sobre essa configuração.