Balanceamento de carga efetivo para clientes atrás de um NAT

1

Temos um aplicativo da web que é executado em uma nuvem de servidores da web. À noite, o aplicativo da web é usado principalmente em nosso escritório local, que usa um NAT para conectar várias máquinas à Internet. As solicitações para o aplicativo da Web vão do PC do cliente até o NAT, pela Internet, por meio de um balanceador de carga e depois até um nó na nuvem. O balanceador de carga usa persistência de IP de origem. Ilustrado abaixo é a nossa situação.

Nuvem < - > Balanceador de carga < - > INTERNET < - > NAT < - > 20 clientes

Como o LB usa persistência de IP de origem, todas as solicitações da Web de todos os clientes atingem o mesmo nó na nuvem. Isto é, naturalmente, devido ao NAT, que garante que cada pacote TCP / IP contenha o mesmo IP de origem.

Como todos os pedidos atingem o mesmo nó na nuvem com muita frequência, o nó produz um erro 503: link , porque o nó fica sobrecarregado com conexões.

Qual é a melhor solução para esse problema? Observe que não temos controle sobre o balanceador de carga e os nós na nuvem. Nós só temos acesso ao shell para fazer upload de arquivos para nosso aplicativo da web.

  1. Instalar um servidor da web em nosso escritório local, que pode lidar com 20 clientes? (Na verdade, não queremos fazer a manutenção do servidor.)
  2. Conecte todos os clientes à WAN de modo que cada cliente receba seu próprio IP adres? (Inseguro e inviável com o IPv4, talvez viável com o IPv6.)
  3. Veja se o nosso host pode configurar o balanceador de carga para usar o balanceamento de carga baseado em DNS? (Isso resolverá nosso problema? Onde residirá o cache do DNS?)
  4. Veja se o nosso host pode configurar o balanceador de carga para usar um cookie HTTP para balanceamento de carga? (Provavelmente a melhor solução se os nós tiverem um IP estático).
  5. Outra solução todos juntos ...
por meijuh 04.10.2012 / 21:18

1 resposta

1

A opção 4 é a mais "fácil" porque significa (1) nenhum novo servidor e (2) nenhuma reconfiguração de IP em sua rede.

O DNS pode funcionar (você está falando sobre o round-robin do DNS, certo?), mas provavelmente é mais trabalhoso do que o balanceamento de carga baseado em cookie. Eu teria uma conversa com seu anfitrião sobre isso.

Outra alternativa seria configurar o multi-NAT em seu firewall para que seus clientes internos sejam distribuídos através de um par de IPs externos. Conceitualmente, você pode pensar nisso como um balanceador de carga reversa.

No entanto, os números dos seus clientes são precisos? 20 clientes sobrecarregam seu aplicativo da web? Talvez você devesse abordar o problema que seu aplicativo não consegue lidar com muitos clientes. Sem saber nada sobre o seu aplicativo, 20 parece muito baixo. Mas eu posso estar errado. :)

Uma terceira alternativa: o seu aplicativo exige aderência? Se seus clientes puderem pular do servidor da Web para o servidor da Web sem problemas, esqueça o balanceamento de carga por IP e faça conexões por round-robin ou por conexão com menor número de conexões.

    
por 04.10.2012 / 21:45