Performance JEE Haroldo R. J. de Macêdo hmacedo@br.ibm.com
Agenda Conceitos de performance Testes para performance Lições aprendidas 15/09/2009 Performance JEE - Just Java 2009 2
Programa Java x JEE Java Interface gráfica Cliente / Servidor Um usuário Executa localmente JEE Roda remotamente em um contêiner JEE Recebe requisições de vários usuários N camadas 15/09/2009 Performance JEE - Just Java 2009 3
Custo da baixa performance Custos de suporte altíssimos Mais recursos são necessários para a produção (CPU, Memória, Disco, Rede) Perda de confiança Tempo de resposta alto e piorando Perda de credibilidade Performance prometida não alcançada Perda de receita Como consequência da perda de clientes 15/09/2009 Performance JEE - Just Java 2009 4
Conceitos equivocados Basta apertar o botão mágico Acrescente mais memória ao sistema Inclua mais servidores Aumente a quantidade de CPUs Basta escrever o código e fazer deploy Não se pode criar um ambiente performático para um aplicativo mal projetado 15/09/2009 Performance JEE - Just Java 2009 5
Quando pensar em performance No projeto da arquitetura Durante o desenvolvimento Nos testes unitários Nos testes de integração Nos testes de carga No momento de deploy Sempre tenha performance em mente 15/09/2009 Performance JEE - Just Java 2009 6
Modelo em camadas JEE
Topologia JEE em produção
Qual é a causa da baixa performance Servidor Web Rede Balanceador de carga Servidor de Aplicação Banco de Dados Hardware Projeto Firewall Back End EJBs Etc. 15/09/2009 Performance JEE - Just Java 2009 9
Exemplo da apresentação Atendimento em um supermercado Exemplo centrado no atendimento no caixa do supermercado Dirigir-se ao caixa Passar os produtos pelo caixa Pagar Ensacar os produtos Sair do caixa com os produtos no carrinho Não leva em consideração Deslocamento até o supermercado Estacionar o carro Escolher os produtos Colocar as compras no carro Dirigir para casa 15/09/2009 Performance JEE - Just Java 2009 10
Agenda Conceitos de performance Testes para performance Lições aprendidas 15/09/2009 Performance JEE - Just Java 2009 11
Conceitos de performance Tempo de resposta Carga Fluxo (Throughput) Capacidade 15/09/2009 Performance JEE - Just Java 2009 12
Outros conceitos Enfileiramento Escalabilidade Gargalo Monitoramento Arquitetura Isolamento 15/09/2009 Performance JEE - Just Java 2009 13
Tempo de resposta Tempo que um indivíduo aguarda pela resposta de uma requisição Normalmente a média dos 95% melhores tempos Componentes principais Tempo de processamento Tempo de espera em filas 15/09/2009 Performance JEE - Just Java 2009 14
Tempo de resposta É uma medida crítica Baixo tempo de resposta desagrada os usuários Tempo de resposta deve ser considerado em: Momentos de pico Cargas altas fora do normal Clientes usando rede discada 15/09/2009 Performance JEE - Just Java 2009 15
Tempo de resposta Na Web Tempo entre uma requisição e sua resposta Tempo entre o clique de um botão e apresentação da nova tela No exemplo do supermercado É o tempo que o cliente demora desde o momento que chega ao caixa até o momento que sai do caixa com as compras 15/09/2009 Performance JEE - Just Java 2009 16
Carga É a pressão em um site expressa em: Atividade dos usuários Usuários chegando Usuários se logando Usuários enviando requisições Atividades de requisição Requisições por segundo Páginas por hora Transações por segundo 15/09/2009 Performance JEE - Just Java 2009 17
Carga No exemplo do supermercado Quantidade de clientes no supermercado que estão indo em direção ao caixa ou que já estão na fila do caixa Quantidade de clientes que usam o site ao mesmo tempo 15/09/2009 Performance JEE - Just Java 2009 18
Fluxo Throughput Mede tarefas concluídas por unidade de tempo É uma medida de capacidade Não mede todas as solicitações, apenas as que foram atendidas Solicitações em excesso serão enfileiradas, abandonadas ou descartadas 15/09/2009 Performance JEE - Just Java 2009 19
Fluxo No exemplo do supermercado Quantidade de clientes atendidos por minuto no caixa do supermercado Não contabiliza os clientes que desistiram ao ver uma fila grande Outros exemplos Carros que passam por minuto em uma ponte Requisições por segundo num site Clientes servidos por hora em um restaurante 15/09/2009 Performance JEE - Just Java 2009 20
Fluxo Caixa de supermercado Cada caixa atende a um cliente a cada 5 minutos Com 1 caixa, o supermercado atende 12 clientes / hora Com 10 caixas, o supermercado atende 2 clientes / minuto 15/09/2009 Performance JEE - Just Java 2009 21
Capacidade Descreve a carga suportada O resultado final do teste de carga e performance Determina a infraestrutura de hardware e software necessária Deixa uma gordura para emergências Leva em consideração o crescimento do site para um aumento futuro da carga 15/09/2009 Performance JEE - Just Java 2009 22
Capacidade No exemplo do supermercado Quantidade de caixas disponíveis na loja do supermercado Tipo do caixa Leitora de código de barras Digitação do preço Quantidade da caixas em operação Qualidade do pessoal do caixa 15/09/2009 Performance JEE - Just Java 2009 23
Capacidade Exemplo do supermercado Quantas caixas registradoras serão necessárias para atender a 10.000 clientes por dia? Há necessidade de caixas extras no fim do mês? Será necessário mais espaço físico para expansões futuras? Mais estacionamento Mais andares Outro prédio nas proximidades 15/09/2009 Performance JEE - Just Java 2009 24
Gargalo Ponto de redução de fluxo Aparece em programas multithread ou multiusuários Usuários enfileirados esperando recurso compartilhado CPU, I/O, Registro no BD Threads esperando por uma tarefa ser completada Resolva os gargalos em ordem de severidade O sistema é tão rápido quanto o seu componente mais lento 15/09/2009 Performance JEE - Just Java 2009 25
Gargalo No aeroporto Check-in Detector de metais Porta do avião Nas estradas Construções Pedágios Acidentes 15/09/2009 Performance JEE - Just Java 2009 26
Escalabilidade Define a facilidade de expansão do sistema Sites precisam se expandir, às vezes inesperadamente Novos mercados Crescimento normal Picos extremos 15/09/2009 Performance JEE - Just Java 2009 27
Escalabilidade No supermercado Caixas disponíveis na loja Espaço para instalação de mais caixas Redução do espaço ocupado por um caixa Aumento do prédio, com a compra de prédios vizinhos 15/09/2009 Performance JEE - Just Java 2009 28
Conceitos de performance Tempo de Resposta Carga Fluxo (Throughput) Capacidade Enfileiramento Escalabilidade Gargalo Monitoramento Arquitetura Isolamento 15/09/2009 Performance JEE - Just Java 2009 29
Como melhorar a performance Aumentar a capacidade Quantidade de CPU Quantidade de caixas de supermercado Reduzir o tempo de processamento Acelerar um ou mais passos da transação Código mais eficiente Caixas trabalhando mais rápido Reduzir o número de passos necessários para a transação Reduzir o número de telas Não retirar os produtos do carrinho de supermercado 15/09/2009 Performance JEE - Just Java 2009 30
Agenda Conceitos de performance Testes para performance Lições aprendidas 15/09/2009 Performance JEE - Just Java 2009 31
Quando testar? 15/09/2009 Performance JEE - Just Java 2009 32
Análise de código Análise estática de código Implementação das melhores práticas Código Arquitetura Análise dinâmica de código Profiling Leak de memória Gargalos Problemas com thread 15/09/2009 Performance JEE - Just Java 2009 33
Por que fazer teste de performance Melhorar a qualidade percebida pelo usuário Descobrir mais cedo defeitos que reduzem a performance Custo por defeito: 1 no projeto 10 nos testes 100 em produção Obter dados para decidir sobre funcionalidades que afetam o aplicativo 15/09/2009 Performance JEE - Just Java 2009 34
Objetivos dos testes de performance Identificar os tempos de resposta Validar os requisitos e tempos de resposta Fazer benchmark SLA (Nível de serviço acordado) Determinar o número máximo de usuários Plano de capacidade Escalabilidade Descobrir a melhor configuração Carga normal e pico Ambiente de failover 15/09/2009 Performance JEE - Just Java 2009 35
Agenda Conceitos de performance Testes para performance Lições aprendidas 15/09/2009 Performance JEE - Just Java 2009 36
Altíssima carga Sistema Web com 1.200 transações / segundo Preocupações de Projeto Código que demore mais 1ms sem necessidade Tem o impacto de 1,2 segundo em consumo de CPU Preocupação com o código que possui laços de loop Gargalo que pare o sistema por 30 segundos Enfileira 36.000 transações Derruba o sistema Monitoração e ação automática 15/09/2009 Performance JEE - Just Java 2009 37
Gargalo no BD Acesso serializado a uma tabela do BD O sistema é tão rápido quanto o tempo de resposta do banco Não adianta acrescentar CPU ou memória no contêiner, nem melhorar a rede Melhora no projeto para aumentar a concorrência Queries demoradas Alto consumo de I/O e CPU do servidor de BD Alteração de funcionalidade restringindo a busca 15/09/2009 Performance JEE - Just Java 2009 38
Loop no código Uma das funcionalidades entrava em loop Consumo alto de CPU Baixo impacto inicial Arquitetura de threads Melhora no processo de desenvolvimento de software, com mais testes e controle de versão 15/09/2009 Performance JEE - Just Java 2009 39
Melhores práticas Defina os objetivos de performance o mais cedo possível Valide a arquitetura e o projeto o mais cedo possível Use o design-pattern MVC Não reinvente a roda Programe as especificações e não o servidor de aplicativos Use o desenvolvimento iterativo Sempre use Sessions Facade quando usar componentes EJBs Pegue os recursos compartilhados tarde e os devolva rápido Coloque o processamento perto do recurso que ele necessita Use o JEE ao invés de tentar enganá-lo 15/09/2009 Performance JEE - Just Java 2009 40
Perguntas?
Referência Curso WF-881 IBM WebSphere V6 Performance Testing and Monitoring Tools for Administrators IBM Red Books SG246392 WebSphere Application Server V6 Scalability and Performance Handbook SG247497 Designing and Coding Applications for Performance and Scalability in WebSphere Application Server 15/09/2009 Performance JEE - Just Java 2009 42
Hindi Russian Traditional Chinese Obrigado Gracias Spanish Thai Brazilian Portuguese Arabic Merci French Thank You English Grazie Italian Simplified Chinese Danke German Tamil Korean Japanese