Como fazer balanceamento de carga no Protheus

Hoje vou mostrar como configurar um balanceamento no Protheus e qual é a vantagem dele.

Balanceamento de carga, basicamente você terá um serviço mestre (Master) e os serviços auxiliares (Slaves), onde quando um usuário conectar no seu Protheus através do mestre, ele vai redirecionar para os auxiliares conforme a utilização.

Exemplificando (grosso modo), se o auxiliar 1 tiver com 50 mb, o auxiliar 2 tiver com 100 mb, e o auxiliar 3 tiver com 200 mb, quando o usuário abrir uma nova thread, o mestre vai ver que o auxiliar 1 tem disponibilidade e vai colocar a conexão dele.

Esse cenário é interessante para empresas que trabalham com muitos funcionários, e assim o equilíbrio de serviços fica mais automático.

Para funcionar corretamente, você deve ter um AppServer para cada serviço (1 para o mestre e a quantidade que quiser para os auxiliares).

No nosso exemplo, teremos 1 AppServer mestre (porta 1234) e 3 auxiliares (portas 1241, 1242 e 1243). Os auxiliares você pode configurar normalmente. Já o mestre, você precisa adicionar as seguintes chaves no appserver.ini (substitua localhost pelo seu IP):

[SERVERNETWORK]
                SERVERS=SERVER1,SERVER2,SERVER3
                MASTERCONNECTION=0

[SERVER1]
                SERVER=localhost
                PORT=1241
                CONNECTIONS=20

[SERVER2]
                SERVER=localhost
                PORT=1242
                CONNECTIONS=40

[SERVER3]
                SERVER=localhost
                PORT=1243
                CONNECTIONS=40

Note acima, que no SERVERNETWORK, nós identificamos que teremos 3 auxiliares, e logo abaixo definimos a configuração de cada auxiliar, e o número de conexões.

Agora no seu smartclient.ini, basta você apontar para o seu mestre, que automaticamente será balanceado a carga do seu Protheus.

[config]
                lastmainprog=SIGAMDI
                envserver=AMBIENTE
                Language=1

[drivers]
                active=tcp

[tcp]
                server=localhost
                port=1234

UPDATE 13/07/2021:

Conversando com meu amigo Fabricio no Discord, ele me disse algo que eu não sabia, e achei interessante, e vou atualizar aqui no artigo.

A chave Connections, na verdade é um percentual de distribuição de conexões, por exemplo, no cenário acima, o slave 1 recebe até 20% de conexões, enquanto os outros dois recebem 40% ambos (totalizando 80%).

A documentação está nesse link no TDN.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta