Árvore de páginas

Implementação GRID (Informações técnicas)

Produto:

Microsiga Protheus

Ocorrência:

Implementação GRID (Informações técnicas)

Passo a passo:

Introdução ao Grid de Processamento Advpl
1 - Damos o nome de Grid de processamento para uma aplicação projetada para realizar uma ou mais etapas de processamento simultaneamente.
O Grid de Processamento Advpl é um componente independente, dotado de uma camada de infra-estrutura e uma classe Client, capaz de distribuir a execução de rotinas de processamento em paralelo em mais de um servidor de aplicação. Os serviços do Protheus que serão utilizados para a distribuição de processamento são configurados através do arquivo mp8srv.ini. Apenas um serviço do protheus configurado para ser um recurso de processamento pode ser usado para solicitar um processamento em Grid. Estes serviços do Protheus são aqui chamados de Agentes Para a integração dos agentes envolvidos no processo, e distribuição de carga entre os servidores habilitados para uso deste recurso, configuramos um serviço do Protheus independente dos demais, chamado de GridServer, ou Coordinator.


A figura abaixo demonstra o funcionamento do GRID:

Cada um destes componentes será visto em detalhes nos tópicos pertinentes abaixo, onde serão detalhadas as funcionalidades e responsabilidades de cada um dos componentes da aplicação.

 

2 - Grid Coordinator

Trata-se de um Protheus Server, configurado como serviço. Pode ser configurado um GridServer por ambiente. Preferencialmente deve ser um serviço do Protheus independente dos demais. Deve ser configurado um JOB no mp8srv.ini, e colocado na seção ONSTART do Protheus Server

Exemplo :
[onstart]
Jobs=GridServer
RefreshRate=60
[GridServer]
Main=GridServer
Environment=<nome_do_environment>

 

Comportamento e Funcionalidade:
Responsável pelo monitoramento dos Agentes disponíveis para processamento em Grid Possui apenas 1 thread de gerenciamento, responsável pela distribuição dos agentes para o(s) solicitante(s).
Um agente conectado solicita ao Coordinator um uso de Grid, identificando-se para o Coordinator. O coordinator verifica se tem agentes disponíveis para realizar um Build, e informa aos demais agentes que existe um client solicitando o uso do Grid. Cada agente alocado pelo coordinator conecta-se com o solicitante, para fazer parte do Grid.

3 -Grid Agent ( ou Agente )

Trata-se de um Protheus Server, configurado como serviço. Devem ser especificadas quantas instâncias / processos ( Threads ) do Agente serão disponibilizadas para uso no Grid.
Pode ser utilizado um serviço que esteja ou não no balanceamento de carga. Deve ser configurado um Job no mp8srv.ini, e o mesmo deve ser colocado no [OnStart]. A configuração do agente é praticamente a mesma para todas as maquinas que fazem parte do Grid. Todas devem apontar para o mesmo coordinator, apenas devemos trocar o ip da maquina atual na configuração, e o numero de instâncias quando conveniente.

Exemplo :
[OnStart]
Jobs=GridAgent
RefreshRate=60
[GridAgent]
Main=GridAgent
AgentIp=<ip_da_maquina_atual>
Instances=2,2
Environment=ADVPLTESTS_TOP_CTREE
CoordServer=<ip_ou_nome_do_coordinator>
CoordPort=<porta_tcp_coordinator>


Comportamento e Funcionalidade: Ao iniciar, sobe o número de Threads configurada no ini no Protheus, e cada thread conecta com o Coordinator, identificando-se e informando Status=IDLE.
O agente pergunta ao Coordinator se ele ( agente ) deve iniciar um processamento, e para quem. Pulsos em espera por 5 segundos.

 

4 - Considerações sobre Configuração e Uso do Grid de Processamento

Ao configurarmos um Grid de Processamento, devemos ter em mente que, quando um agente é configurado para subir uma ou mais instâncias, durante o uso do Grid estas instâncias representarão um consumo de CPU relativamente alto no servidor-Agente em questão.

Para o uso do Grid, devemos possuir um ambiente com um ou mais servidores Slave, configurados para execução de aplicações no mesmo ambiente, de forma semelhante à configuração de balanceamento de carga. É possível utilizarmos um serviço Slave do Protheus configurado para balanceamento de carga para ser um agente do Grid. Porem, devemos ter em mente que, quando o agente do grid estiver em uso, o serviço do Protheus vai usar os recursos do equipamento para atender às conexões de Remote e também as threads do Agente do Grid. Se estamos falando de um equipamento Slave, que suporta mais de um serviço do Protheus, é possível subir mais um serviço do Protheus no equipamento, configurado apenas para ser um Agente do Grid, SEM ser colocado na configuração de Balance. Desse modo, o serviço apenas seria utilizado quando de um processamento de Grid, e o servidor iria usar seus recursos para atender ao servidor Protheus Slave da conexão de Balance e para atender ao serviço do Protheus de Agente de Grid.
Outra questão importante neste tipo de processamento é como definir a quantidade de instâncias / Threads que podemos subir em um serviço-Agente de Grid. Vamos imaginar um processamento hipotético de cálculo, realizado por apenas um processo. Se colocarmos dois processos de calculo para rodar simultaneamente no mesmo equipamento, em se tratando de uma maquina com um e apenas um processador, o computador vai internamente rodar uma parte de cada processo, não são efetivamente dois processos simultâneos. E, quanto mais instâncias do processo colocamos, é consumido mais tempo do sistema operacional do equipamento para trocar o ambiente e status de processamento para executar as partes de cada processo em paralelo . Logo, a partir do momento que a CPU do equipamento bateu 100% de utilização, não adianta colocar mais processos em paralelo, não haverá mais ganho de performance.

A priori, não recomendo mais do que duas instâncias / threads de processamento em Grid para um equipamento. Como os processamentos em Grid são especialistas, eles tendem a consumir bastante a CPU do equipamento. Outro ponto que devemos levar em conta, são os dados utilizados para os processamentos do Grid, entrada e saída. Um processamento onde cada ação depende da busca de um conteúdo de registro na base de dados, colocado em mais de um servidor simultaneamente, vai exigir mais do servidor de banco de dados, e da infra-estrutura de rede quando em processamento. Logo, uma vez que a máquina de Banco de Dados bater 100% de CPU, por exemplo utilizando 4 servidores de Grid, não adianta acrescentar mais Agentes no processo, pois existe um gargalo no servidor de Banco de Dados. Assim também com o Grid, podemos ter gargalos de rede, para fazer os vai-e-vem das requisições. Em suma, o percentual obtido com o uso do Grid, configurado sob medida dentro dos recursos do ambiente de execução, varia de acordo com o tipo de processamento realizado, consumo de recursos de CPU, rede e banco de dados para trafegar as requisições e os dados de entrada e saída do processamento. E, este percentual não será 100%. Por exemplo, um processo que demora 10 minutos quando executado em um computador, não vai demorar 5 minutos quando executado em um Grid com 2 processos, e 2,5 minutos se executado com um Grid com 4 processos. Se os processos do Grid não tiverem concorrência entre si, nos dados de entrada e saída, não havendo gargalo de banco e rede, ter um ganho médio de 40% no processo é um número aceitável e dentro da realidade.

Observações: