Как найти / устранить источник проблем с функциональностью приложения

У меня есть приложение-функция Azure, запущенное HttpRequest. Функция app считывает запрос, помещает одну копию в таблицу хранения для безопасного хранения и отправляет другую копию в очередь для дальнейшей обработки другим элементом системы. У меня есть клиент, выполняющий тест ApacheBench, который сообщает о 148 обработанных запросах в секунду. Такой скорости обработки будет недостаточно для нашей ожидаемой нагрузки.

Мое понимание функциональных приложений состоит в том, что они должны порождать столько экземпляров, сколько необходимо для обработки загруженной им нагрузки. Но это функциональное приложение может масштабироваться недостаточно быстро, поскольку оно обрабатывает только 148 запросов в секунду. Мне нужно, чтобы обрабатывать не менее 200 запросов в секунду.

Я не уверен на 100%, что проблема на моем конце, хотя. Анализируя производительность моего функционального приложения, я обнаружил МНОГО 429 ошибок. То, что я нашел в Интернете, в частности https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits, позволяет предположить, что эти ошибки могут быть вызваны слишком большим количеством запросов, отправляемых из один IP. Могут ли несколько нагрузочных тестов ApacheBench 10K и 20K в течение одного дня вызвать ошибку 429?

Однако, если это не так, если проблема связана с моим функциональным приложением, как я могу заставить свое функциональное приложение быстрее создавать больше экземпляров? Я предполагаю, что это способ увеличить пропускную способность в секунду. Но я все еще очень новичок в работе с функциональными приложениями, поэтому, если есть другой способ, я бы с радостью приветствовал ваш вклад.

Может быть, план обслуживания приложений Premium, который находится в открытом предварительном просмотре, будет обрабатывать большую пропускную способность? Я думал о переключении на это и проведении быстрого теста, но не уверен, смогу ли я вернуться обратно?

Может, EventHub - это то, что мне нужно исследовать? Может ли это увеличить мою видимую пропускную способность, перехватывая больше запросов и удерживая их, пока приложение-функция не сможет их принять и обработать?

Заранее благодарим за любую помощь, которую вы можете оказать.

2 ответа

Решение

Вы не предоставляете много контекста своего приложения, но это несколько шагов, как вы можете улучшить

  1. Если вам нужен больший контроль, вам нужно использовать план обслуживания приложений с постоянно включенным, чтобы избежать холодного запуска, также вам необходимо настроить автоматическое масштабирование, поскольку вы отвечаете за этот план, и автоматическое масштабирование по умолчанию не включено в плане обслуживания приложений.

  2. Ваша функция Azure должна быть полностью асинхронной, поскольку у вас есть внешние зависимости, поэтому вы не хотите блокировать поток во время их вызова.

  3. Посмотри на пределы. Используя host.json, вы можете настроить его.

Ошибка 429 означает, что функция занята обработкой вашего запроса, поэтому, вероятно, когда вы пишете в таблицу, вы не используете асинхронный и блокирующий поток

Функциональные приложения работают очень хорошо и масштабируются, как говорится. Это может быть связано с тем, что запрос поступает от Single IP, а Azure может рассматривать его как DDOS. Вы можете сделать следующее

Нагрузочный тест AzureDevOps

Вы можете загрузить тест, используя один из сервисов Azure. Я очень уверен, что у них есть лучшие критерии обработки IP. Нагрузочный тест Azure DeveOps

Предоставление ВМ в Azure

Я обычно делаю это, подготавливая виртуальную машину (windows 10 pro) в Azure и использую тест JMeter для загрузки. Я использую этот метод для проверки, и он отлично работает. Вы можете выделить пару из них и разделить нагрузку.

Используйте профессиональные услуги нагрузочного тестирования

Если возможно, вы можете использовать такие сервисы, как https://loader.io/. Они используют сложные алгоритмы для запуска нагрузочного теста и предоставляют кучу виртуальных машин для выполнения того же теста.

Используйте Application Insights

Если это еще не так, вы должны использовать информацию о приложении, чтобы лучше рассмотреть его с точки зрения сервера. Перейдите в прямую трансляцию и посмотрите, сколько экземпляров он предоставит для обработки нагрузочного теста. Вы можете легко просматривать события и журналы ошибок, которые могут возникнуть и расследовать. Вы можете глубоко погрузиться в каждую связанную зависимость и исследовать проблему.

Другие вопросы по тегам