Os balanceadores de carga Elastic podem distribuir corretamente o tráfego para diferentes instâncias de tamanho

10

Há pouco olhei em Elastic Load Balancers. Pelo que entendi, eles apenas fazem round robin, distribuindo uniformemente as conexões para os servidores por trás deles. Então, o que acontece se você tiver instâncias de tamanho diferentes por trás de um ELB? Ele envia mais conexões para a instância maior ou continua a distribuir uniformemente as conexões, o que significa que você realmente não deve usar instâncias de tamanhos diferentes.

    
por Sean Bannister 06.05.2012 / 18:29

2 respostas

15

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.

    
por 06.05.2012 / 20:12
1

Com base nas declarações feitas até agora, o algoritmo de distribuição é extremamente simples.

O front-end do ELB é tipicamente mais de uma instância do ELB, e a distribuição é round-robin.

O algoritmo de back-end (suas instâncias) afirma ser:

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.

Isso inferiria que, se uma instância maior tiver menos solicitações pendentes, mais tráfego seria roteado para elas. Não há como garantir isso.

    
por 06.05.2012 / 20:10