Запуск нескольких одновременных функций Azure с запуском по служебной шине без ухудшения времени

У меня есть функция триггера служебной шины, которая при получении сообщения из очереди выполняет простой вызов БД, а затем отправляет электронные письма / смс. Могу ли я выполнить> 1000 вызовов в очереди служебной шины, чтобы функция запускалась одновременно, не влияя на время выполнения?

Меня беспокоит то, что я ставлю в очередь более 1000 сообщений для одновременного запуска моей функции, скажем, в 17:00 для отправки электронных писем / sms. Если они закончат работу позже из-за того, что запущено так много потоков, пользователи, получающие электронные письма / смс, не получат их раньше, чем через 1 час после назначенного времени!

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


person user1186050    schedule 20.03.2018    source источник


Ответы (2)


Я предполагаю, что вы говорите о привязке служебной шины Azure к функции Azure. Не должно быть проблем с одновременным запуском> 1000 функций Azure. Это среда выполнения без сервера и должна иметь возможность значительного масштабирования, если вы работаете в рамках модели потребления. Если вы используете функции в плане обслуживания, вы можете быть ограничены планом обслуживания.

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

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

person Phillip Ngan    schedule 20.03.2018

1000 сообщений - это не большое количество. Если ваша служба электронной почты / смс сможет справиться с ними быстро, весь пакет уйдет относительно быстро. Но кое-что нужно знать:

  • В этом случае функции не будут масштабироваться до 1000 параллельных выполнений. Они начнут с того, что 1 экземпляр будет выполнять ~ 16 параллельных вызовов одновременно, а затем наблюдать, как быстро идет обработка, затем, возможно, добавить второй экземпляр, снова подождать и т. Д.

  • Точное поведение масштабирования публично не описывается и может измениться со временем. Таким образом, YMMV, и вам нужно протестировать ваш конкретный сценарий.

  • Да, по возможности делайте функции асинхронными. Я не ожидаю огромного прироста скорости обработки просто из-за этого, но это точно не повредит.

Итог: ваш сценарий не кажется проблемой для функций, но если вам нужна очень короткая задержка, вам придется запустить тест, прежде чем полагаться на него.

person Mikhail Shilkov    schedule 20.03.2018