Como escalar um servidor da Web que suporte pesquisas longas

6

Estou planejando adicionar mais servidores de aplicativos da Web para suportar clientes crescentes, implantando HAproxy e Keepalived para balanceamento de carga e alta disponibilidade.

O uso do meu servidor tem a seguinte característica:

  1. Os trabalhos não exigem muita CPU. A mensagem é um texto JSON inferior a 100 personagem.
  2. Os usuários enviarão mensagens ao servidor por meio do dispositivo cliente Y. Geralmente, 4 a 5 mensagens por dia
  3. Dispositivos cliente X mantém a mensagem de espera do servidor. Se a mensagem estiver disponível no servidor, o dispositivo cliente X deve poder obtê-la dentro de 2 segundos. Caso contrário, esta mensagem está desatualizada.

Por esse motivo,

  1. Os dispositivos cliente X estão usando conexão HTTP de sondagem longa para serem responsivos. Cada conexão durará 5 segundos e será reconectada.
  2. Dispositivos cliente X e Dispositivos Cliente Y estão conectados ao mesmo servidor, então X e Y podem enviar mensagens facilmente

Pergunta

Se houver mais de 60.000 dispositivos cliente X conectados ao servidor, meu balanceador de carga ou roteador estará ficando sem porta TCP. Qual é a melhor maneira de ampliar, digamos, 20.000 usuários?

Meu servidor está rodando no servidor Ubuntu, usando o tomcat e o Java Servlet.

    
por Mickey 20.12.2013 / 11:59

2 respostas

5

Eu não acho que seus clientes de 60k sejam o problema real. Você provavelmente terá problemas com descritores de arquivos insuficientes, mas isso deve ser fácil de corrigir como parte da configuração do SO.

Veja por que as conexões não serão seu problema. Cada conexão é caracterizada pelo endereço IP de origem, porta de origem, endereço IP de destino e porta de destino. Dentro da pilha de rede, este quádruplo é usado para combinar pacotes com descritores de arquivos (cada descritor de arquivo representa uma conexão). Seu servidor tem endereço IP de destino fixo e porta de destino (seu servidor é o destino de seu cliente), mas o endereço IP de origem e a porta de origem são variáveis. Port é um número de 16 bits, portanto, o número máximo de conexões de um cliente é de 64K. O endereço IPv4 é um número de 32 bits que oferece 4.294.967.296 endereços de origem possíveis. Fazendo algumas contas básicas, seu servidor poderia ter 64K * 4.294.967.296 conexões mapeadas para um único ip e porta de origem.

É por isso que você provavelmente terá mais problemas com o número máximo de descritores de arquivos abertos e, em seguida, com o número de clientes.

    
por 29.12.2013 / 06:53
1

A abordagem mais simples pode ser implementar o balanceamento de carga no nível do DNS.

Significa: possui uma entrada DNS round robin que equilibra 2, 3 ou mais balanceadores físicos.

    
por 23.12.2013 / 14:10