Закон Мерфи для кода или автоматическое копирование файлов между Azure Storage с Azure Logic Apps HD

03.02.2021
Подписаться на канал ►►► http://bit.ly/iwalker2000_subs | Мой LinkedIn ►►► https://www.linkedin.com/in/iwalker2000/ | Пред.серия ►►► https://youtu.be/7J4veWZqtpY | Подготовка к AZ-900 ►►► http://bit.ly/Exam-Az-900 | Открытое собеседование Azure admin ►►► https://youtu.be/eE-6AA3Cm6Q Техническая задача автоматического копирования BLOBов в Azure по мере поступления - которая изначально казалась довольно тривиальной и достаточно просто решалась в частном случае - при «продуктовом» исполнении только доказала Закон Мерфи о том, что «Все не так легко, как кажется» и «Всякая работа требует больше времени, чем вы думаете». Хотя, казалось бы, чего может быть проще, чем использование Azure Logic App с тремя элементами: коннектором к требуемому Azure Storage Account/Container, который следит за появлением новых файлов в контейнере и инициирует работу требуемого процесса операции Azure Blob Storage Get Blob content, которая, получив информацию о вновь созданном файле - по его ID из предыдущей операции считывает содержимое файла операция Create Blob - которая, используя содержимое файла из результата предыдущей операции и имя/путь файла из первой операции - создает новый файл в другом указанном Azure Storage Account. Как говорится - «херяк, херяк - и в продакшен» (например, так поступила Pfizer со своей новой вакциной от ковида) - и оно вроде работает, пока не наступает день Х (или «Х… день») и в этот момент наступает прозрение. Первая багафича такого решения всплывает практически сразу при тестировании - когда кто-то попробует записать файл не в корень контейнера, а предварительно создав там подкаталог и поместив файлы в него. В таком случае базовый коннектор Logic App для Azure Blob Storage не реагирует на новый файл/файлы - он следит только за одним контейнером или каталогом в нем и только запись в корень данного контейнера/каталога инициирует работу подобного Logic App. А файлы пишутся как раз сразу целыми каталогами. НО, даже в ситуации с одним контейнеров возникает новая удивительная ситуация - одновременная загрузка десятков файлов на Azure Blob Storage (особенно из нескольких независимых источников) приводит к запуску сразу нескольких экземпляров нашей Azure Logic App, каждый из которых выполняет одновременно однотипные действия по чтению и записи файлов - и тут срабатывает еще одно ограничение - теперь уже Azure Storage Account. Включается режим Bandwidth throttling, что приводит к ошибкам чтения контента нового файла или его записи в другой Storage Account. Так всплывает вторая багофича, которая запросто «крешит» столь «быстро написанное» Logic App при активной работе. В продолжение разговора о данной багофичи стоит сказать, что обработка ошибок исполнения и кодов возврата операция реализована в Azure Logic Apps весьма и весьма специфически - процесс контролируется двумя разными возможностями - одна из которых - это выбор исполнения следующей команды только при условии, если предыдущая была успешной/неуспешной/отвалилась по таймауту или была пр

Похожие видео

Показать еще