Почему мое приложение функции Azure, запускаемое очередью, не масштабируется?

#azure-functions #azure-storage-queues

Вопрос:

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

В этом-то и проблема. Функционально все работает так, как и ожидалось. Однако приложение-функция не масштабируется, несмотря на наличие тысяч записей в очереди и многочасовую обработку. Я проверил отсутствие масштабирования, используя показатели службы приложений и «разделение» по экземплярам. Он показывает только одну виртуальную машину. Я настроил журналы контроллера масштаба (https://docs.microsoft.com/en-us/azure/azure-functions/configure-monitoring?tabs=v2), но файл журнала не указывает на какое-либо масштабирование или не помогает диагностировать, почему этого не происходит.

У меня есть «размер пакета», установленный в файле host.json, поэтому я немного распараллеливаю экземпляр виртуальной машины. Однако этого недостаточно, и мне нужно выяснить, почему ожидаемое мной поведение масштабирования не происходит.

Я ценю любые указания по этому вопросу.

Спасибо.

Ответ №1:

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

Для получения полной информации проверьте Функции Azure, запускаемые Очередью Масштабирования, а также проверьте Функции Масштабирования Azure.

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

1. Спасибо вам за ваш ответ. Однако решение, которое вы предлагаете, кажется очень плохим обходным путем. Если бы мне понадобилось 20 экземпляров, нужно ли было бы развертывать один и тот же код в 20 различных функциональных приложениях? Я не могу поверить, что это то, что Microsoft имеет в виду, чтобы обеспечить масштабирование функций Azure. Я пытаюсь использовать функции масштабирования, управляемые событиями, описанные здесь: docs.microsoft.com/en-us/azure/azure-functions/.