Desenvolvi uma API RESTful que implantei no Azure Web App. Ao realizar o teste de carga usando JMeter, vejo que o tempo de resposta é enorme, ou seja, aproximadamente 18 segundos. Esse tempo de resposta me assusta porque o endpoint que expus recebe apenas cerca de 1-2 KB de dados de texto e os enfileira na fila do barramento de serviço do Azure.
Eu pesquisei e encontrei o seguinte:
- O Aplicativo Web do Azure e a Fila precisam estar na mesma região.sim, eles estão
- O tamanho da VM é importante.O meu é S3 Grande
- O design de software precisa ser bom/otimizado.O controlador apenas enfileira, nenhuma outra operação
Para testes de carga, provisionei uma instância de VM na mesma região que o Aplicativo Web do Azure para minimizar a latência. A instrução enqueue leva um tempo da ordem de milissegundos, então eu me pergunto o que está demorando os segundos extras enquanto o serviço está sendo carregado?
Meu código cria uma única instância de QueueClient que reutilizo para todas as solicitações. O código consiste apenas nas duas linhas a seguir dentro de um ApiController
ServiceBusManager.GetQueueWriter().Enqueue(data); //data is no more than ~1KB
return Request.CreateResponse(HttpStatusCode.OK, "Data enqueued");
Responder1
- Certifique-se de que suas instâncias do Azure WM não estejam sobrecarregadas em termos de CPU, RAM, disco e rede. Você pode fazer isso usandoExtensão de Diagnóstico do AzureouPlug-in JMeter PerfMon
- Certifique-se de estar seguindoMelhores práticas do JMeter
- Tente aumentar a cargagradualmente, dessa forma você poderá correlacionar o aumento do número de usuários virtuais com o aumento do tempo de resposta e poderá indicar quando o desempenho começa a diminuir.
- Execute seu teste com telemetria da ferramenta profiler (ou seja, conecteSeuKitoupontoTrace) - dessa forma você poderá saber onde seu aplicativo passa tanto tempo.