Balanceamento de carga

Quando o limite de processamento de uma instância do servidor WebSocket/REST/GRPC do 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 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 *:9090>

            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/ws/v3/synthesize balancer://ttscluster_ws/tts/ws/v3/synthesize
            <Proxy balancer://ttscluster_rest>

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

            </Proxy>

            ProxyPass /tts/rest/v2/synthesize balancer://ttscluster_rest/tts/rest/v2/synthesize
            <Location "/tts-balancer"> SetHandler balancer-manager  </Location>

    </VirtualHost>

    <VirtualHost *:9091>

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

    </Proxy>

    </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, REST e GRPC do 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 GRPC:

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

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