Масштабирование функций Azure с помощью показателей, не связанных с памятью

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

Если у меня есть приложение-функция, которое иногда использует много ЦП, иногда много дискового или сетевого ввода-вывода, иногда в основном ОЗУ - сочетание показателей или даже только одно из первых двух, будет ли работать масштабирование функций?

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

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

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


person Josh    schedule 23.08.2016    source источник


Ответы (1)


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

Взгляните на мой ответ на аналогичный вопрос здесь: https://stackoverflow.com/a/37712126/2069. В нем более подробно рассказывается о том, как принимаются решения о масштабировании, с акцентом на функции запуска очереди. Надеюсь, это предоставит вам необходимую информацию.

person Chris Gillum    schedule 23.08.2016