Para implementação de web sites onde há a preocupação quanto ao tamanho do tráfego e/ou à disponibilidade, a solução é utilizar um balanceador de carga, à disposição sob a forma de appliance, serviço ou software. Este último costuma ser a modalidade onde existem opções free open source. Alguns exemplos: Apache, Nginx, Stunnel e Pound.

Para o experimento foi utilizado o Pound, um load balancer distribuído sob licença GPL (livre para usar, copiar e distribuir, mas sem garantia/suporte). Ao contrário do Apache e do Nginx, o Pound não possui nenhuma função de servidor http, sendo bastante leve e de configuração descomplicada.
O Pound percebe (por keepalive) quais web servers estão operacionais e distribui as requisições HTTP(S) que recebe, entre eles. No caso de uma configuração básica, não há prioridade entre os servidores backend e o predictor padrão será o aleatório.

topologia Pound

Na demonstração, o cliente requisita o conteúdo referente ao IP virtual da aplicação, na porta 8082, que é respondido pelo Pound, o qual está com esse serviço/porta em estado listening. Ele estão passa tal requisição a um web server, em outra máquina, na porta 80. Após o conteúdo ser entregue ao Pound, este o repassa ao cliente. Ou seja, ele atua como proxy reverso, balanceando a carga entre os servers backend e os isolando do cliente.

Para a aplicação em questão, não foi configurado favicon, motivo pelo qual, para a requisição do ícone, o cliente recebe erro 404 (not found). Todos os outros componentes da aplicação (páginas php) são recebidos normalmente pelo cliente por intermédio do Pound.
Pelo Wireshark se verifica uma distribuição aleatória (que é o predictor padrão) feita pelo Pound.

Requisições do cliente ao index.php: (total de 10):

  • Requisições do balanceador ao server 1: 5 (50%)
  • Requisições do balanceador ao server 2: 1 (10%)
  • Requisições do balanceador ao server 3: 4 (40%)

Requisições do cliente ao registros.php (total de 12):

  • Requisições do balanceador ao server 1: 3 (25%)
  • Requisições do balanceador ao server 2: 3 (25%)
  • Requisições do balanceador ao server 3: 6 (50%)

Por ser um load balancer simples, o Pound possui baixo tempo de implementação e maior facilidade de configuração. Basta a instalação do pacote correspondente e, após isso, a edição do arquivo de configuração.

A capacidade do balanceamento depende dos recursos de hardware onde o pacote é instalado, mas existe registro de implementação bem sucedida com 600 requisições/seg.