Могу ли я запустить несколько экземпляров функции azure, прослушивающих одну и ту же очередь

#azure #azure-functions

#azure #azure-функции

Вопрос:

Справочная информация: Недавно я столкнулся с проблемой, из-за которой моя функция не может обрабатывать нагрузку, и сообщения очереди накапливаются. В долгосрочной перспективе я просматриваю код, чтобы найти, где есть бутылочные горлышки, но в краткосрочной перспективе мне нужно решить эту проблему.
Вопрос:
Могу ли я добавить несколько экземпляров одной и той же функции azure (даже если это переименование myjobrunner1, myjobrunner2) и т.д., Которые все прослушивают одну и ту же очередь? Поможет ли это в моей ситуации?

Некоторые предостережения:
Премиум-план выглядит хорошо, но на данный момент я не могу протестировать предварительный просмотр во время производства.
Добавление выделенного AppService — это вариант, но это более долгосрочное решение. Сейчас у меня проблема.
Исправления кода находятся в процессе, чтобы лучше обрабатывать нагрузку и повышать производительность, но тот факт, что внешние службы являются тем, что их задерживает, является фактором.

Комментарии:

1. Какой тип уровня / плана вы используете в настоящее время? Если вы добавите другую функцию, я не уверен на 100%, как все будет себя вести, но я, вероятно, ожидал бы увидеть некоторую обработку одного и того же сообщения несколько раз, что заставило бы меня отказаться от этого. Я думаю, что выбор в пользу многоуровневого плана с более высоким уровнем использования был бы самым безопасным, и пусть Azure определяет, сколько экземпляров ей нужно запустить, на основе очереди. Мы используем план потребления, и он хорошо масштабируется, когда мы синхронизируем данные ежечасно, а затем узким местом становится Cosmos DB

2. Я подумал, что функции Azure будут масштабироваться лучше лично. Это казалось обещанием, но моя очередь продолжает расти. На самом деле нет времени, чтобы виртуальная машина исчезла, потому что, похоже, она работает на полную мощность. У меня нет проблем с двойной оплатой за мой текущий план потребления (или тройной), если это сработает. Но я всегда думал, что идея с очередью заключалась в том, что после того, как сообщение было отключено, ничто другое не могло его получить.

Ответ №1:

Как я решил проблему.
Я добавил дополнительную очередь и логику для разделения сообщений между двумя очередями. Затем я создал новый экземпляр функции (1 и 2), который указывал на вторую очередь. Первоначально я думал, что очереди работают, позволяя извлекать только одну копию сообщения. Тогда никакая другая служба не смогла бы прочитать это сообщение. Похоже, что это не относится к моему тестированию.

Запуск двух функций, каждая с максимальным количеством пакетов, решил проблему. Это шаблон, который я могу продолжать, пока мы не сможем эффективно рассмотреть больше улучшений кода. Но наше бутылочное горлышко, похоже, представляет собой экземпляры httpclient (я не могу запускать их как статические и потребовал бы значительных изменений) и некоторые вызовы db, которые можно было бы оптимизировать.

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