Я разработал RESTful API, который развернул в Azure Web App. При выполнении нагрузочного теста с использованием JMeter я вижу, что время отклика огромное, т. е. ~18 секунд. Это время отклика ужасает меня, поскольку конечная точка, которую я выставил, получает только ~1-2 КБ текстовых данных и помещает их в очередь Azure Service Bus.
Я провел исследование и обнаружил следующее:
- Веб-приложение и очередь Azure должны находиться в одном регионе.Да, они
- Размер виртуальной машины имеет значение.У меня S3 Large.
- Проектирование программного обеспечения должно быть качественным/оптимизированным.Контроллер только ставит в очередь, никаких других операций.
Для нагрузочного тестирования я подготовил экземпляр виртуальной машины в том же регионе, что и Azure Web App, чтобы минимизировать задержку. Оператор 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
- Попробуйте увеличить нагрузкупостепенноТаким образом, вы сможете сопоставить увеличение числа виртуальных пользователей с увеличением времени отклика и сможете определить, когда производительность начнет снижаться.
- Запустите тест с помощью телеметрического инструмента профилировщика (т.е. подключитеВашКомплектилиdotTrace) - таким образом вы сможете узнать, где ваше приложение тратит столько времени.