Árvore de páginas
Ir para o final dos metadados
Ir para o início dos metadados

Funcionalidade disponível no binário TOTVSTEC NG (linha Microsiga Protheus 12).

Obs. esta versão funciona também para a linha Microsiga Protheus 11 (Versão 131227A), respeitando os Sistemas operacionais do TOTVSTEC NG

A configuração de balanceamento de carga visa a escalabilidade da aplicação e assim permitir o acesso de uma grande quantidade de usuários ao sistema.

Outros tipos de balanceamento

O balanceamento de carga do Protheus não funciona como proxy reverso, ou seja, toda a comunicação não passa através do serviço de Protheus configurado como master, este apenas atua como distribuidor da carga de conexão, e este mecanismo foi construído para prover melhor eficiência do balanceamento, onde o master não passa a ser um ponto crítico do sistema – caso o master fique indisponível, os slaves continuam executando as conexões neles já estabelecidas. Caso seja necessário fazer um balanceamento de carga de rede para serviços como Telnet, RPC ( Advpl ) ou WebServices, o Protheus não provê uma solução nativa para essa situação, mas é possível utilizar soluções de mercado, disponíveis tanto em software quanto em hardware.

Existem diversas soluções, como o Network Load Balancing do Windows, o Linux Load Balancer da Red Hat, o HAProxy no Ubuntu, o ZEN Load Balancer, entre outros. Essas soluções podem ser utilizadas sem prejuízo ao comportamento do sistema, desde que elas sejam transparentes para a aplicação, onde não exista alteração dos pacotes trafegados. Para maiores informações, verifique com o fornecedor da solução se a mesma atende a este critério de transparência.


Broker - Balanceamento utilizando proxy reverso

A versão 12 do Protheus inclui funcionalidade nativa de proxy reverso, que pode ser utilizada alternativamente ao balanceamento utilizando master/slave disponível nas versões anteriores. Todavia, não é recomendado utilizar ao mesmo tempo os dois métodos de balanceamento.

Importante: Ao se utilizar o Broker como servidor de Balanceamento, pode se manter o servidor Master de Balanceamento a fim de utilizá-lo essencialmente para monitorar as conexões dos Slaves.

Existem 4 casos de uso mais comuns em que esta funcionalidade pode ser utilizada:

  1. balanceamento de conexões entre Smart Client desktop e servidor Protheus
  2. balanceamento de conexões entre Clientes HTML e servidor Protheus
  3. balanceamento de conexões entre clientes Telnet e servidor Protheus
  4. balanceamento de conexões entre clientes de Web Services e servidor Protheus

Adicionalmente, os casos 1, 2, 3 e 4 são na verdade de utilização genérica, podendo de maneira geral ser aplicados a variados tipos de clientes e servidores.

A funcionalidade de balanceamento é ativada através de um parâmetro no comando de chamada do servidor Protheus:

Parâmetros de linhaDescrição
-balance_smart_client_desktopExecuta o Application Server como proxy para o SmartClient Desktop.
-balance_htmlExecuta o Application Server como proxy para o SmartClient HTML.
-balance_telnetExecuta o Application Server como proxy para conexões via Telnet.
-balance_web_servicesExecuta o Application Server como proxy para serviços de Web Service.


Adicionalmente, em cada uma destas opções podem ser utilizados os seguintes parâmetros adicionais, referentes à utilização da funcionalidade de balanceamento como serviço Windows:

Parâmetros de linhaDescriçãoExemplo
-i

Instala o serviço Windows.

appserver -balance_html -i
-u
Desinstala o serviço Windows.
appserver -balance_html -u
-dExecuta em modo desktop (numa janela DOS ou console Linux).appserver -balance_html -d
-aInicia o serviço Windows (ou daemon Linux).appserver -balance_html -a
-oInterrompe o serviço Windows (ou daemon Linux).appserver -balance_html -o
-qVerifica se o serviço Windows está instalado (ou daemon Linux está ativo).appserver -balance_html -q

* As mesmas opções referentes a serviço também funcionam em conjunto com as opções "-balance_smart_client_desktop", "-balance_telnet" e "-balance_web_services".

