Performance JEE
Performance JEE
Haroldo R. J. de Macêdo
Agenda
Agenda
Conceitos de performance
Testes para performance
Lições aprendidas
Programa Java x JEE
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
Custo da baixa performance
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
Conceitos equivocados
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
Quando pensar em performance
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
Modelo em camadas JEE
Topologia JEE em produção
Topologia JEE em produção
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
Qual é a causa da baixa performance
Qual é a causa da baixa performance
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
Exemplo da apresentação
Exemplo da apresentação
Agenda
Agenda
Conceitos de performance
Testes para performance
Lições aprendidas
Conceitos de performance
Conceitos de performance
Tempo de resposta
Carga
Fluxo (Throughput)
Capacidade
Outros conceitos
Outros conceitos
Enfileiramento
Escalabilidade
Gargalo
Monitoramento
Arquitetura
Isolamento
Tempo de resposta
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 resposta
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
Tempo de resposta
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
Carga
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
Carga
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
Fluxo
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
Fluxo
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
Fluxo
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
Capacidade
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
Capacidade
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
Capacidade
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
Gargalo
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
Gargalo
Gargalo
No aeroporto
◦ Check-in ◦ Detector de metais ◦ Porta do avião Nas estradas
◦ Construções ◦ Pedágios ◦ AcidentesEscalabilidade
Escalabilidade
Define a facilidade de expansão do sistema
Sites precisam se expandir, às vezes
inesperadamente
◦ Novos mercados
◦ Crescimento normal
◦ Picos extremos
Escalabilidade
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
Tempo de Resposta
Carga
Fluxo (Throughput)
Capacidade
Enfileiramento
Escalabilidade
Gargalo
Monitoramento
Arquitetura
Isolamento
15/09/2009 Performance JEE - Just Java 2009 29
Conceitos de performance
Conceitos de performance
Como melhorar a performance
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
Agenda
Agenda
Conceitos de performance
Testes para performance
Lições aprendidas
Quando testar?
Quando testar?
Análise de código
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
Por que fazer teste de performance
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
Objetivos dos testes de performance
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
Agenda
Agenda
Conceitos de performance
Testes para performance
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
Altíssima carga
Altíssima carga
Gargalo no BD
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
Loop no código
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
Melhores práticas
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
Referência
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