Feature liberada na versão 20.3.1.0 do |
O Agent (agente) é uma ferramenta utilizada em conjunto com o
(server) e com o
(broker) para prover escalabilidade horizontal a um ambiente formado por um agente, um broker e vários servers.
Em palavras mais simples, a funcionalidade de escalabilidade horizontal funciona da seguinte maneira:
O broker monitora o consumo de vários recursos utilizados pelos servers balanceados: conexões, memória, usuários, threads e cpu
À medida que o consumo total desses vários recursos alcançam um certo limite, o broker requisita ao agente a criação de uma nova instância de server
O agente cria uma nova instância de server e informa ao broker em qual porta TCP o novo server está aceitando conexões
O broker então incorpora o novo server às suas tabelas de balanceamento, de maneira que as novas conexões sejam distribuídas também para o server recém instanciado
O uso da escalabilidade horizontal para a alocação dinâmica de novos servers possibilita o funcionamento mais estável do sistema, pois evita que haja sobrecarga sobre os servers em operação.
A escalabilidade horizontal também funciona de maneira inversa: à medida que os servers se tornem ociosos por algum tempo, isto é, não estejam atendendo nenhuma conexão, o broker requisita que o agente desative estes servers que estão ociosos, desta maneira economizando recursos computacionais e diminuindo os custos de operação do sistema.
Para que esse esquema de escalabilidade funcione, algumas premissas devem ser atendidas. São elas:
O agente utiliza o mesmo arquivo de configuração utilizado pelo server - appserver.ini |
O arquivo de configuração deverá possuir uma seção específica para o agente, conforme exemplo abaixo:
Chave | Descrição |
---|---|
Enable | Habilita ou desabilita a funcionalidade do agente broker |
BrokerServer | IP ou hostname do servidor onde o broker está em execução (o agente vai se conectar a este broker) |
BrokerPort | Porta TCP por onde o broker recebe conexões |
MaxServers | Número máximo de servers que o agente poderá instanciar (item de segurança) |
SecureConnection | Conexão encriptada entre o agente e o broker (opcional) |
[BROKER_AGENT] enable = 1 BrokerServer = 10.172.16.31 BrokerPort = 12340 MaxServers = 10 |
A chave SecureConnection existe apenas a partir da versão 24.3.0.4, com uso do Broker HTTP. Se omitida ou com valor 0, indica que a conexão vai ser não-encriptada.
Se esta chave tiver valor 1, também deverão ser usadas as chaves de encriptação na configuração do Broker HTTP: SSL_KEY, SSL_METHOD, SSL_CERTIFICATE.
A configuração do server depende apenas duas configurações. São elas:
Para que o broker funcione no esquema de escalabilidade tratado neste material, deve ser utilizado um arquivo de configuração semelhante ao apresentado no exemplo abaixo:
Chave | Descrição |
---|---|
LOCAL_SERVER | Porta TCP por onde o broker aceita conexões |
WITH_BROKER_AGENT | Habilita a configuração que faz o broker tratar as conexões do agente |
SCALING_PLANS | Planos de escalabilidade que o broker vai tratar (podem ser usados quaisquer nomes para definição do plano) |
SCALING_LOAD_FACTOR_OUT | Fator de carga que dispara a ativação de uma nova instância do server pelo agente (default: 80%) |
SCALING_LOAD_FACTOR_IN | Fator de carga que dispara a desativação de um server pelo agente (default: 60%) |
SCALING_GRACE_TIME | Tempo em segundos para que seja disparada a desativação de um server ocioso (default: 300 segundos) |
SCALING_INTERVAL_CHECK | Tempo em segundos entre cada aplicação do plano de escalabilidade atual (default: 60 segundos) |
Obs. inicialmente não se aconselha que sejam alterados os valores padrão para as chaves SCALING_LOAD_FACTOR_OUT, SCALING_LOAD_FACTOR_IN, e SCALING_GRACE_TIME. Inclusive, estas chaves nem precisam ser especificadas, vão ficar com o valor padrão. À medida que se ganhe experiência com o agente poderiam ser feitas alterações nestas chaves, entretanto sempre testando antes, para se ter noção de como essas alterações irão afetar o funcionamento do agente e do broker.
[BALANCE_SMART_CLIENT_DESKTOP] LOCAL_SERVER = 12340 WITH_BROKER_AGENT = 1 SCALING_PLANS = COMERCIAL,NOITE ; SCALING_LOAD_FACTOR_OUT = 80 ; SCALING_LOAD_FACTOR_IN = 60 ; SCALING_GRACE_TIME = 300 ; especificação dos planos de escalabilidade ; ... ; ... |
* Mais detalhes sobre as chaves para especificação dos planos de escalabilidade na seção Plano de Escalabilidade
Plano de Escalabilidade
Chave / Seção | Descrição | Observação |
---|---|---|
[PLANO] | Essa seção recebe o nome utilizado para identificação do plano de escalabilidade | Não tem significado especial, serve apenas como identificação |
FROM | Essa chave indica a hora do início de validade do plano | O valor deve ser especificado em horas e minutos (de 00:00 a 23:59) |
TO | Essa chave indica a hora do final de validade do plano | O valor deve ser especificado em horas e minutos (de 00:01 a 24:00) |
WEEKDAYS | Essa chave indica os dias da semana em que o plano é válido | Exemplo: 1= domingo, 2=segunda, ... 7=sábado |
MIN_SERVERS | Essa chave indica o número mínimo de servers que o plano vai manter ativo | |
MAX_SERVERS | Essa chave indica o número máximo de servers que o plano vai manter ativo | |
CONNECTION_LIMIT | Essa chave indica o número máximo de conexões originadas do | |
USER_LIMIT | Essa chave indica o número máximo de usuários que um server pode ter para que seja considerado elegível para balanceamento pelo broker | |
THREAD_LIMIT | Essa chave indica o número máximo de threads que um server pode ter para que seja considerado elegível para balanceamento pelo broker | |
MEMORY_LIMIT | Essa chave indica a quantidade máxima de memória que um server pode estar utilizando para que seja considerado elegível para balanceamento pelo broker | O valor deve ser especificado em Megabytes |
CPU_LIMIT | Essa chave indica a porcentagem máxima de CPU que um server pode estar utilizando para que seja considerado elegível para balanceamento pelo broker |
Obs. a partir da versão 20.3.1.4 do broker a consistência dos planos de escalabilidade é mais completa:
Por padrão, o plano de escalabilidade é aplicado uma vez por minuto.
Inicialmente apenas o broker e o agente devem estar ativos. Não importa a ordem de ativação. Nenhum server deve estar ativo.
A cada um minuto o broker faz uma checagem do plano de escalabilidade em operação, levando em consideração os critérios (detalhes na tabela acima) que foram utilizados para a configuração do plano de escalabilidade.
Caso o valor total agregado alcance ou ultrapasse 80% do valor total máximo configurado para o critério em avaliação, o broker vai solicitar ao agente que um um novo server seja instanciado, desde que o número total de servers instanciados ainda esteja abaixo do limite especificado.
Para facilitar o entendimento dos critérios para ativar/desativar um server, utilizaremos o exemplo abaixo como base:
Nessa configuração o número mínimo de servers do plano DIA é 2, o máximo de servers é 4 e o número máximo de conexões por server é 10. | |
---|---|
|
Neste caso, poderíamos configurar a chave SCALING_LOAD_FACTOR_IN para 70, pois assim um server ocioso poderia ser desativado quando o número atual de conexões fosse 21 (70% de 3 servers x 10 conexões → 70% de 30 → 21 conexões). |
Para utilizar o agente em modo interativo (isto é, rodando no terminal) passar o parâmetro "-d" na linha de comando:
c:\pasta_agente> broker_agent -d
Caso não seja passado nenhum parâmetro na linha de comando, o agente mostra uma mensagem informativa:
c:\pasta)_agente> broker_agent
*
* Broker Agent vrs-20.3.1.12 rev-39398 - Jul 14 2023
* (c) TOTVS S.A 2021-2023
*
* fatal error, missing run type parameter
*
* Usage:
*
* broker_agent -desktop
* broker_agent -install
(etc)
Parâmetros Opcionais:
Parâmetro | Descrição |
---|---|
-log_path=<path> | Permite definir caminho para a gravação do logs do Broker Agent (ag_<time_stamp>.txt), o caminho informado no parâmetro deve existir previamente. Este parâmetro não altera o caminho do arquivo de controle AG_CONTROL.TXT Exemplo de uso via parâmetro de linha: broker_agent.exe -desktop -log_path=C:\Totvs\Binarios\Logs Exemplo de instalação como serviço do Windows: broker_agent.exe -install -log_path=C:\Totvs\Binarios\Logs Disponível a partir do Application Server 20.3.2.3. |
O agente pode ser utilizado como um serviço Windows.
O nome do serviço vai ser BROKER_AGENT_SERVICE-(nome completo da pasta onde está o binário do agente).
Por exemplo, para a pasta D:\TOTVS\erp\12.1.33\tec\appserver-20.3.1.0-1, nome do serviço será
BROKER_AGENT_SERVICE-D:@TOTVS@erp@12.1.33@tec@appserver-20.3.1.0-1
(as barras invertidas "\" são substituídas por arroba "@").
Obs.: No momento não existe suporte nativo para o agente ser executado como um serviço no Linux. O usuário deve criar um script ou unit do SystemD para usar o agente como serviço.