Батч-обработка (batch processing)

8 августа 2026 · ~12 мин чтения

концепция данные инфраструктура автоматизация

Батч-обработка (batch processing)

Батч-обработка — это способ выполнять работу не по одному заданию сразу по мере поступления, а пачками (batch — «партия», «пакет»): накопить, запустить разом, дождаться конца. Противоположность — обработка в реальном времени, когда каждое событие обрабатывается немедленно.

История

Батч-обработка — не просто «один из подходов». Это то, с чего компьютеры вообще начались. Почти вся история вычислительной техники до середины 1960-х — это история батчей.

Что это такое

Идея простая: у любой операции есть накладные расходы на запуск (setup cost) — установить соединение, авторизоваться, прогреть кэш, раскрутить процесс. Если делать операции по одной, ты платишь эти накладные расходы каждый раз. Если собрать тысячу операций в пачку — платишь один раз, а дальше конвейер работает на полную.

Вторая причина — управляемость. Пачка имеет начало и конец. Её можно спланировать («запускаем в 02:00, когда нагрузки нет»), измерить («930 позиций, идём со скоростью 35 в час, осталось ~26 часов»), остановить и продолжить с середины. Поток событий в реальном времени так не выглядит — он бесконечный.

Третья — цена. Батчу не нужен мгновенный ответ, значит, его можно гонять на дешёвых ресурсах: ночью, на спотовых серверах (spot instances — арендуемые со скидкой мощности, которые могут отобрать в любой момент), в моменты низкого тарифа. Скидка 50% на Batch API у LLM-провайдеров — ровно из этой логики: провайдер сам решает, когда ему удобно обработать твою пачку, и заполняет ею простаивающие мощности.

Ключевые пары для различения:

Аналогии из жизни

Стиральная машина. Никто не стирает носки по одному: копишь корзину, загружаешь разом. Накладные расходы (вода, электричество, твоё время на запуск) делятся на всю партию. Где ломается: если тебе нужна конкретная рубашка через час — батч бесполезен, придётся стирать вручную (переход на «реальное время» ради латентности). И второе: если в партию попала одна красная вещь, брак распространяется на всю пачку — в батчах одна ядовитая запись может испортить весь прогон, если нет обработки ошибок по элементам.

Фура против курьера. Дальнобойщик не выезжает с одной коробкой — он ждёт, пока фура заполнится: цена доставки одной коробки падает в сотни раз. Где ломается: пока фура собирается, первая загруженная коробка лежит и ждёт. Это классический компромисс батча — ради дешевизны каждая отдельная единица работы ждёт дольше. Для донорской почки нужен курьер с мигалкой, а не фура.

Заготовки на ресторанной кухне. Утром повар батчем нарезает овощи и варит бульоны на весь день (mise en place), вечером в час пик только собирает блюда. Где ломается: заготовки протухают. Если данные «скоропортящиеся» (курс валют, остатки на складе), батч, посчитанный утром, к вечеру врёт. Чем длиннее цикл батча, тем более устаревшим будет результат.

Как это работает

Разберём анатомию типичного батч-задания — неважно, ночной ли это биллинг в банке или парсинг каталога на 930 позиций.

1. Формирование очереди. Сначала строится полный список работы: какие записи обрабатываем, в каком порядке. Это отдельный шаг — и важный: список фиксирует объём («930 позиций»), без него невозможно ни считать прогресс, ни продолжить после сбоя.

2. Разбиение на чанки (chunk — «ломоть»). Пачку режут на куски разумного размера: по 100 записей, по 10 МБ, по одной странице API. Чанк — единица повторного запуска: упал чанк — перезапускаем чанк, а не всю пачку.

3. Воркер (worker — процесс-исполнитель) идёт по очереди. Классический цикл:

для каждого элемента из очереди:
    если элемент уже обработан → пропустить      # идемпотентность
    попытаться обработать
    если ошибка → повторить с паузой              # retry + backoff
    если снова ошибка → пометить и идти дальше    # не ронять весь батч
    записать результат и отметку «сделано»        # чекпоинт
    подождать N секунд                            # rate limit

4. Чекпоинты (checkpoint — точка сохранения). После каждого элемента или чанка воркер записывает «докуда дошёл». Ночной батч на 27 часов обязательно переживёт что-нибудь: обрыв сети, перезагрузку, лимит API. Без чекпоинта падение на 900-й позиции из 930 означает начать с нуля. С чекпоинтом — продолжить с 901-й.

5. Идемпотентность (повторяемость без побочного эффекта). Повторная обработка уже сделанного элемента не должна портить данные: не списать деньги дважды, не задублировать строку. Обычно решается проверкой «а не сделано ли уже» перед работой — тогда батч можно безбоязненно перезапускать сколько угодно.

6. Троттлинг (throttling — искусственное замедление). Батч легко превращается в DDoS самого себя: тысяча запросов в секунду к чужому API — и тебя банят. Поэтому в цикл встраивают паузы, а скорость подбирают под лимиты источника. Отсюда парадокс: батч часто специально медленный. Пачка на 930 позиций со скоростью «одна позиция в полторы-две минуты» — это ~26–28 часов, и это нормально.

7. Прогресс и ETA (estimated time of arrival — оценка времени завершения). Раз объём известен заранее, можно считать: сделано 207 из 930, средняя скорость такая-то, осталось ~26,6 часа. ETA считается по скользящей средней скорости и постоянно уточняется. Человеку при этом не нужно смотреть в экран — батч шлёт уведомления о вехах: «каждые 5 позиций», «раз в час», «по завершении».

8. Финализация. В конце — сводка: сколько успешно, сколько с ошибками, сколько пропущено и почему. Список ошибок — это, по сути, готовая очередь для следующего, маленького батча-«доборщика».

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Альтернативы и конкуренты

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера почти сутки в фоне шёл батч-сбор данных из 2ГИС по каталогу примерно из 930 жилых комплексов: очередь позиций, обработка по одной с паузами под лимиты источника, чекпоинты с продолжением после перезапуска и прогресс-уведомления вида «207 из 930, осталось ~26 часов». Практически все пункты «анатомии батча» из этой статьи вчера были видны вживую в логах.

Краткое резюме