A despeito do título intrigante e esdrúxulo soar como mero chamariz para a leitura deste tópico eu me deparo com um problema de arquitetura realmente desafiador e crucial.
Imaginem diversos clientes em diversos servidores distintos que enviam dados em forma de XML porém sem utilizar WSDL (informações em texto na verdade, mas usando pacotes e apis SOAP) para um aplicativo Java monstro coitado desprovido de serviço de filas, sem mecanismos parrudos controles transacionais e não é executado sob os domínios de um servidor de aplicação.
Este aplicativo é responsável por informar o status de recebimentos das mensagens XML para outros aplicativos, atualizar tabelas de banco de dados, entre outras funcionalidades.
Desconfia-se fortemente de que este aplicativo seja o gargalo da vez no processamento das informações oriundas de vários clientes. O problema e o desafio está em otimizar este aplicativo para minimizar atuais problemas de processamento de requisições tratadas.
A princípio ele deveria ser totalmente remodelado mas esta hipótese está descartada pois ele é critico e não tem-se intenção de substituí-lo a curto prazo. Ele terá que ser otimizado em doses homeopáticas. Ahh, não tenho opções de debug neste caso pois este aplicativo é executado remotamente.
O que é viável no momento é reduzir o seu processamento, tornando o log gerado por exemplo, atualmente muito verboso para um nível de registro apenas elementar com apenas as informações essenciais (menos I/O). Outro passo seria verificar as queries, ajustá-las caso necessário e verificar se é possível criar índices sobre alguns campos que aparecem em maior freqüência nestas queries. Mas com relação ao recebimento das conexões e diversos clientes como seria possível tratar de melhor forma isto?
Há ferramenta ou middleware que possa ajudar neste caso?
Alguém conhece um link de um guia detalhado de refatoração de código voltado para performance ao invés de design de código?
E soluções como memchache e terracota não se encaixam neste caso, certo?
E com que ferramentas eu poderia mensurar ou monitorar a carga de requisições enviadas a este aplicativo?
Sei que fiz muitas questões mais deixo a cargo do colega escolher qual é a mais pertinente, se vários aqui neste me ajudarem respondendo pelo menos uma das questões eu postei eu já me sentirei mais amparado para encarar o desafio com a ajuda dos colegas deste fórum.
Muito Obrigado!
Bruno