Как найти / устранить источник проблем с функциональностью приложения - PullRequest
2 голосов
/ 09 мая 2019

У меня есть приложение-функция 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 голос
/ 10 мая 2019

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

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

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

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

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

0 голосов
/ 10 мая 2019

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

AzureDevOps Load Test

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

Provision VM в Azure

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

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

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

Использование Application Insights

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

...