Balanceamento de carga

Quando o limite de processamento de uma instância do Servidor de Reconhecimento de 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 de reconhecimento.

Este manual considera uma topologia bastante simples para criar um cluster de Reconhecimento de Fala, utilizando o Apache HTTP Server como balanceador de carga. A figura abaixo ilustra essa topologia. Este é apenas um exemplo e pode ser alterado, utilizando esquemas mais complexos de balanceamento, a fim de prover alta disponibilidade, eliminando pontos de falha (single point of failure).

../_images/balanceador.png

Fig. 6 Topologia do cluster de reconhecimento de fala.

Requisitos de instalação

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 Mbps
  • Software:

    • Recomendação: Linux Red Hat 7 ou CentOS 7

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/asr-balancer.conf com o seguinte conteúdo:

<VirtualHost *:80>

ProxyRequests off

<Proxy balancer://asrcluster_ws>
    BalancerMember ws://<IP do ASR 1>:8025
    BalancerMember ws://<IP do ASR 2>:8025
    ProxySet lbmethod=bybusyness
</Proxy>

ProxyPass /asr-server/asr balancer://asrcluster_ws/asr-server/asr

<Proxy balancer://asrcluster_rest>
    BalancerMember http://<IP do ASR 1>:8025
    BalancerMember http://<IP do ASR 2>:8025
    ProxySet lbmethod=bybusyness
</Proxy>

ProxyPass /asr-server/rest/recognize balancer://asrcluster_rest/asr-server/rest/recognize

<Location "/asr-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
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-08-10 21:01:50 UTC; 3s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 170 (httpd)
   Status: "Processing requests..."
   CGroup: /docker/414f528c91a01e6217ada3e0e7c10dbcfffa9c4a2205043de3ef9f539d43cc0d/system.slice/httpd.service
           ├─170 /usr/sbin/httpd -DFOREGROUND
           ├─171 /usr/sbin/httpd -DFOREGROUND
           ├─172 /usr/sbin/httpd -DFOREGROUND
           ├─173 /usr/sbin/httpd -DFOREGROUND
           ├─174 /usr/sbin/httpd -DFOREGROUND
           ├─175 /usr/sbin/httpd -DFOREGROUND
           └─176 /usr/sbin/httpd -DFOREGROUND

Aug 10 21:01:50 414f528c91a0 systemd[1]: Starting The Apache HTTP Server...
Aug 10 21:01:50 414f528c91a0 systemd[1]: Started The Apache HTTP Server.

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 ASR. Mude apenas o IP para o balanceador, e a porta de acesso para a porta 80 (neste caso nem é preciso escrevê-la).

API ASR WebSocket:

ws:<IP_Balanceador>/asr-server/asr

API ASR REST:

http:<IP_Balanceador>/asr-server/rest/recognize

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

http://<IP_Balanceador>/asr-balancer