#azure #.net-core #azure-sql-database #stress-testing #azure-app-service-plans
#azure #.net-core #azure-sql-database #стресс-тестирование #планы azure-app-service-plans
Вопрос:
В настоящее время я провожу стресс-тестирование приложения .Net Core, предназначенного для netcoreapp2.2, которое размещено в Azure как служба приложений, подключенная к тарифному плану P1V2 (210 ACU, 3,5 ГБ памяти) с 2 экземплярами.
Конечная точка, которую я подвергаю стресс-тестированию, очень проста, она проверяет токен Oauth2.0, получает пользователя и некоторую информацию о пользователе из базы данных Azure, размещенной на сервере P2 (250 DTU), всего 4 запроса к БД на запрос и возвращает строку «Pong».
При одновременном запуске 15 пользователей (или более) в 200 циклах я вижу остановку (ы) обработки, видимую на изображении (между высокими пиками). Тарифный план никогда не использует процессор более чем на 20-35%, а загрузка базы данных никогда не превышает 2%. Увеличение числа пользователей снижает среднюю пропускную способность.
При взгляде на медленные запросы создается впечатление, что они просто случайным образом останавливаются, никогда в одном и том же месте. Когда я просматриваю запросы к БД, я никогда не вижу запроса, который занимает больше пары 100 миллисекунд, в то время как обработка некоторых запросов может занимать до 5-6 секунд.
Такое ощущение, что я достигаю некоторого предела, в результате чего что-то останавливается на некоторое время, но я не могу понять, в чем проблема.
При локальном выполнении того же стресса я не вижу этих остановок.
Я использую jmeter cli для запуска стресс-тестов в обеих средах.
Мы высоко ценим любую помощь, спасибо!
Комментарии:
1. как запустить тест локально?
2. Используя jmeter CLI, следовало бы уточнить это, спасибо!
Ответ №1:
Это может быть связано с поведением защиты от DDOS-атак Azure.
Если ваше приложение подвергается DDOS-атаке, Корпорация Майкрософт прекратит все подключения к вашей конечной точке и, по сути, отключит вашу службу.
Чтобы избежать этого, вам необходимо настроить брандмауэр веб-приложений (WAF) для исключения исправных запросов.