Мое точное требование таково:
У меня есть куча файлов для моих разных клиентов в моем хранилище больших двоичных объектов "B1".Скажем, 10 файлов для клиента "C1", 10 файлов для клиента "C2" и 10 файлов для клиента "C3".
Я хочу выполнить некоторые операции с каждым файлом и переместить их в хранилище BLOB-объектов "B2",Это может занять от 30 секунд до 5 минут в зависимости от данных в файле.
Теперь я хочу обрабатывать один файл для каждого клиента одновременно, но не более одного файла для одного и того же клиента одновременно.
Как и один файл для клиента "C1", один для "C2" и один для "C3" должны обрабатываться одновременно.Таким образом, время обработки «C1» не влияет на «C2» и «C3».Но следующий файл C1 будет обработан только после завершения первого.
Какова лучшая архитектура с функциональными возможностями Microsoft Azure для реализации этого?
Например, я реализовал так сФункция Azure V1:
Функция Azure, запущенная с BLOB-объектами : это просто добавит имена файлов с идентификатором клиента в таблицу Azure, как только любой файл будет помещен в BLOB-объект.Эта таблица будет содержать еще один столбец «InQueue», который по умолчанию равен FALSE.
Функция Azure, запускаемая по времени : эта проверка в таблице Azure и получение первого файла длякаждый клиент, для которого все файлы имеют InQueue = FALSE (означает: файл не обрабатывается).А для них обновите InQueue = TRUE и добавьте их имя в очередь Azure.
Функция Azure, запускаемая очередью : эта функция будет запущена, как только любой файл окажется в Azure.очередь и сделать процесс на нем.После завершения процесса он удалит запись для этого файла из таблицы Azure.Итак, теперь для пользователя этого файла все остальные записи имеют «InQueue» = FALSE (файл не обрабатывается)
Так что в вышеприведенной архитектуре функция Azure Time Triggered заботится об одном файлена одного клиента, но он также выдвигает несколько файлов разных клиентов в очередь.И так как функция Azure запускается очередью, она может запускать несколько экземпляров одновременно.Все файлы разных клиентов будут выполняться одновременно.
У меня хорошая архитектура?или плохо?или как я могу улучшить это?Какие есть другие варианты, которые могут сделать мой процесс быстрее, проще или с меньшим количеством шагов?