Vamos Amazon, dê um pouco de amor para ELB

O Elastic Load Balancer (ELB) da Amazon é uma ótima ferramenta. Você pode colocá-lo na frente de seus servidores e ele distribuirá a carga de entrada entre eles. Esta é uma ótima notícia se você deseja fornecer um serviço responsivo altamente disponível.

No entanto, nos deparamos com algumas limitações ao longo do caminho:

Ponderação

Não há uma maneira fácil de fornecer pesos para cada um dos seus servidores por trás do ELB. Se você tiver diferentes tamanhos ou capacidades de VM, provavelmente desejará que as máquinas mais capazes suportem a carga. Ele pode fazer isso por baixo do capô, mas, nesse caso, não há como configurar manualmente.

Drenante

Um recurso bastante padrão dos balanceadores de carga é a capacidade de drenar um nó antes de removê-lo do pool. Isso significa que nenhuma nova conexão será enviada para a máquina de drenagem, para que ela possa ser retirada normalmente sem interromper as conexões. Isso também significa que, até que o ELB tenha marcado a máquina como inválida, as solicitações roteadas para ela falharão. Pior ainda, se você remover uma instância em execução de um pool ELB, todas as conexões do cliente a ela serão encerradas imediatamente.

WebSockets

Websockets é uma excelente tecnologia associada ao HTML5 que permite que você execute uma comunicação bidirecional e de baixa sobrecarga entre um navegador e um servidor. Atualmente, o ELB não oferece suporte a HTTP 1.1 e WebSockets (diretamente) e não há boas informações sobre quando eles o farão .

Existe uma solução alternativa :

Crie uma regra TCP ELB para WebSockets em vez de uma regra HTTP. Isso passará pela conexão na camada de transporte ao invés da camada de aplicação. Isso funciona bem, mas você não tem como dizer o endereço real do cliente. O ELB adiciona um cabeçalho x-forwarded-for com o IP do cliente ao executar no modo HTTP, mas não adiciona (e não pode) ao executar no modo TCP.

Idealmente, o ELB teria suporte para WebSockets no modo HTTP. Isso permitiria definir o cabeçalho x-forwarded-for na negociação de atualização.

Certificados SSL

O ELB permite que você carregue um certificado SSL para permitir o encerramento seguro, o que é uma ótima notícia, no entanto, isso é limitado a um certificado por instância do Load Balancer, o que pode ser um problema para alguns.

Chega de negatividade

Apesar dos pontos acima, o ELB oferece uma solução direta, relativamente escalonável e de baixa manutenção para quem hospeda no EC2.

Só espero que em um futuro muito próximo a Amazon se esforce para arredondar algumas dessas arestas.

Nota: inicialmente escrevi este post em agosto de 2012, mas nunca tive tempo de publicá-lo em lugar nenhum. É decepcionante que, entretanto, nada pareça ter mudado muito.

Discuta no Hacker News