Высокое время отклика в Azure Web App
Я разработал API-интерфейс RESTful, который я развернул в Azure Web App. Выполняя нагрузочный тест с использованием JMeter, я вижу, что время отклика огромно, т.е. ~18 сек. Это время отклика меня пугает, потому что конечная точка, которую я открыл, получает только ~1-2 КБ текстовых данных и помещает их в очередь Azure Service Bus.
Я исследовал и нашел следующее:
- Веб-приложение Azure и очередь должны находиться в одном регионе. да
- Размер виртуальной машины имеет значение. Шахта S3 Large
- Дизайн программного обеспечения должен быть хорошим / оптимизированным. Контроллер только ставит в очередь, никаких других операций
Для нагрузочного тестирования я подготовил экземпляр виртуальной машины в том же регионе, что и веб-приложение Azure, чтобы минимизировать задержку. Оператор enqueue занимает время порядка миллисекунд, поэтому мне интересно, что занимает дополнительные секунды, пока служба загружена?
Мой код создает один экземпляр QueueClient, который я повторно использую для всех запросов. Код - это просто следующие две строки внутри ApiController
ServiceBusManager.GetQueueWriter().Enqueue(data); //data is no more than ~1KB
return Request.CreateResponse(HttpStatusCode.OK, "Data enqueued");
1 ответ
- Убедитесь, что ваши экземпляры Azure WM не перегружены с точки зрения ЦП, ОЗУ, диска и сети. Это можно сделать с помощью расширения диагностики Azure или плагина JMeter PerfMon.
- Убедитесь, что вы следуете рекомендациям JMeter
- Попробуйте увеличивать нагрузку постепенно, таким образом вы сможете соотнести растущее число виртуальных пользователей с увеличением времени отклика и сможете определить, когда производительность начнет снижаться.
- Запустите свой тест с помощью инструмента телеметрии с помощью профилировщика (т. Е. Подключите YourKit или dotTrace) - так вы сможете определить, на что ваше приложение тратит столько времени.