Чем отличаются планировщик Cron и платформа оркестрации Airflow

Ответ

Cron — это стандартный демон-планировщик задач в Unix-подобных системах. Airflow — это полноценная платформа для программного создания, планирования и мониторинга сложных потоков задач (workflows).

Основное различие заключается в масштабе и возможностях.

Характеристика Cron Airflow
Основная задача Выполнение команд по простому расписанию Оркестрация сложных потоков задач (DAGs)
Зависимости Не поддерживает. Задачи независимы. Ключевая функция. Задачи могут зависеть друг от друга.
Мониторинг Отсутствует (только логирование в системные файлы) Продвинутый Web UI с визуализацией, логами, статистикой.
Масштабируемость Ограничена одной машиной Горизонтально масштабируемая архитектура (workers, scheduler).
Повторный запуск Только вручную Автоматический повторный запуск упавших задач.
Конфигурация Простой текстовый файл (crontab) Задачи описываются как код на Python (DAGs).

Когда что использовать?

  • Cron идеально подходит для простых, изолированных и повторяющихся задач на одном сервере. Например, запуск скрипта для резервного копирования раз в сутки.

    # Запускать скрипт backup.sh каждый день в 03:00
    0 3 * * * /home/user/scripts/backup.sh
  • Airflow необходим для построения сложных ETL/ELT-пайплайнов, где задачи зависят друг от друга, требуют мониторинга, логирования и могут выполняться распределенно.

    # Пример DAG в Airflow
    from airflow.operators.bash import BashOperator
    
    with DAG(dag_id='data_pipeline', schedule_interval='@daily') as dag:
        extract_data = BashOperator(task_id='extract', bash_command='... ')
        transform_data = BashOperator(task_id='transform', bash_command='...')
        load_data = BashOperator(task_id='load', bash_command='...')
    
        # Определение зависимостей
        extract_data >> transform_data >> load_data

Вывод: Cron — это таймер, Airflow — это дирижёр для оркестра.

Ответ 18+ 🔞

Давай разберёмся, что у нас тут за зверь такой — Крон и Эйрфлоу. Представь, что ты живёшь в коммуналке.

Крон — это твой сосед-старичок, который как часы. Каждый день в 6 утра он бухает чайник, в 7 выходит на балкон и материт голубей, а в 23:00 тушит свет. Он делает своё дело чётко, по расписанию, и ему похуй на всё остальное. Никаких сложностей: проснулся — налил кипятку — обосрал птиц — спать. Всё.

# Ровно в 5 утра каждый день пнуть кота
0 5 * * * /home/petrovich/kick_the_cat.sh

А теперь Эйрфлоу — это, блядь, целый штаб управления полётами. Ты не просто чайник кипятишь. Ты строишь целую цепочку: сначала надо воду из колодца достать, потом дров нарубить, потом растопить печь, и только потом, если первые три задачи не сдохли, можно чайник ставить. И если на этапе "наруби дров" топор сломался — система это увидит, запишет в лог, отправит уведомление "Петрович, топор накрылся" и попробует запустить задачу "починить топор" перед тем, как снова пытаться дрова колоть.

# Пример DAG в Airflow
from airflow.operators.bash import BashOperator

with DAG(dag_id='утренний_ад', schedule_interval='@daily') as dag:
    достать_воду = BashOperator(task_id='достать_воду', bash_command='...')
    нарубить_дров = BashOperator(task_id='нарубить_дров', bash_command='...')
    растопить_печь = BashOperator(task_id='растопить_печь', bash_command='...')
    вскипятить_чай = BashOperator(task_id='вскипятить_чай', bash_command='...')

    # Вот эта магия — что за чем идёт
    достать_воду >> нарубить_дров >> растопить_печь >> вскипятить_чай

Короче, ёпта, табличка для наглядности:

Критерий Cron (Старичок-часовщик) Airflow (Штаб управления)
Суть Выполнил команду — пошёл нахуй. Создай, запланируй, следи, перезапускай, отчитывайся.
Зависимости задач Не, не слышал. Каждая задача сама по себе, как бомж в подъезде. Основа основ. Задачи ждут друг друга, как дураки автобуса.
Глянуть, что творится Полез в логи, ебать, глаза сломаешь. Красивый веб-интерфейс, где всё видно: что летает, что ползает, что сдохло.
Масштаб Одна машина. Всё на ней и умрёт. Армия воркеров, отдельный шедулер — можно раскидать задачи по всему кластеру.
Упала задача? Упала и хуй с ней. Узнаешь, когда всё уже горит. Сам увидит, попробует перезапустить, напишет письмо твоему начальнику.
Как настроить Открыл crontab, написал строчку. Пишешь целую программу на Python, описываешь весь пайплайн.

Так когда что брать?

  • Берёшь Cron, когда тебе нужно что-то простое и тупое делать раз в N времени. Скачать файлик, почистить логи, отправить напоминалку. "Разбуди меня в 7 утра" — вот это его уровень.
  • Берёшь Airflow, когда у тебя не задача, а целое приключение. Сначала вытащи данные из десяти разных источников, потом склей их, потом преобразуй, потом засунь в базу, потом пошли отчёт, а если на третьем шаге ошибка — откати всё назад и начни сначала. Это уже не "разбуди", а "разбуди, приготовь завтрак, одень и проводи до метро".

Вывод, блядь, простой: Cron — это таймер на кухонной плите. Airflow — это автоматизированный конвейер на заводе, где роботы друг другу передают детали. Если тебе яйцо всмятку сварить — хватит и таймера. Если тебе нужно собрать космический корабль — без конвейера с контролем качества ты просто обосрёшься на втором же винтике.