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. 7 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/ws/v3/recognize balancer://asrcluster_ws/asr/ws/v3/recognize

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

            ProxyPass /asr/rest/v3/recognize balancer://asrcluster_rest/asr/rest/v3/recognize

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

</VirtualHost>

    <VirtualHost *:8026>

            <Proxy balancer://asrcluster_grpc>
                    BalancerMember http://<IP do ASR 1>:8026
                    BalancerMember http://<IP do ASR 2>:8026
                    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
$ 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 do 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/ws/v3/recognize

API ASR REST:

http:<IP_Balanceador>/asr/rest/v3/recognize

API ASR GRPC:

<IP_Balanceador>:8026

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

http://<IP_Balanceador>/asr-balancer