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

O Apache HTTP Server pode ser executado em uma máquina dedicada para fazer o balanceamento de carga com 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:

Configuração

  1. Edite o arquivo de configuração /usr/local/apache2/conf/httpd.conf. Localize e descomente as linhas abaixo, para habilitar os respectivos módulos:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
    LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
    LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
    
  2. Configure o cluster de balanceamento de carga, adicionando o trecho abaixo no final do arquivo /usr/local/apache2/conf/httpd.conf:

    <Proxy balancer://ttscluster>
      BalancerMember ws://<IP do host1>:9090
      BalancerMember ws://<IP do host2>:9090
      ProxySet lbmethod=byrequests
    </Proxy>
    
    ProxyPass /tts-server balancer://ttscluster
    
    <Location "/tts-balancer">
        SetHandler balancer-manager
    </Location>
    

Criptografia SSL (opcional)

Caso seja necessário configurar uma conexão Websocket com criptografia SSL, descomente as seguintes linhas do arquivo /usr/local/apache2/conf/httpd.conf:

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

Nota

A configuração padrão do SSL definida no arquivo httpd-ssl.conf habilita a porta 443 para conexões seguras, utilizando os arquivos server.key e server.crt como certificados auto-assinados.

Para gerar um certificado auto-assinado, utilize a ferramenta OpenSSL e copie os arquivos gerados para o diretório do Apache HTTP Server:

$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
$ sudo cp server.key /usr/local/apache2/conf/
$ sudo cp server.crt /usr/local/apache2/conf/

Execução

Para iniciar o Apache HTTP Server:

$ sudo /usr/local/apache2/bin/apachectl -k start

Para parar o Apache HTTP Server:

$ sudo /usr/local/apache2/bin/apachectl -k stop

Endereçamento

O servidor balanceador de carga deve ser endereçado da seguinte forma:

  1. Endereço do servidor de balanceamento:
  • Para configuração sem criptografia (porta padrão é a 80):

    http://<IP_Balanceador>/tts-server
    ws://<IP_Balanceador>/tts-server
    
  • Para configuração com criptografia (porta padrão é a 443):

    https://<IP_Balanceador>/tts-server
    wss://<IP_Balanceador>/tts-server
    
  1. Endereço da página web do monitor de balanceamento (porta padrão é a 80), que está mostrado na figura abaixo:

    http://<IP_Balanceador>/tts-balancer