Balanceamento de carga para interface WebSocket/REST

Quando o limite de processamento de uma instância do servidor WebSocket/REST do CPqD Texto Fala é atingido e não é suficiente para atender a demanda das aplicações clientes, é necessário aumentar a capacidade do sistema, adicionando novas instâncias ao ambiente de execução. Com isso, é necessário utilizar um software para realizar a distribuição e balanceamento de carga das aplicações clientes entre as instâncias do servidor.

Este guia considera uma topologia bastante simples para criar um cluster de Síntese de Fala, utilizando o Apache HTTP Server como balanceador de carga. Ela pode ser alterada, utilizando esquemas mais complexos de balanceamento, a fim de prover alta disponibilidade, eliminando pontos de falha (single point of failure).

Nota

Este guia é apenas uma sugestão de configuração para uma arquitetura utilizando balanceamento de carga. O suporte ao produto do CPqD Texto Fala não contempla a configuração de balanceamento de carga, podendo ser contratada separadamente. Além disso, o CPqD não dá suporte para produtos de terceiros, como o Apache HTTP Server.

Requisitos

A instalação do Apache HTTP Server em uma máquina dedicada para fazer o balanceamento de carga requer a seguinte configuração mínima:

  • Hardware:
    • 1 GB livres de RAM
    • 100 MB livres de HD
    • 2 vCPU’s @ 2.20 GHz
    • Interface de rede 100 Mpbs
  • Software:

Instalação do Apache

Nosso exemplo foi baseado no Apache HTTP Server 2.4.6. Para instalar o Apache, execute:

$ sudo yum -y groupinstall "Web Server"

Configuração

Configure o cluster de balanceamento de carga, criando o arquivo /etc/httpd/conf.d/tts-balancer.conf com o seguinte conteúdo:

<VirtualHost *:80>

ProxyRequests off

<Proxy balancer://ttscluster_ws>
    BalancerMember ws://<IP do TTS 1>:9090
    BalancerMember ws://<IP do TTS 2>:9090
    ProxySet lbmethod=bybusyness
</Proxy>

ProxyPass /tts-server/ws balancer://ttscluster_ws/tts-server/ws

<Proxy balancer://ttscluster_rest>
    BalancerMember http://<IP do TTS 1>:9090
    BalancerMember http://<IP do TTS 2>:9090
    ProxySet lbmethod=bybusyness
</Proxy>

ProxyPass /tts-server/rest balancer://ttscluster_rest/tts-server/rest

<Location "/tts-balancer">
    SetHandler balancer-manager
</Location>

</VirtualHost>

Execução

Para iniciar o Apache HTTP Server:

$ sudo systemctl start httpd

Para verificar se o Apache HTTP Server está executando corretamente:

$ sudo systemctl status httpd

Para parar o Apache HTTP Server:

$ sudo systemctl stop httpd

Acesso

O servidor com balanceador de carga deve ser endereçado usando as mesmas URLs das APIs WebSocket e REST do CPqD Texto Fala. Mude apenas o IP para o balanceador, e a porta de acesso para 80 (neste caso nem é preciso escrevê-la).

API REST:

http://<IP_Balanceador>/tts-server/rest

API WebSocket:

ws://<IP_Balanceador>/tts-server/ws

A página Web do Monitor de Balanceamento pode ser acessada com:

http://<IP_Balanceador>/tts-balancer