CrashProofing

A idéia inicial de um crash é a de que o sistema caiu.  Porém existem várias formas de um sistema “cair”: demorar muito além do esperado, apresentar dados inconsistentes, se perder, gerar os famosos erros de sistema que param qualquer utilização do mesmo entre outros.  Todas estas situações são no mínimo desagradáveis para o usuário e insuportáveis para a produção, QA e desenvolvimento.

O problema é o que fazer quando o sistema cai, ou mesmo ser avisado de que ele caiu.  Estas situações sempre acontecem nos piores momentos, criando problemas de frustração e prejuízos que podem afetar profundamente os negócios da empresa.

Para evitarmos este tipo de problema, não é suficiente fazer simplesmente testes de carga/performance com as atuais ferramentas de testes.  É necessário que, simultaneamente aos testes de carga, se faça a monitoração da aplicação.  Isto permite que se saiba de fato qual o comportamento dos componentes de cada transação da aplicação submetidos ao teste de stress, possibilitando que obtenha-se uma lista dos componentes que podem gerar problemas, como gargalos, concorrências, dead-locks e etc., e com isto fazer o diagnóstico antecipado dos problemas.  Saber qual o método de um componente de uma determinada transação de negócio está sendo ou é potencialmente um risco, pode ser a diferença entre o sucesso e o fracasso de um sistema.  Isto considerando que houve os testes de forma efetiva, o que nem sempre é a realidade.

É importante enfatizar que este é apenas um lado do problema.  Outra visão é aquela dos problemas que as aplicações em produção apresentam, e que sempre apresentam um enorme desafio para encontrar as causas.  Neste tipo de situação o tempo é ainda mais premente, já que há um negócio da organização em risco.  E raramente pode-se dizer que a infra-estrutura é a culpada pelo problema: o usuário reclama com o suporte, que consulta a produção e que vê seus monitores e diz que está tudo bem, o suporte não consegue reproduzir o problema, o usuário reclama num nível mais alto, que pressiona o suporte e vai por ai.

Abordamos estas situações de forma bem estruturada, com as ferramentas e os processos necessários para garantir que desde o inicio do ciclo de vida da aplicação ela evolua com qualidade e performance.  E quando encontramos aplicações em produção com problemas, também nos apoiamos nos nossos processos e ferramentas para resolver os desafios.

Além disto, os resultados obtidos nestas monitorações podem ser utilizados na definição de SLA´s no mínimo básicos para a monitoração da aplicação em produção, permitindo-se sair com níveis básicos que serão posteriormente atualizados para melhor refletir a realidade e gerar os alarmes necessários.