Очереди задач (queue) на своём VPS
Отправка писем, обработка изображений, отчёты — всё это нельзя делать в 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.
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 на отдельный сервер, чтобы брокер не конкурировал с воркерами за ресурсы.