Performance em aplicações web – Parte I Vanilson Burégio [email protected] Objetivo da aula Discutir os principais conceitos e métricas relacionadas com performance e utilizar ferramenta para monitorar e melhorar a performance de uma aplicação web Por que monitorar performance? Seguimos todos os padrões de codificação estabelecidos! Não temos tempo nem dinheiro para executar testes de performance! Nós realizamos testes unitários, o sistema não deveria ter nenhum erro! A aplicação funciona muito bem quando executo no meu laptop! Qualquer empresa que implanta uma aplicação sem conduzir testes de performance está assumindo altos riscos! Os custos de uma má performance Custo de suporte para tornar a aplicação escalável – Mais recursos são necessários para suportar a aplicação em produção Perda da confiança do cliente – Tempos de respostas altos não são aceitos pelos usuários Perda da credibilidade – Níveis de performance não correspondem ao que foi fechado no contrato Perda de dinheiro $ – O efeito inevitável de perda de clientes Quando pensar em performance Projeto da Arquitetura Período de desenvolvimento Fase de testes de componentes e unitários Fase de testes de performance Implantação Resumo: – considere performance em todos os passos desde o projeto até a implantação da aplicação O que deve ser analisado em uma aplicação web Código do cliente HTTP Server Application server – Containers (EJB, WEB) Banco de dados Rede (dispatchers) Roteadores Firewalls O ambiente de uma aplicação pode ser simples ou complexo e uma série de elementos devem ser analisados Exemplo de Arquitetura O que pode causar problemas de performance? Firewall? Network dispatcher? Application Server? Projeto da Aplicação? Web Server? Banco de dados? Hardware? Por que fazer testes de performance? Reunir dados de desempenho da aplicação para tomar decisões de negócios que afetem a aplicação Melhorar a qualidade percebida pelo usuário – Atributos de qualidade chaves: tempo de resposta e velocidade Descobrir defeitos que afetam o desempenho da aplicação Impacto de descobrir defeitos tarde Custo por Defeito 1 10 100 Projeto Teste Produção Objetivos de testes de performance Identificar tempos de resposta do sistema – Validação de requisitos e objetivos de desempenho – Benchmarking – Acordo de Nível de Serviço (SLAs) Determinar o número máximo de usuários de um sistema – Planejamento da capacidade – Escalabilidade Descobrir as configurações ótimas e mínimas – Carga normal e carga máxima – Customizar configurações do ambiente Termos relacionados com performance Vocabulário fundamental para especialistas em performance Termos chaves – – – – – – – Tempo de resposta (Response time) Carga (Load) Vazão (Throughput) Caminho da aplicação (Path Length) Gargalo (Bottleneck) Escalabilidade (Scalability) Capacidade (Capacity) Tempo de Resposta O tempo de resposta mede o tempo em que um espera por uma requisição – Normalmente expresso como uma média ou 95% Maiores componentes do tempo de resposta – Tempo de processamento – Tempo de transmissão (usualmente parte do tempo de processamento) – Qualquer tempo de espera em fila Qual o tempo de resposta aceitável? – Isso é definido pelos padrões da indústria! Tempo de Resposta Processo de saída inicia quando o cliente entra na fila Processo de saída termina quando o cliente recebe seus produtos Componentes do tempo de resposta: – – – – Tempo na fila Tempo real de registro das compras Pegar dinheiro e receber o troco Empacotar as mercadorias Tempo de Resposta Medido a partir da solicitação feita a página retornada Tempo de resposta de um web site é em função do: – Tempo de puro processamento – Mais tempo de espera em qualquer número de filas – Mais tempo de transferência entre múltiplos componentes Medição crítica de tempo de resposta Tempo de resposta é uma medição crítica Tempos de respostas ruins => clientes insatisfeitos Muitos web sites falham por causa de questões relacionadas a tempo de resposta Considere tempo de resposta: – Sob cargas em horários de pico – Sob cargas excepcionais (dias de alta demanda: natal) – Sobre conexões lentas (dial-up) Carga (load) Carga é a “pressão” sobre o web site Expressado como: – Atividade do usuário • Chegadas dos usuários • Logging dos usuários • Envio de solicitações dos usuários – Atividade de solicitação • Solicitações por segundo, páginas por hora, etc... Carga (load) Carga é a “pressão” sobre o web site Expressado como: – Atividade do usuário • Chegadas dos usuários • Logging dos usuários • Envio de solicitações dos usuários – Atividade de solicitação • Solicitações por segundo, páginas por hora, etc... Vazão (Throughput) Vazão mede as coisas finalizadas em uma unidade de tempo – Exemplo: páginas de um site servidas por segundo Vazão é aplicada em muitos conceitos, não apenas web sites – Restaurante: clientes servidos por hora – Túneis: carros que passam por minuto – Departamento de embalagem em lojas: pacotes embrulhados por dia Vazão Máxima Vazão máxima é uma medida da capacidade – Saídas de um sistema obtidas em uma unidade de tempo Exemplo do restaurante – Se o restaurante tem apenas 1 funcionário servindo – ... e ele leva um minuto para servir um cliente – ... então a vazão máxima é de 1 cliente por minuto Não é uma medida da quantidade de solicitações, apenas quantas foram completadas – Excesso de solicitações podem ser enfileiradas, sair ou serem descartadas Saturação da Vazão Na vazão máxima cargas adicionais não vão aumentar a vazão Vazão máxima é um ponto de saturação – 100% de utilização da CPU é o caso ideal Vazão Transações / segundo Ponto de saturação Usuários concorrentes Exemplo de cafeteria saturada Um servidor ou sistema pode atender mais cargas além da vazão máxima Cafeteria – Se os clientes chegam um pouco mais rápido que o funcionário serve: • • • • Fila Tempo de resposta permanece bom Tempo de resposta = tempo na fila + tempo do serviço A vazão é a mesma (tempo de serviço constante) – Entretanto, se a quantidade de pessoas chegar significantemente mais rápido que a taxa de serviço • Tempo de resposta aumenta bem como o tempo de espera • A vazão eventualmente se torna comprometida Como medir isso em aplicações web? Como medir isso em aplicações web? Como medir isso em aplicações web? DEMONSTRAÇÃO PRÁTICA