Обработка нескольких файлов в хранилище BLOB-объектов Azure одновременно на основе пользовательской логики - PullRequest
0 голосов
/ 26 декабря 2018

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

У меня есть куча файлов для моих разных клиентов в моем хранилище больших двоичных объектов "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 и добавьте их имя в очередь Azure.

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

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

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

1 Ответ

0 голосов
/ 01 января 2019

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

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

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

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

...