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

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

Блог MAATRIX · 2026-07-07

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

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

['Синхронный запрос не должен ждать, пока сгенерируется 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\nsystemctl enable --now redis-server\nredis-cli ping   # PONG
', 'Защитите Redis сразу — открытый наружу Redis без пароля сканеры находят за часы и превращают в майнер или шифруют базу. Он должен слушать только localhost и требовать пароль. Правим /etc/redis/redis.conf:', '
bind 127.0.0.1\nrequirepass ОЧЕНЬ_ДЛИННЫЙ_ПАРОЛЬ
', '
systemctl restart redis-server
']

Вариант Node: BullMQ

['BullMQ — популярная очередь на Redis. Продюсер кладёт задачи, воркер их обрабатывает:', '
npm install bullmq ioredis
', "
// worker.js\nconst { Worker } = require('bullmq');\nconst conn = { host: '127.0.0.1', port: 6379, password: process.env.REDIS_PASS };\nnew Worker('emails', async (job) => {\n  console.log('send to', job.data.to);\n}, { connection: conn });
", 'Демонизируем воркер через systemd:', "
cat > /etc/systemd/system/bull-worker.service <<'EOF'\n[Unit]\nDescription=BullMQ worker\nAfter=redis-server.service\n\n[Service]\nWorkingDirectory=/opt/queueapp\nExecStart=/usr/bin/node worker.js\nRestart=always\nEnvironment=REDIS_PASS=ОЧЕНЬ_ДЛИННЫЙ_ПАРОЛЬ\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsystemctl daemon-reload\nsystemctl enable --now bull-worker
"]

Вариант Python: Celery

['Если бэкенд на Python, берём Celery — зрелую очередь с ретраями, расписаниями (Celery Beat) и роутингом задач по разным очередям. Брокером выступает тот же Redis, отдельный сервис поднимать не нужно:', '
pip install celery redis
', "
# tasks.py\nfrom celery import Celery\napp = Celery('tasks', broker='redis://:PASS@127.0.0.1:6379/0')\n\n@app.task\ndef send_email(to):\n    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 для очередей задач

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

Redis или RabbitMQ?

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

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

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

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

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