Функция Azure, запущенная с размером пакета 1, в режиме потребления все еще работает параллельно

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

{
  "queues": {
  "batchSize": 1
  }
}

Очередь является частью учетной записи Microsoft Storage и не является служебной шиной.

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

Если вы хотите избежать параллельного выполнения для сообщений, полученных в одной очереди, вы можете установить batchSize равным 1. Однако этот параметр исключает параллелизм только до тех пор, пока ваше функциональное приложение работает на одной виртуальной машине (ВМ). Если приложение функции масштабируется до нескольких виртуальных машин, каждая виртуальная машина может запустить один экземпляр каждой функции, инициируемой очередью.

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

1 ответ

Решение

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

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

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

Для более подробной информации, вы можете обратиться к этой статье.

Другие вопросы по тегам