Muito se tem falado sobre cloud, microservices, auto-scaling, containers entre outros recursos que estão revolucionando a forma como produzimos os nossos produtos de software.
Em contrapartida vem-se esquecendo que, para ter um tempo de reposta rápido e consequentemente melhorar a experiência do usuário, o primeiro passo é entender que, se mal utilizados, os recursos tecnológicos são muito caros.
É importante utilizar os recursos que a cloud oferece tratar as variações do comportamento do usuário que aumentam o consumo de recursos, mais importante que isso seria otimizar ao máximo cada componente do seu serviço para alcançar o máximo de performance.
Um dos principais funcionalidades de uma ferramenta de APM é encontrar os gargalos que prejudicam a performance da sua aplicação e é necessário saber como utilizar o potencial máximo dessa ferramenta.
Mas o que é esse tal de APM? E como são essas ferramentas? Eu convido você a acompanhar alguns artigos que eu estou produzindo para explicar como tudo funciona.
Application Performance Management (APM) é o monitoramento e gerenciamento de desempenho e disponibilidade de aplicativos de software. O APM se esforça para detectar e diagnosticar problemas complexos de desempenho de aplicativos para manter um nível de serviço esperado.
End User Experience (Experiência do Usuário Final): é o processo de medir, mensurar e analisar todos passos do usuário final (EUE) na sua aplicação;
Runtime Application Architecture (Arquitetura de aplicativos em tempo de execução): é o processo de analisar a aplicação em tempo de execução, mapeamento de dependências (Dependency Mapping) e descoberta de aplicativos (Application Discovery).
Business Transactions: é o monitoramento das transações mais importantes para o negócio.
Deep Dive Component Monitoring: é a analise do código em execução.
Analytics & Reporting: é o conjunto comum de métricas para coletar, relatar as informações de cada aplicativo e padronizar um visão comum dos dados de desempenho.
Existem várias soluções e APM, as principais são: Dynatrace, New Relic, Datadog e AppDynamics. Para os artigos que estou elaborando irei focar, inicialmente, duas ferramentas: a primeira é a solução da Dynatrace de APM (é o que tem a maior compatibilidade, o mais fácil de instalar e uma das mais completas do mercado), e a segunda opção que vamos adotar aqui é o Datadog (ótimo custo-benefício, tem o valor mais baixo e atende o propósito). A ideia é ter essa variação de ferramentas para que o maior número de pessoas possam adotar as boas práticas de performance e tomem consciência dos problemas existentes em seus projetos.
Para escolher uma solução de APM, é importante observar a compatibilidade com as tecnololgias do seu projeto. Normalmente as soluções de APM seguem um padrão, elas utilizam um agente que coleta as informações da aplicação, como apresentado no diagrama a seguir.
Em algumas soluções, tanto a compatibilidade quanto o processo de configuração do agente podem ser mais simples.
Esses agentes são instalados no servidores da aplicação e têm o papel de enviar informações da sua aplicação para um servidor que irá trabalhar com essas informações e apresentar dados como consumo de memória, CPU, tempo de resposta da requisição, trace do código que está sendo executando em tempo de execução, ações de usuário, etc. Em resumo existe um leque de funcionalidades para você saber tudo que está acontecendo.
A maioria das ferramentas, como o Dynatrace, New Relic e Datadog, utilizam um padrão de métricas do Apdex, mas no caso do AppDynamics ele utiliza outro padrão de métrica conforme o próprio blog: (https://www.appdynamics.com/blog/tag/apdex/).
É importante fazer uma leitura do meu artigo sobre Apdex, para que você, leitor, fique por dentro de tudo que vamos falar daqui para frente.
Uma funcionalidade bem importante dessas ferramentas seria o Auto Discovery, em pouco tempo elas conseguem traçar toda a topologia que está sendo utilizada pela aplicação.
Conforme será apresentado a seguir podemos ver o mapeamento de Serviços feito pela solução da Dynatrace.
O próximo exemplo mostra o mapeamento de serviços feito pela solução da DataDog usando o Service Map.
A Solução de Inteligência Artificial da Dynatrace foi projetada para reconhecer problemas de desempenho em toda a fila de aplicativos. A plataforma usa análise preditiva para detectar comportamentos anormais nos aplicativos e notificá-lo quando você precisar executar uma ação. Essa solução de IA ainda tem a capacidade de determinar se um limite acionado é um problema que afeta a experiência do cliente. Em essência, a IA ajuda a priorizar as preocupações de desempenho automaticamente e ignora os problemas triviais para reduzir alertas excessivos.
A solução Datadog de inteligência artificial também está preparada para detectar automaticamente as anomalias.
Hoje se fala muito da arquitetura de microserviços e é extremamente importante que você tenha um monitoramentos de todos os seus serviços com padrões de métricas - claro que isso se estende aplicações monolíticas. Mas vale ressaltar que muitas empresas vem adotado a prática de monitorar, apenas começa a aparecer os problemas.
É muito importante trabalhar de forma preventiva, utilizando esses recursos desde a concepção do software. É também fundamental que, em cada ajuste que for feito no projeto, a equipe faça reuniões e explique todos o ajustes de performance que foram executados. Isso aumenta o nível de consciência das boas práticas com a equipe.
Um bom aliado nesse processo é utilizar uma ferramenta de teste de Carga, como é o caso do JMeter. Isso ajuda a montar um cenário próximo ao que a sua aplicação poderá enfrentar fora do seu ambiente de desenvolvimento.
Para estudo e até aumento da argumentação técnica, codificar um projeto e acompanhar o que está sendo produzido com uma ferramenta de APM irá mostrar vários problemas relacionados à mal utilização de frameworks, principalmente no que tange à utilização de ORM (Object Relational Mapper).
Como foi apresentado, a utilização de uma solução de APM irá ajudar a encontrar pontos de melhoria na aplicação que degradam a experiência do usuário. Também ajudará a equipe técnica no processo de melhoria continua e a ter uma maior consciência dos impactos de determinadas decisões no ambiente de produção. Nos próximos artigos eu irei ensinar com instalar uma solução de APM.
https://www.appdynamics.com/blog/tag/apdex/
https://en.wikipedia.org/wiki/Application_performance_management
https://www.datadoghq.com/blog/autodiscovery-docker-monitoring/
https://www.datadoghq.com/apm/
https://www.dynatrace.com/platform/application-performance-management/