As opções de instalação/desinstalação de serviço estão disponíveis apenas no ambiente Windows.

Balanceamento entre Smart Client desktop e servidor Protheus

Neste caso um servidor Protheus é configurado como proxy entre um Smart Client desktop e um servidor Protheus rodando o ERP. Além do servidor Protheus que funciona como proxy é necessária a utilização de um utilitário adicional chamado "Totvs Broker Client", que funciona como forwarding proxy ao qual o Smart Client se conecta. O Totvs Broker Client é utilizado como uma biblioteca, atendendo ao Smart Client cujo binário está localizado na mesma pasta onde está localizada esta biblioteca. (Obs.: Smart Client "desktop" refere-se ao Smart Client usado como uma aplicação normal do sistema, e não ao Smart Client acessado através de uma página web no navegador de internet.) É importante notar que o servidor Protheus configurado como proxy terá apenas esta função, isto é, não será usado para rodar o ERP. Informalmente, chamamos o proxy Protheus como "broker server" e o aplicativo Totvs Broker Client como "broker client", e estes serão os termos utilizados neste documento.

Uma característica interessante deste caso é que a conexão entre o cliente e o servidor se torna mais resiliente, isto é, resistente a pequenas interrupções. Isto é conseguido porque tanto o broker server (Protheus utilizado como proxy) como o broker client (Totvs Broker Client) fazem um cache das últimas mensagens de comunicação trocadas entre si. Quando a conexão é perdida o broker client continua tentando por algum tempo retomar a conexão com o broker server. Após a retomada da conexão, se houve alguma mensagem perdida em qualquer direção ela é reenviada, e a comunicação continua ocorrendo normalmente, sem que o Smart Client ou o ERP Protheus percebam que houve queda na comunicação.
Outro ponto interessante é que esta solução pode ser utilizada mesmo quando o Smart Client esteja se comunicando com o Protheus ERP através de uma conexão segura (SSL), porque tanto o broker client quanto o broker server não examinam o conteúdo das mensagens que passam por eles.

Importante: Nunca deve se configurar o Protheus Master como uma das estações (servidores Protheus ERP) que irão receber conexões pelo Broker, pois o seu mecanismo de balanceamento e excludente ao do Broker.

Quando se utiliza o proxy client são necessários 2 arquivos de configuração, um para o Smart Client e um para o broker server: smartclient.ini (Smart Client) e appserver.ini (broker server Protheus). No arquivo de configuração do Protheus ERP não existe alteração.

Num exemplo hipotético, vamos supor que o Protheus ERP esteja atendendo nos endereços 172.16.50.42:5000172.16.50.42:5001 e 172.16.50.42:5002, o broker server esteja atendendo no endereço 172.16.50.42:4000.

Note que os servidores Protheus ERP e o broker server Protheus estão na mesma máquina. É uma configuração típica, mas não existe restrição alguma por parte do broker client ou do broker server que eles estejam na mesma máquina.


Abaixo, um exemplo de configuração possível para este cenário:

appserver.ini
[GENERAL]
CONSOLELOG=1

[BALANCE_SMART_CLIENT_DESKTOP]

; porta onde este broker server atende pedidos de conexão dos broker clients
LOCAL_SERVER_PORT = 4000

; hostname ou endereço ip, e porta TCP dos servidores Protheus ERP que serão destino
; das conexões vindas dos broker clients
REMOTE_SERVER_01 = 172.16.50.42 5000
REMOTE_SERVER_02 = 172.16.50.42 5001
REMOTE_SERVER_03 = 172.16.50.42 5002
; etc
; esta chave aceita letras e números para identificar servidores,
; por exemplo REMOTE_SERVER_0A, REMOTE_SERVER_XY, etc, e as chaves
; podem estar em qualquer ordem

; tempo em segundos que o broker server guarda informações sobre uma conexão que
; foi perdida, para possibilitar a retomada da conexão pelo broker client,
; 90 segundos é o tempo máximo porque o Protheus ERP derruba qualquer
; conexão que fique sem atividade nesse intervalo
STANDBY_TIME = 90

