MAATRIX / Блог / Очереди задач (queue) на своём VPS

Очереди задач (queue) на своём VPS

Очереди задач на VPS: Redis, BullMQ и Celery
Блог MAATRIX · 2026-07-07

Отправка писем, обработка изображений, отчёты — всё это нельзя делать в HTTP-запросе. Очередь задач переносит тяжёлую работу в фоновые воркеры. Поднимем Redis-брокер и воркеры на VPS.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Зачем нужна очередь задач

Синхронный запрос не должен ждать, пока сгенерируется PDF или отправится сотня писем. Очередь принимает задачу мгновенно, а воркеры разбирают её в фоне. Это даёт быстрый отклик API, ретраи при сбоях и горизонтальное масштабирование обработки.

Брокер Redis и воркеры чувствительны к скорости диска и CPU. NVMe + AMD EPYC у MAATRIX держат низкую задержку постановки задач, а root-доступ позволяет запустить и брокер, и пул воркеров на одном сервере.

Serverless-очереди в облаках берут плату за каждую задачу и ограничивают время выполнения — тяжёлая обработка видео или генерация большого отчёта туда не влезает. На своём VPS вы задаёте любые таймауты, число параллельных воркеров и объём памяти на задачу. Фиксированная цена сервера от $8/мес заменяет непредсказуемый поштучный счёт, а для аудитории РФ добавляется оплата картой РФ, СБП или криптой.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для очередей задач

Ставим Redis как брокер

apt update && apt install -y redis-server
systemctl enable --now redis-server
redis-cli ping   # PONG

Защитите Redis сразу — открытый наружу Redis без пароля сканеры находят за часы и превращают в майнер или шифруют базу. Он должен слушать только localhost и требовать пароль. Правим /etc/redis/redis.conf:

bind 127.0.0.1
requirepass ОЧЕНЬ_ДЛИННЫЙ_ПАРОЛЬ
systemctl restart redis-server

Вариант Node: BullMQ

BullMQ — популярная очередь на Redis. Продюсер кладёт задачи, воркер их обрабатывает:

npm install bullmq ioredis
// worker.js
const { Worker } = require('bullmq');
const conn = { host: '127.0.0.1', port: 6379, password: process.env.REDIS_PASS };
new Worker('emails', async (job) => {
  console.log('send to', job.data.to);
}, { connection: conn });

Демонизируем воркер через systemd:

cat > /etc/systemd/system/bull-worker.service <<'EOF'
[Unit]
Description=BullMQ worker
After=redis-server.service

[Service]
WorkingDirectory=/opt/queueapp
ExecStart=/usr/bin/node worker.js
Restart=always
Environment=REDIS_PASS=ОЧЕНЬ_ДЛИННЫЙ_ПАРОЛЬ

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now bull-worker

Вариант Python: Celery

Если бэкенд на Python, берём Celery — зрелую очередь с ретраями, расписаниями (Celery Beat) и роутингом задач по разным очередям. Брокером выступает тот же Redis, отдельный сервис поднимать не нужно:

pip install celery redis
# tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://:PASS@127.0.0.1:6379/0')

@app.task
def send_email(to):
    print('send to', to)

Запускаем пул воркеров (число процессов = ядрам):

celery -A tasks worker --loglevel=info --concurrency=4

В systemd задайте ExecStart на эту команду, чтобы пул поднимался автоматически. Продюсер (ваше веб-приложение) кладёт задачу вызовом send_email.delay('user@example.com') и мгновенно возвращает ответ клиенту, а тяжёлую работу подхватывает воркер. Так HTTP-запрос не блокируется и API остаётся отзывчивым даже под нагрузкой.

Мониторинг и частые ошибки

Смотрите глубину очереди и состояние воркеров. Для Celery есть Flower, для BullMQ — Bull Board. Быстрая проверка через redis-cli:

redis-cli -a ОЧЕНЬ_ДЛИННЫЙ_ПАРОЛЬ llen bull:emails:wait
  • Задачи копятся — мало воркеров или медленный обработчик; поднимите concurrency или добавьте ядра.
  • NOAUTH Authentication required — воркер не передаёт пароль Redis.
  • Потеря задач при рестарте — включите persistence (AOF) в Redis: appendonly yes.

Обязательно настройте ретраи и dead-letter для задач, которые падают: без этого потерянная задача исчезает молча. В BullMQ это опции attempts и backoff, в Celery — max_retries и retry_backoff. Отдельный VPS от MAATRIX под Redis и воркеры разгружает основное приложение, а ежедневные бэкапы сохраняют состояние очереди и данные.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для очередей задач

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Redis или RabbitMQ?

Redis проще и быстрее для большинства задач; RabbitMQ богаче на маршрутизацию и гарантии доставки для сложных сценариев.

Сколько воркеров запускать?

Начните с числа воркеров равного числу ядер CPU, затем настраивайте под реальную нагрузку и профиль задач.

Можно ли брокер и воркеры на одном VPS?

Да, для старта это нормально. При росте выносите Redis на отдельный сервер, чтобы брокер не конкурировал с воркерами за ресурсы.