Web или Worker — что выбрать
При создании сервиса вы выбираете его тип. Выбор определяется одним вопросом:
Приложение должно принимать входящие запросы из интернета по своему адресу (домену)?
- Да → Web-сервис
- Нет, оно только само куда-то ходит или работает в фоне → Worker-сервис
Тип задаётся при создании и определяет, получит ли сервис домен и как проверяется его состояние.
Различия
| Web | Worker | |
|---|---|---|
| Входящий HTTP | принимает | нет |
| Домен и HTTPS | да, автоматически | нет |
| Слушает порт | обязан (см. подготовку кода) | нет |
| Health-check | опционален; использует HTTP-порт приложения | опционален; требует отдельного HTTP-порта |
| Типичные примеры | сайт, HTTP API, веб-приложение | Telegram-бот на long-polling, обработчик очереди |
Когда Web
Выбирайте Web, если приложение обслуживает входящие HTTP-запросы: сайт, REST/GraphQL API, веб-приложение. Такой сервис получает поддомен с TLS-сертификатом (доступен по HTTPS), к нему можно подключить собственный домен. Обязательное условие — приложение слушает порт из переменной PORT на адресе 0.0.0.0.
Когда Worker
Выбирайте Worker, если приложение не принимает входящий HTTP, а работает в фоне и само инициирует действия:
- бот на long-polling (сам опрашивает сервер мессенджера);
- потребитель очереди или брокера сообщений (RabbitMQ, Kafka, Redis);
- фоновый обработчик, планировщик внутри процесса, синхронизация данных.
Worker не получает домен и не слушает порт. Ему по-прежнему доступны переменные окружения и подключение к базе данных внутри проекта.
Частый случай: Telegram-бот
Бота можно построить двумя способами, и от этого зависит тип сервиса:
- Long-polling (бот сам опрашивает Telegram —
run_polling(),bot.launch()) — входящий HTTP не нужен. Это Worker. - Webhook (Telegram сам присылает обновления на ваш HTTPS-адрес) — нужен публичный домен для приёма запросов. Это Web.
Для большинства ботов проще и надёжнее long-polling, то есть Worker.
Нужны и то, и другое
Один сервис — это один тип. Если системе нужен и HTTP API, и фоновый обработчик, создайте два сервиса в одном проекте. Они делят частную сеть проекта и обращаются друг к другу по внутренним адресам — см. «Связь сервисов».
Health-check
Платформа может периодически проверять «здоровье» контейнера и перезапускать его при сбое. Проверка выключена по умолчанию и необязательна для обоих типов — включается в настройках сервиса. Разница только в порте:
- Web: при включении проверка использует HTTP-порт приложения — достаточно указать путь (например,
/health). - Worker: так как у Worker нет HTTP-порта, включить проверку можно только если процесс сам поднимет небольшой HTTP-эндпоинт, и тогда его порт указывается явно.
Влияет ли тип на оплату
Нет. Оплата берётся за проект по его тарифу, а не за отдельные сервисы. Добавление Worker рядом с Web не создаёт отдельного счёта — но оба сервиса делят вычислительные ресурсы проекта, поэтому следите, чтобы им хватало памяти в рамках тарифа. Подробнее — «Оплата».