; nome do serviço, pode ser qualquer nome que não contenha espaços
; só tem importância se o broker server for instalado como um serviço Window
SERVICE_NAME = XXX_TOTVS_BALANCE_SC_001


O broker client é utilizado como uma biblioteca não é necessário um arquivo de configuração específico. Uma seção no arquivo de configuração do Smart Client (smartclient.ini) deve indicar o hostname ou endereço IP do broker server, porta do broker server, e a opção "BrokerProxy=1"

smartclient.ini
; ------------------------

[config]
lastmainprog=...
envserver=...

; outras configurações

; ---------------------

[sem_broker]
; para conexão direta do Smart Client com um ERP específico,
; ou usando o esquema de Protheus Master e Protheus Slave
server=...
port=...

; ---------------------

[com_broker]

; para conexão Smart Client com o ERP via broker client
; rodando na mesma máquina do Smart Client

; máquina onde o *broker server* está rodando
server=172.16.50.42

; porta onde o *broker server* está atendendo
port=4000

; importante!!!
BrokerProxy = 1

; ---------------------

[drivers]
; opção ativa: conexão via proxy
active=com_broker

; ------------------------
; obs.: os nomes "com_broker" e "sem_broker" não possuem qualquer
; significado intrínseco, qualquer nome poderia ser utilizado,
; por exemplo "AAA" e "BBB"
; ------------------------

Obs. No SmartClient é necessário ter a biblioteca totvsbrokercg para a conexão resiliente com o Broker Server.

Biblioteca para Windows 32 bits: totvsbrokercg

Biblioteca para Linux 32 bits: totvsbrokercg


Balanceamento entre Clientes HTTP e servidor Protheus

Para ser utilizado como proxy de balanceamento para a aplicação Balance de HTML é necessário apenas um arquivo de configuração, não é necessário um aplicativo adicional como no caso de Smart Client desktop. Também não é feita a recuperação de conexão, porque é um conceito que de maneira geral não se aplica no caso de conexão web.

Exemplo de configuração.

appserver.ini
[GENERAL]
CONSOLELOG=1

[BALANCE_HTML]

; porta que atende o Client HTML
LOCAL_SERVER_PORT = 4000

; hostname ou endereço ip, e porta TCP onde os servidores Protheus ERP aceitam conexões HTTP
REMOTE_SERVER_01 = 172.16.106.31 5001
REMOTE_SERVER_02 = 172.16.106.31 5002
; etc
; esta chave aceita letras e números para identificar servidores,
; por exemplo REMOTE_SERVER_0A, REMOTE_SERVER_XY, etc, e as chaves
; podem estar em qualquer ordem
  
; tempo de retenção de uma sessão inativa, em segundos
SESSION_TIMEOUT = 600

; nome do serviço Windows, caso seja utilizado
; (não pode conter espaços)
SERVICE_NAME = TOTVS_BROKER_SH_XYZ


Importante: Se o Balance HTTP for utilizado para fazer o balanceamento de Portais ou de Web Services, devem ser feitas alterações adicionais no arquivo de configurações do Protheus ERP, para mais detalhes veja o arquivo exemplo appserver.ini (ERP) na sessão Balanceamento entre cliente Web Services e Servidor Protheus abaixo. .


Balanceamento entre cliente Telnet e servidor Protheus

O servidor Protheus pode ser utilizado como um proxy transparente de balanceamento para acesso de clientes Telnet a um servidor Protheus ERP.

Exemplo de arquivo de configuração:

appserver.ini
[GENERAL]
CONSOLELOG=1

[BALANCE_TELNET]

; porta TCP de atendimento aos clientes Telnet
LOCAL_SERVER_PORT = 4001

; hostnames ou endereços ip, e porta TCP dos servidores Protheus ERP atendendo clientes Telnet
REMOTE_SERVER_01 = 172.16.84.41  1337
REMOTE_SERVER_02 = 172.16.84.42  1337
REMOTE_SERVER_03 = localhost     1337
; etc
; esta chave aceita letras e números para identificar servidores,
; por exemplo REMOTE_SERVER_0A, REMOTE_SERVER_XY, etc, e as chaves
; podem estar em qualquer ordem

