> For the complete documentation index, see [llms.txt](https://wedocs.gitbook.io/wedocs-5.2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wedocs.gitbook.io/wedocs-5.2/infraestrutura-instalacao-e-requisitos/configuracoes-criticas-do-servidor/balanceamento-de-carga-servidor-apache.md).

# Balanceamento de Carga (Servidor Apache)

O balanceamento de carga permite distribuir as requisições recebidas pelo **Apache** entre múltiplas instâncias do serviço REST do **Weknow Server**, aumentando a capacidade de processamento, a disponibilidade e a escalabilidade da aplicação.

Essa configuração é recomendada apenas para ambientes com elevado volume de acessos simultâneos ou que necessitem de maior disponibilidade dos serviços publicados pelo Weknow.

Na maioria das implantações, uma única instância do **Apache** é suficiente para atender às necessidades do ambiente.

***

### Quando utilizar

O balanceamento de carga é recomendado em cenários como:

* grande número de usuários simultâneos;
* ambientes com alta disponibilidade;
* necessidade de distribuir requisições entre múltiplas instâncias do Apache;
* arquiteturas distribuídas com múltiplos servidores.

Caso o ambiente possua apenas uma instância do Apache e apresente desempenho satisfatório, não há necessidade de realizar esta configuração.

***

### Como funciona

No balanceamento de carga, uma instância do Apache atua como **balanceador**, recebendo as requisições dos usuários e distribuindo-as entre uma ou mais instâncias do Apache responsáveis pela comunicação com o **Weknow Server**.

Cada instância adicional (Worker) processa parte das requisições recebidas, permitindo distribuir a carga de trabalho entre os servidores configurados.

```
                 Usuários
                     │
                     ▼
          Apache (Balanceador)
                     │
         ┌───────────┴───────────┐
         ▼                       ▼
 Apache (Worker 1)        Apache (Worker 2)
         │                       │
         └───────────┬───────────┘
                     ▼
               Weknow Server
```

***

### Configuração do Apache Balanceador

As instruções abaixo foram elaboradas utilizando como referência o **Apache 2.4.43**.

No arquivo **httpd.conf** da instância do Apache que atuará como **balanceador**, configure o serviço responsável por distribuir as requisições entre os Workers.

```apache
Require all granted

</Proxy>

ProxyPass /weknow balancer://DataSnap_Server_Balancer/weknow

Define SRVROOT "C:/Program Files/Weknow/ApacheBalancer"
```

Caso seja necessário adicionar novas instâncias ao balanceamento, basta incluir novos membros na configuração do balanceador.

***

### Configuração dos Apache Workers

Cada instância do Apache responsável pelo processamento das requisições deverá possuir uma configuração semelhante à apresentada abaixo.

```apache
Define SRVROOT "C:/Program Files/Weknow/ApacheWorker1"

Listen 81

ServerName localhost

LoadModule webbroker_module "C:/Program Files/Weknow/Server/wknw_server_apache.dll"

<Location /weknow>

SetHandler wknw_server_apache-handler

</Location>
```

Repita essa configuração para cada nova instância (Worker) adicionada ao ambiente, ajustando os diretórios, portas e demais parâmetros conforme a arquitetura adotada.

***

### Boas práticas

Para garantir maior estabilidade do ambiente, recomenda-se:

* utilizar o balanceamento de carga apenas quando houver necessidade de escalabilidade ou alta disponibilidade;
* manter todas as instâncias do Apache utilizando a mesma versão;
* verificar se todas as portas utilizadas pelos Workers estão liberadas no firewall;
* monitorar periodicamente a disponibilidade das instâncias participantes do balanceamento;
* validar o funcionamento da aplicação após qualquer alteração na configuração do Apache.

***

### Solução de problemas

Caso ocorram falhas no balanceamento de carga, verifique os seguintes pontos:

* se todas as instâncias do Apache estão em execução;
* se os Workers estão acessíveis pelo Apache balanceador;
* se as portas configuradas estão liberadas na rede e no firewall;
* se o módulo `wknw_server_apache.dll` foi carregado corretamente em cada Worker;
* se o arquivo **httpd.conf** foi atualizado corretamente em todas as instâncias.

Após qualquer alteração na configuração, reinicie o serviço do Apache para que as modificações sejam aplicadas.

***

### Veja também

Para complementar a configuração do ambiente, consulte também os seguintes artigos:

* [Broken mention](broken://pages/dYXXpSFYhGCv57Cq4dGf)
* [Broken mention](broken://pages/nahEg3Ib8SEmSBGBZw5M)
* [Broken mention](broken://pages/eIiEx102KY1N3UxRGGBf)
* [Broken mention](broken://pages/S6tiZnv0ie3P9q0tQuTx)
