Как правильно создать безопасную инфраструктуру для сложных операций?
Вопрос больше теоретический - ищу полезные материалы.
Хочу найти хороший пример (любой стек технологий) когда создаются сервисы с большими сложными асинхронными задачами. Чисто гипотетический пример - есть сервис который берет проект из гит и что-то с ним делает и скажем заливает куда-то. Процесс достаточно долгий, сложный. На сервисе регаются пользователи и могут создавать такие процессы по типу крона. На примере Django + Celery (RQ) создать очередь куда будут складываться и выполняться задачи запланированные от пользователей тут пока понятно. А ДАЛЬШЕ? хочется чтобы задача стартавала в каком-то изолированном окружении выполнялась и окружение умирало. Чтобы задачи не могла как-то навредить друг другу. Вот как правильно замутить это окружение для асинхронной задачи которое будет подниматься из Celery (или того же HangFire из .NET для примера). К примеру я подобное мутил на Heroku и просто поднимал отдельный dyno с bash и запускал там скрипт в который передавал параметры для базы. скрипт отрабатывал и dyno умирал. Красиво, но Heroku. На Google cloud можно наверное подобное замутить на Cloud Functions, но это Google Platform. А какие решения для обычного VPS на Linux? Docker? Может еще какие-нибудь элегантные решения чтобы поднимать такие микро изолированные окружения под долгие асинхронные задачи? Чтобы не заморачиваться (или минимально заморачиваться) выделение/контролем ресурсов, контролировать кол-во одновременно работающих скриптов/окружений.
Буду признателен на любые полезные ссылки на статьи или видосы.
Ваша задача что-то сильно на решения Continious Integration смахивает, и не сильно похожа на "сложную операцию". Решается просто написанием правильных скриптов. Может быть Ansible подойдет как вариант.
Я не про сам дейплой. Это всего лишь пример асинхронной задачи. Задача может быть и расчет чисел фибаначи. Смысл вопроса как сделать запуск скриптов в изолированном окружении независимом от самого сервера приложения.
Но пусть будет Ansible. У меня есть сервис где могут регаться пользователя. И зарегалось 100 пользователей. У каждого есть свой Ansible скрипт и он хочет его запускать раз в сутки в 12.00. То есть мы должны запустить одновременно 100 Ansible скриптов. И так что если один свалится чтобы не упал весь сервер или другие скрипты.
А если вариант через RabbitMq, или beanstalkd, куда основной сервис шлет, что нужно сделать и уже где-то крутятся воркеры, слушающие очередь и что-то делают.
*Чуть возможно сложнее, не знаю структуры кода ( зависимость от базы или ...)
Лариса .•º, да, это вариант, я тоже про него думал. Но мне не нравится такой подход потому что во первых количество воркеров значение постоянное и они должны постоянно работать если нет нагрузки. если не мутить какой-то механизм автоматического запуска/остановки воркеров и их маштабирования. Хотя вот пока писал про автозапуск/маштабирование вспомнил про Kubernates. Возможно это задача как раз для него. Возможно есть вариант поднять кластер исключительно под воркеры и настроить кластер чтобы он автоматически запускал воркеры в зависимости от нагрузки. Но выглядит как-то сложновато в контроле и отладке. Хотелось бы просто какой-то промежуточный вариант типа "эй Kubernates (или что-то там) запусти мне этот скрипт" и все. Инстанс поднялся отработал умер.
Лариса .•º, не сталкивался с Consul. Надо будет изучить.
Я пока все больше склоняюсь попробовать замутить это все на уровне Docker API который будет дергаться из основного приложения и будет запускать контейнеры с запакованной логикой. Сегодня полистал Docker API и мне понравилось его возможности. Попробую замутить что-то типа своего оркестратора.