; nome do serviço Windows, caso seja utilizado
; (não pode conter espaços)
SERVICE_NAME = TOTVS_BROKER_XYZ 

Balanceamento entre cliente Web Services e servidor Protheus

O servidor Protheus pode ser utilizado como um proxy transparente de balanceamento para acesso de clientes de web services a um servidor Protheus ERP.

Além do balanceamento das conexões pode ser feito um controle do número máximo de pedidos simultâneos de web services que serão repassados a um servidor Protheus ERP. Quando este limite for atingido o servidor Protheus ERP em questão não mais participará do balanceamento de conexões (não serão mais repassadas conexões para esse servidor). Se todos os servidores Protheus ERP já estiverem no limite então um novo pedido de web services que chegar será colocado em uma fila, esperando que um dos servidores Protheus ERP se torne novamente disponível (isto é, que o número de pedidos de web services sendo atendidos simultaneamente fique novamente abaixo do máximo configurado). Essa espera tem um tempo configurável, com valor inicial de 15 segundos. Após esse tempo, se o pedido de web services não for atendido então sua conexão será fechada pelo proxy de balanceamento (isto é, vai ocorrer uma falha no cliente de web services). Caso o número máximo de pedido de web services para um servidor Protheus ERP não seja configurado então não haverá limitação no número de pedido simultâneos de web services que serão repassados pelo proxy de balanceamento a esse servidor Protheus ERP.

Exemplo de arquivo de configuração:

appserver.ini
[GENERAL]
CONSOLELOG=1

[BALANCE_WEB_SERVICES]

; porta de atendimento aos clientes de web services
LOCAL_SERVER_PORT = 4001

; hostnames e endereços ip, porta TCP e número máximo de conexões
; dos servidores Protheus atendendo web services

; atende no máximo 5 pedidos simultâneos de web services
REMOTE_SERVER_01 = 172.16.50.171 8098   5

; atende no máximo 10 pedidos simultâneos de web services
REMOTE_SERVER_02 = 172.16.50.172 8098  10

; nao tem limite de pedidos simultâneos de web services
REMOTE_SERVER_03 = 172.16.50.173 8098

; etc
; a chave REMOTE_SERVER_xx aceita letras e números para identificar servidores,
; por exemplo REMOTE_SERVER_0A, REMOTE_SERVER_XY, etc, e as chaves
; podem estar em qualquer ordem

; nome do serviço Windows, caso seja utilizado
; (não pode conter espaços)
SERVICE_NAME=XXX_TOTVS_BALANCE_WS_001


Importante: Além da configuração acima referente ao broker server (Protheus rodando como proxy de balanceamento de web services) é necessário especificar no arquivo de configurações do Protheus ERP as instâncias de web services que serão recebidas através do broker server. As definições de web services devem ser repetidas, substituindo o hostname (ou endereço ip) e porta originais pelo hostname (ou endereço ip) e porta do broker server.

Exemplo de arquivo de configuração do Protheus ERP:

appserver.ini (ERP)
...
...
... 
; definição original do web service
[172.16.50.171:8098/WS]
ENABLE = 1
PATH = c:\protheus\protheus12\protheus_data\webservices\web
ENVIRONMENT = ENV_WEB_SERVICES
INSTANCENAME = WS_TESTE
RESPONSEJOB = JOB_WS
DEFAULTPAGE = wsindex.apw        

; definição do mesmo web service para uso com broker server
; assume que broker server está rodando na mesma máquina mas em outra porta
[172.16.50.171:4001/WS]
ENABLE = 1
PATH = c:\protheus\protheus12\protheus_data\webservices\web
ENVIRONMENT = ENV_WEB_SERVICES
INSTANCENAME = WS_TESTE
RESPONSEJOB = JOB_WS
DEFAULTPAGE = wsindex.apw
...
...
... 
 

Com o arquivo de configuração acima o web service que normalmente é acessado através da url http://172.16.50.171:8098/WS também estará disponível através do broker server através da url http://172.16.50.171:4001/WS (assumindo neste exemplo que o Proxy ERP e o broker server estão instalados na mesma máquina).


Veja também:

FAQ - Perguntas frequentes