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).
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: Ubuntu 22.04
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