Перейти к содержимому
Looma FloatдокументацияВитрина

Пределы площадки

Числа ниже: действующие пределы площадки. Если площадка их поменяет, об этом скажут looma validate и сборка.

Что Как получить
Сборка Python и Node.js runtime: { kind: python } или { kind: node }, Dockerfile пишет площадка
Любой другой стек свой Dockerfile: runtime: { kind: docker, dockerfile: Dockerfile }
Веб, фоновые процессы, задачи по расписанию раздел processes манифеста
Postgres data.postgres, строка подключения в DATABASE_URL
S3-бакет data.bucket, доступы в AWS_*, имя в LOOMA_BUCKET
Адрес и TLS https://имя.apps.loomafloat.ru, staging: https://имя-staging.apps.loomafloat.ru
Модели сети Looma Float раздел gpu, вызовы токеном LOOMA_APP_TOKEN на LOOMA_API_URL
Секреты looma secrets set ИМЯ=значение, в процессе это переменная окружения
Выход в интернет HTTP и HTTPS через прокси (HTTP_PROXY, HTTPS_PROXY)

Что процесс получает в окружении и какие имена заняты: Переменные окружения.

Что Предел
Архив исходников до 100 МБ сжатым, до 1 ГБ распакованным, до 20 000 файлов
Сборка 1 ядро, 1 ГБ памяти, до 30 минут; образ под amd64
Процесс 0,1–8 ядер (по умолчанию 0,5), 64Mi–32Gi памяти (по умолчанию 512Mi), до 10 экземпляров
Веб-процесс один на сервис, порт 1024–65535
Запрос к сервису только HTTP, тело до 32 МБ; потоковые ответы (SSE, chunked) работают
Выход наружу только порты 80 и 443, только публичные адреса
/dev/shm 64 МБ
Нет Что делать
Видеокарты в процессе модели сети по API: Модели; обучать модели на площадке нельзя
WebSocket (шлюз отвечает 501) поток ответа через SSE, уведомления через SSE или опрос; Streamlit и Jupyter придётся переписать на обычный веб
Протоколов кроме HTTP (gRPC, свой TCP или UDP) только HTTP API
Постоянного диска диск процесса стирается при перезапуске, сне и новом релизе; данные храните в Postgres и бакете: Данные
Redis, MongoDB, MySQL, брокеров, поисковых движков только Postgres и S3, замены: Данные
Внешних баз и сервисов на портах кроме 80 и 443 (Atlas 27017, Redis 6379, SMTP 587) HTTPS-вариант сервиса или замена
Привилегий (Docker внутри, монтирование, privileged) не обойти
Chromium без окна (headless) скорее всего не запустится (песочница gVisor, /dev/shm 64 МБ): проверьте на staging или используйте внешний сервис рендеринга
  • Песочница gVisor. Файловая система процесса создаётся из образа: писать в неё можно, но всё записанное пропадёт при перезапуске. Временные файлы в /tmp допустимы.
  • Сон. Веб с min: 0 засыпает после idle_stop без запросов (по умолчанию 5 минут) и просыпается первым запросом, который ждёт до двух минут. Чтобы отвечать без задержки, поставьте min: 1.
  • Staging запускает только веб, и этот веб засыпает без запросов при любом min. Процессы worker и задачи по расписанию работают только на prod: данные, токен и секреты у staging общие с prod, и фоновые процессы сделали бы ту же работу второй раз.
  • Сеть. Наружу процесс выходит только через прокси из HTTP_PROXY и HTTPS_PROXY, других достижимых адресов нет. Python (requests, httpx, urllib, boto3) берёт прокси сам. Node.js: Перенос: Node.js.
  • Модели. Сервис вызывает только модели из раздела gpu, остальные отвечают 403. Спящая модель поднимается первым вызовом: запрос ждёт до 4 минут, затем приходит 503 с Retry-After: 30. Если имени нет в каталоге моделей, ответ 404.
  • access: clients пускает к сервису только клиентов, вошедших на витрине, и программы с ключом клиента. Гость видит страницу входа, программа получает 401.
  • Каждый запрос клиента приходит с заголовком X-Looma-Client: это псевдоним клиента, свой у каждого сервиса. Почты и имени сервис не получает. Свои учётные записи проекта можно оставить или привязать к этому псевдониму.
  • Вызов модели за клиента идёт с тем же заголовком X-Looma-Client.
  • Событие учёта: POST $LOOMA_API_URL/charge с {"client", "event"}, имя события из раздела events; событие, которого нет в events релиза, получает 400. По желанию добавьте quantity (цена умножается на него) и id (повтор с тем же id не запишется дважды). Цена события (price в events) записывает клиенту расход, автору доход.