Контейнеры для функций и полноценных приложений
Каждая функция Inquir работает в изолированном Docker-контейнере, а не в V8 edge-изоляте, поэтому нативные модули и настоящие окружения Node.js 22, Python 3.12 и Go 1.22 просто работают. Если процесс должен работать постоянно, разверните его как контейнерное приложение из любого Dockerfile или образа — с релизами, откатом, томами, шаблонами Postgres и Redis и приватной сетью. Кластер не нужен ни в одном из случаев.
Обновлено: 2026-10-26
- Контейнерная изоляция на функцию — зависимости разных функций никогда не конфликтуют
- Нативные модули из inquir.yaml: sharp, bcrypt, numpy, pandas, cgo — без ограничений изолятов
- Node.js 22, Python 3.12 и Go 1.22 за одним шлюзом и пайплайном
- Контейнерные приложения для постоянных сервисов: любой Dockerfile или образ, релизы, откат, приватная сеть
Почему edge-изолятов не хватает для тяжёлых нагрузок
V8-изоляты быстрые и распределены по всему миру — идеальны для крошечной логики на edge. Но они запрещают нативные аддоны, ограничивают доступ к файловой системе, урезают память и закрывают доступ к приватным сетям. Sharp для ресайза изображений, bcrypt для хеширования паролей, numpy для обработки данных и любая Python-библиотека с C-расширениями требуют настоящей среды выполнения.
Функции на настоящих контейнерах закрывают этот разрыв: вы по-прежнему разворачиваете код и получаете HTTP-эндпоинты без кластера, но исполняется он в полноценной среде уровня ОС, а не в песочнице JavaScript-движка.
Почему VM и Kubernetes слишком тяжелы для большинства команд
VM или Kubernetes Deployment под каждую функцию означает, что обновления ОС, политики масштабирования, сертификаты ingress и постепенные развёртывания — ваши ещё до первой строчки бизнес-логики.
Управляемые сервисы контейнеров вроде ECS или Cloud Run помогают, но в каждом всё равно нужно связывать балансировщики, проверки работоспособности и task definitions — больше церемоний, чем нужно большинству бэкендов.
Изоляция контейнеров без эксплуатации кластера
Каждая функция работает в собственном изолированном контейнере. Нативные модули, объявленные в inquir.yaml, работают потому, что среда выполнения — настоящее контейнерное окружение, а не прослойка над изолятом. Тяжёлые Python-библиотеки, нативные аддоны Node.js и CGO-пакеты Go запускаются как положено.
Одна и та же граница контейнера обслуживает HTTP-вызовы через шлюз, шаги пайплайнов, в том числе по расписанию, и фоновые задачи.
Сервисы, которые должны работать постоянно, — веб-приложения, API с WebSocket, базы данных — запускаются как контейнерные приложения: соберите Dockerfile на платформе или выпустите релиз из готового образа, закрепите релизы по digest за проверкой работоспособности, откатывайтесь, подключайте тома и обращайтесь к другим приложениям по приватной сети. Подробности — в документации по приложениям.
Что дают контейнеры
Нативные модули из inquir.yaml
Объявите sharp, bcrypt, canvas, grpc, numpy, pandas или любую библиотеку с C-расширениями в build.dependencies в inquir.yaml. Работает корректно, потому что среда выполнения — настоящий контейнер, а не V8-изолят.
Полная стандартная библиотека
fs, child_process и crypto в Node.js; subprocess, os и ctypes в Python; os/exec и CGO в Go — полная среда выполнения языка, а не подмножество edge-изолята. Функции остаются в песочнице: сеть по умолчанию выключена, системные пакеты не ставятся.
Тёплые контейнеры для постоянного трафика
Включите тёплые контейнеры, чтобы держать пул прогретых экземпляров наготове. Полезно функциям с постоянным трафиком, которым нужна низкая задержка p95.
Несколько языков за одним шлюзом
Смешивайте функции на Node.js, Python и Go за одним API-шлюзом, одной моделью секретов и одной историей выполнения — без отдельной инфраструктуры под каждый язык.
Контейнерные приложения для постоянных сервисов
Любой Dockerfile или образ запускается как приложение: релизы, закреплённые по digest, переключение после проверки работоспособности, откат, тома, шаблоны Postgres и Redis и приватный адрес .apps.internal — в том же рабочем пространстве, что и функции.
Как работают функции на контейнерах в Inquir
Выбрать среду выполнения
Node.js 22, Python 3.12 или Go 1.22. Объявите зависимости в package.json, requirements.txt или go.mod — функции Dockerfile не нужен.
Объявить нативные зависимости в inquir.yaml
Языковые пакеты перечислите в build.dependencies, библиотеки ОС — в build.system. Деплой установит их в образ функции.
Подключить маршруты шлюза и шаги пайплайна
Привяжите функцию к HTTP-маршруту или шагу пайплайна. Для регулярных запусков добавьте расписание пайплайну — один и тот же контейнер обрабатывает все вызовы.
Пример нативного модуля: обработка изображений через sharp
Sharp использует нативные C++-биндинги: в контейнерах Inquir работает, в большинстве edge-изолятов падает. Функция получает байты изображения через тело HTTP-запроса или payload пайплайна.
import sharp from 'sharp'; export async function handler(event) { // Body is base64 for binary payloads routed through the gateway const input = Buffer.from(event.body ?? '', 'base64'); const thumbnail = await sharp(input) .resize(320, 240) .jpeg({ quality: 82 }) .toBuffer(); return { statusCode: 200, headers: { 'Content-Type': 'image/jpeg' }, body: thumbnail.toString('base64'), isBase64Encoded: true, }; }
Когда нужны контейнеры
Когда это уместно
- Функции нужны нативные модули, дочерние процессы или исходящие вызовы к базам и API, которые запрещают edge-изоляты.
- Нужны Node.js, Python и Go за одним шлюзом, без отдельного вендора под каждый язык.
- Рядом с функциями нужен постоянно работающий сервис — разверните его как контейнерное приложение из Dockerfile или образа.
Когда лучше выбрать другое
- Функция крошечная, на чистом JavaScript и должна работать в сотнях edge-точек ради глобальной задержки — для этого лучше V8-изоляты.
Частые вопросы
Нужно ли писать Dockerfile?
Для функции — нет: объявите зависимости в package.json, requirements.txt или go.mod, и платформа соберёт контейнер из управляемого базового образа для выбранной среды выполнения; нативные модули и пакеты ОС объявляются в inquir.yaml. Для контейнерного приложения вы приносите Dockerfile или образ, а платформа собирает его и выпускает релиз.
Чем контейнеры отличаются от Cloudflare Workers?
Workers работают в V8-изолятах, оптимизированных под задержку на edge; контейнеры Inquir запускают полноценные образы Node/Python/Go, оптимизированные под нативные модули, тяжёлые зависимости и обычные исходящие вызовы с сервера. Используйте Workers на edge для кеширования и fan-out, а контейнеры Inquir — для логики на origin.
Холодный старт медленнее, чем у edge-изолятов?
Да, холодный старт контейнера медленнее, чем у V8-изолята. Используйте тёплые контейнеры (тёплые пулы), чтобы прогревать функции, которым нужна стабильно низкая задержка. Замерьте p95/p99 на реалистичном трафике, прежде чем соглашаться на модель «только холодный старт».
Можно ли использовать ML-библиотеки Python вроде numpy и pandas?
Да. Контейнеры Python 3.12 поддерживают всю экосистему PyPI, включая numpy, pandas, scikit-learn и другие библиотеки с C-расширениями, — ставьте их через pip как любую другую зависимость.