Em algumas situações, temos que criar aplicações que ficam executando o tempo todo, como monitores de rede, Call Center, Agendas de aplicativos e etc...
Recentemente, eu passei por duas situações (Transferência de arquivos entre sites e Call Center).
Vou pegar como exemplo a primeira aplicação. Deveríamos criar uma aplicação responsável por atualizar os aplicativos que são executados em todas as agências de uma empresa de Energia Elétrica, utilizando a arquitetura cliente/servidor (mais de 70 locais de transferência).
A partir da necessidade e de outras variáveis envolvidas (disponibilidade de Link, distância geográfica entre agencias, disponibilidade de servidores, horário de picos, atualizações urgentes de sistemas, etc...) resolvemos desenvolver um servidor de aplicação que ficariam rodando 24 horas e processando as requisições de cópias feitas pelo usuário.
O sistema foi desenvolvido em PowerBuilder e ficou da forma que desejávamos. Mas, após 24 horas em produção, começamos a deparar com um problema que colocou todo o trabalho de desenvolvimento em questionamento. A aplicação PowerBuilder alocava memória e não liberava a mesma.
Fazendo o monitoramento, percebi que quando instanciávamos os objetos e utilizava DataWindows, os mesmos não liberavam toda a memória alocada. Após 24 horas de processamento, a aplicação travava o servidor por falta de memória.
Após pensarmos em várias soluções e já pensando em outros projetos que teriam o mesmo problema, resolvemos criar um “Gerenciador de Serviços”.
Essa aplicação fica responsável por colocar a aplicação no ar. Após a aplicação no ar, ela faz o processamento necessário e fecha o sistema. Após X tempo que a aplicação fechou (no nosso caso, foi 1 minuto) o gerenciador coloca a aplicação no ar novamente.
Como o gerenciador não utiliza objetos e possui um código muito simples, ele não aloca memória desnecessária e não causa o problema que a aplicação teria.
Essa é uma solução simples, que foi essencial para o sucesso do nosso projeto.
Nenhum comentário:
Postar um comentário