nodbox
Разделы документации

Веб-приложения и воркеры

Приложение с адресом и фоновый воркер: чем они отличаются, зачем вебу порт и почему у воркера его нет.

Приложение на платформе бывает двух видов: веб-приложение и воркер. Веб-приложение отвечает на запросы по HTTPS и получает адрес на домене платформы, поэтому ему нужен порт. Воркер - фоновый обработчик без адреса и без порта: он работает постоянно, а не только по запросу. Вид выбирается при создании приложения и потом не меняется.

Как выбрать вид

Веб-приложение нужно, когда к приложению кто-то обращается по сети: браузер, мобильный клиент, чужой сервис. Воркер нужен, когда приложение само берёт работу и ничего не принимает.

Задача Вид
Сайт или API веб-приложение
Бот на вебхуках веб-приложение
Разбор очереди воркер
Рассылки воркер
Обработка данных воркер

Бот на вебхуках - веб-приложение, потому что вебхук - это запрос к твоему адресу. Задач по расписанию платформа не запускает: видов два, третьего нет.

Выбор нельзя исправить правкой. Веб, ставший воркером, потерял бы адрес, по которому его уже зовут, поэтому смена вида - это новое приложение. Заведи нужное и удали лишнее.

Чем виды отличаются

Свойство Веб-приложение Воркер
Принимает запросы да нет
Адрес на домене платформы есть нет
Свой домен можно привязать привязать нельзя
Порт обязателен не задаётся
Протокол, проверка готовности, время на запрос настраиваются не настраиваются
Сон без запросов включён по умолчанию, можно выключить не бывает
Метрики на обзоре запросы, время ответа, память процессор, перезапуски, память
Значение type в API web worker

Размер, переменные и секреты, источник кода, версии и откат у обоих видов общие.

Веб-приложению нужен порт

Порт - номер, на котором процесс приложения принимает запросы. Платформа отправляет на него трафик с адреса приложения, а снаружи отдаёт HTTPS, поэтому порт задаётся при создании и правится в настройках приложения. Как выбрать порт, протокол и проверку готовности, разобрано на странице Порт, протокол и проверка готовности.

Адрес приложение получает сразу: HTTPS на нём работает без настройки. Свой домен привязывается отдельно, подробности - в разделах Адрес и HTTPS и Свой домен.

Без запросов веб-приложение может уснуть и не тарифицироваться, а первый запрос его будит: Сон и пробуждение.

Воркер не принимает запросов

Слушать у воркера некому, поэтому всё, что связано с запросами, ему не положено:

  • адреса на домене платформы нет, и в списке адресов проекта воркера нет
  • свой домен привязать нельзя: запрос на привязку к воркеру отвечает 422
  • порт, протокол, путь проверки готовности и время на запрос не задаются
  • сна нет: будить воркера нечем, ведь запросов к нему не приходит

Воркер не засыпает, поэтому ты платишь за круглосуточную работу. Цена берётся с размера приложения, как у веб-приложения с выключенным сном. Например, Eco 256 стоит 190 ₽ в месяц. Все размеры и цены - в разделе Размеры приложения.

Из настроек масштаба у воркера остаётся один потолок: «Максимум экземпляров». Подробности - на странице Автомасштабирование.

Состояния воркера читаются теми же словами, что у веб-приложения, кроме «Спит»: сна у воркера нет. Слова разобраны в разделе Состояния приложения.

Вид выбирается на странице «Новое приложение»

Вид выбирается в карточке «Что это за приложение». Там два варианта, «Веб-приложение» и «Воркер», по умолчанию выбран веб. Карточка сразу предупреждает, что выбор делается один раз.

От выбора меняется остальная форма:

Карточка Веб-приложение Воркер
Имя «Имя и адрес» и поле «Порт приложения» «Имя», порта нет
Масштаб «Сон и масштаб» «Масштаб», только максимум экземпляров
Как обращаться к приложению есть: протокол, проверка готовности, время на запрос нет
Сколько это будет стоить «Пока работает» и «Пока спит» «Работает всегда»

После создания вид виден в трёх местах:

  • на странице приложения: в заголовке стоит «Веб-приложение» или «Воркер», а на вкладке «Обзор» в карточке «Как настроено» есть строка «Тип». Строки «Порт» у воркера нет
  • в списке приложений: у воркера в окне карточки вместо адреса стоит слово «воркер»
  • в обзоре: у воркера плитки «Процессор» и «Перезапуски» вместо «Запросов за сутки» и «Времени ответа». Ноль перезапусков значит, что процесс не падал

Вида в настройках приложения нет: менять его нечем.

В API вид задаёт поле type

Поле type принимает web или worker. Оно необязательно: без него создаётся веб-приложение. Ответ отдаёт type всегда, у воркера port равен null.

Создание воркера из готового образа:

{
  "name": "mailer",
  "type": "worker",
  "source_type": "image",
  "image_ref": "ghcr.io/liza/mailer:1.4"
}

Это POST /api/v1/applications с правом токена «деплоить» и обязательным заголовком Idempotency-Key. Ответ - 201, первая версия заказывается сразу.

Чем вид определяет запрос, видно по ответам 422:

Что прислано web worker
port обязателен запрещён
protocol, health_check_path, request_timeout_seconds можно запрещены
sleep_enabled, sleep_after_seconds применяются принимаются и не применяются: сон у воркера всегда выключен
type в PATCH /api/v1/applications/{id} запрещён запрещён

Запрещённое поле не пропускается молча: клиент, который прислал воркеру порт, получает 422 с названным полем. Сон - исключение, потому что панель присылает настройки масштаба одним блоком. Привязка домена к воркеру отвечает 422 по полю application_id: «Домен открывает веб-приложение, а у фонового процесса адреса нет».

Что дальше


Страница в markdown, так её читает агент: /docs/apps/types.md