Hostim Docs

Web или Worker — что выбрать

При создании сервиса вы выбираете его тип. Выбор определяется одним вопросом:

Приложение должно принимать входящие запросы из интернета по своему адресу (домену)?

  • Да → Web-сервис
  • Нет, оно только само куда-то ходит или работает в фоне → Worker-сервис

Тип задаётся при создании и определяет, получит ли сервис домен и как проверяется его состояние.

Различия

WebWorker
Входящий 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 не создаёт отдельного счёта — но оба сервиса делят вычислительные ресурсы проекта, поэтому следите, чтобы им хватало памяти в рамках тарифа. Подробнее — «Оплата».

Дальше