Testes de desempenho e antipadrões para aplicativos em nuvem

Os antipadrões de desempenho, assim como os padrões de design, são processos e implementações defeituosos comuns dentro das organizações. Essas são práticas comuns que provavelmente causarão problemas de escalabilidade quando um aplicativo estiver sob pressão. O conhecimento dessas práticas pode ajudar a simplificar a comunicação de conceitos de alto nível entre os profissionais de software, e o conhecimento de antipadrões pode ser útil ao revisar códigos ou diagnosticar problemas de desempenho.

Aqui está um cenário comum: um aplicativo se comporta bem durante o teste de desempenho. É libertada para produção e começa a processar cargas de trabalho reais. Nesse ponto, ele começa a ter um desempenho ruim — rejeitando solicitações de usuários, interrompendo ou lançando exceções. A equipa de desenvolvimento é então confrontada com duas questões:

  • Por que motivo este comportamento não surgiu durante o teste?
  • Como corrigimos?

A resposta à primeira pergunta é simples. É muito difícil simular utilizadores reais num ambiente de teste, bem como os seus padrões de comportamento e os volumes de trabalho que podem executar. A única forma completamente segura de compreender como um sistema se comporta sob carga é observá-lo em produção. Simplificando, não estamos a sugerir que deve ignorar os testes de desempenho. Os testes de desempenho são cruciais para obter métricas de desempenho de linha de base. Mas tem de estar preparado para observar e corrigir problemas de desempenho quando estes surgem ao vivo no sistema.

A resposta à segunda pergunta, como o corrigir o problema, não é tão simples. Qualquer número de fatores pode contribuir e, por vezes, o problema manifesta-se apenas em determinadas circunstâncias. O registo e a instrumentação são fundamentais para encontrar a causa raiz, mas também tem de saber o que procurar.

Com base no nosso envolvimento com os clientes do Microsoft Azure, identificámos alguns dos problemas de desempenho mais comuns com que os clientes se deparam na produção. Para cada anti-padrão, descrevemos o motivo habitual que causa o anti-padrão, os sintomas do mesmo e as técnicas para resolver o problema. Também fornecemos código de exemplo que ilustra o antipadrão e uma solução de escalabilidade sugerida.

Alguns desses antipadrões podem parecer óbvios quando você lê as descrições, mas eles ocorrem com mais frequência do que você imagina. Por vezes, uma aplicação herda uma estrutura que funcionou no local, mas não dimensiona na cloud. Ou uma aplicação pode começar com uma estrutura muito simples, mas à medida que são adicionadas novas funcionalidades, um ou mais destes anti padrões surgem. Independentemente disso, este guia irá ajudá-lo a identificar e corrigir estes anti padrões.

Catálogo de antipadrões

Aqui está a lista dos antipadrões que identificamos:

Anti-padrão Description
Base de dados ocupada Descarregar demasiado processamento para um arquivo de dados.
Front End ocupado Mover tarefas com muitos recursos para threads em segundo plano.
E/S Chatty Enviar continuamente muitos pedidos de rede pequenos.
Obtenção Externa Obter mais dados do que é preciso, resultando em E/S desnecessária.
Instâncias Impróprias Criar e destruir repetidamente objetos que foram concebidos para serem partilhados e reutilizados.
Persistência Monolítica Utilizar o mesmo arquivo de dados para os dados com padrões de utilização muito diferentes.
Sem Colocação em Cache Falha ao colocar dados em cache.
Vizinho barulhento Um único inquilino utiliza uma quantidade desproporcionada dos recursos.
Repetir tempestade Repetir solicitações com falha para um servidor com muita frequência.
E/S Síncrona Bloquear o thread de chamada enquanto a E/S é concluída.

Próximos passos

Para obter mais informações sobre otimização do desempenho, veja Otimizar o desempenho de uma aplicação distribuída