Обработка нескольких файлов в хранилище BLOB-объектов Azure одновременно на основе настраиваемой логики

Мое точное требование таково:

У меня есть куча файлов для разных клиентов в моем хранилище BLOB-объектов "B1". Допустим, 10 файлов для клиента «C1», 10 файлов для клиента «C2» и 10 файлов для клиента «C3».

Я хочу выполнить некоторую операцию с каждым файлом и переместить их в хранилище BLOB-объектов «B2». Это может занять от 30 секунд до 5 минут в зависимости от данных в файле.

Теперь я хочу обрабатывать один файл для каждого клиента одновременно, но не более одного файла для одного и того же клиента одновременно.

Как и один файл для клиента «C1», один для «C2» и один для «C3» должны обрабатываться одновременно. Таким образом, время обработки «C1» не влияет на «C2» и «C3». Но следующий файл C1 будет обработан только тогда, когда будет завершен первый.

Какая архитектура с функциями Microsoft Azure лучше всего подходит для этого?

Например, я реализовал это с помощью функции Azure V1:

  1. Функция Azure, инициируемая BLOB-объектами. При этом имена файлов с идентификатором клиента добавляются в таблицу Azure, как только любой файл помещается в BLOB-объект. Эта таблица будет содержать еще один столбец «InQueue», который по умолчанию имеет значение FALSE.

  2. Функция Azure, запускаемая по времени: при этом проверяется таблица Azure и берется первый файл для каждого клиента, для всех файлов которого InQueue = FALSE (означает: файл не обрабатывается). И для них обновите InQueue = TRUE и добавьте их имя в очередь лазурных.

  3. Функция Azure, инициируемая очередью: она запускается, как только какой-либо файл оказывается в очереди Azure и выполняет с ним обработку. После завершения процесса он удалит запись для этого файла из таблицы azure. Итак, теперь для клиента этого файла все остальные записи имеют "InQueue" = FALSE (файл не обрабатывается).

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

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


comment
Пожалуйста, прокомментируйте это.   -  person Yash    schedule 31.12.2018


Ответы (1)


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

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

Здесь я использовал повторение (расписание) в качестве триггера, который вы могли бы использовать для других. И после каждой ветки вы также можете добавлять к ней действия, как показано на рисунке. введите здесь описание изображения

Надеюсь, это поможет вам. Если у вас остались вопросы, дайте мне знать.

person George Chen    schedule 01.01.2019