Serverless-контейнеры для функций на Node.js, Python и Go
Каждая функция Inquir работает в изолированном Docker-контейнере, а не в V8 edge-изоляте. Это нативные модули, настоящие окружения Node.js 22 / Python 3.12 / Go 1.22 и никаких ограничений изолятов — при сохранении serverless-модели: задеплоил код, получил HTTP-эндпоинт, кластера нет.
Обновлено: 2026-06-28
- Контейнерная изоляция на функцию — зависимости разных функций никогда не конфликтуют
- Нативные модули через слои: sharp, bcrypt, numpy, pandas, cgo — без ограничений изолятов
- Node.js 22, Python 3.12 и Go 1.22 за одним шлюзом и пайплайном
- Никакого кластера — отправили код, получили эндпоинт
Кратко
Суть ответа
Serverless-контейнеры для функций на Node.js, Python и Go. Каждая функция работает в собственном изолированном контейнере. Нативные модули, подключённые через слои, работают потому, что рантайм — настоящее контейнерное окружение, а не прослойка над изолятом. Тяжёлые Python-библиотеки, нативные аддоны Node.js и CGO-пакеты Go запускаются как положено.
Когда подходит
- Функции нужны нативные модули, сабпроцессы или исходящие вызовы к базам и API, которые запрещают edge-изоляты.
- Нужны Node.js, Python и Go за одним шлюзом, без отдельного вендора под каждый язык.
На что обратить внимание
- VM или Kubernetes Deployment под каждую функцию означает, что обновления ОС, политики масштабирования, сертификаты ingress и rolling-деплои — ваши ещё до первой строчки бизнес-логики.
- Managed-сервисы контейнеров вроде ECS или Cloud Run помогают, но в каждом всё равно нужно связывать балансировщики, health-проверки и task definitions — больше церемоний, чем нужно большинству бэкендов.
Нагрузка и где ломается
Почему edge-изолятов не хватает для тяжёлых нагрузок
V8-изоляты быстрые и распределены по всему миру — идеальны для крошечной логики на edge. Но они запрещают нативные аддоны, ограничивают доступ к файловой системе, урезают память и закрывают доступ к приватным сетям. Sharp для ресайза изображений, bcrypt для хеширования паролей, numpy для обработки данных и любая Python-библиотека с C-расширениями требуют настоящего рантайма.
Функции на настоящих контейнерах закрывают этот разрыв: вы по-прежнему деплоите код и получаете HTTP-эндпоинты без кластера, но исполняется он в полноценном рантайме уровня ОС, а не в песочнице JavaScript-движка.
Компромиссы
Почему VM и Kubernetes слишком тяжелы для большинства команд
VM или Kubernetes Deployment под каждую функцию означает, что обновления ОС, политики масштабирования, сертификаты ingress и rolling-деплои — ваши ещё до первой строчки бизнес-логики.
Managed-сервисы контейнеров вроде ECS или Cloud Run помогают, но в каждом всё равно нужно связывать балансировщики, health-проверки и task definitions — больше церемоний, чем нужно большинству бэкендов.
Как помогает Inquir
Изоляция контейнеров без эксплуатации кластера
Каждая функция работает в собственном изолированном контейнере. Нативные модули, подключённые через слои, работают потому, что рантайм — настоящее контейнерное окружение, а не прослойка над изолятом. Тяжёлые Python-библиотеки, нативные аддоны Node.js и CGO-пакеты Go запускаются как положено.
Одна и та же граница контейнера обслуживает HTTP-вызовы через шлюз, шаги пайплайнов, в том числе по расписанию, и фоновые задачи — одна модель деплоя для всех бэкенд-нагрузок.
Что вы получаете
Что дают функции на контейнерах
Нативные модули через слои
Подключите sharp, bcrypt, canvas, grpc, numpy, pandas или любую библиотеку с C-расширениями как слой. Работает корректно, потому что рантайм — настоящий контейнер, а не V8-изолят.
Полная стандартная библиотека
fs, child_process и crypto в Node.js; subprocess, os и ctypes в Python; os/exec и CGO в Go — полный рантайм языка, а не подмножество edge-изолята. Функции остаются в песочнице: сеть по умолчанию выключена, системные пакеты не ставятся.
Тёплые контейнеры для постоянного трафика
Включите тёплые контейнеры, чтобы держать пул прогретых инстансов наготове. Полезно функциям с постоянным трафиком, которым нужна низкая задержка p95.
Несколько языков за одним шлюзом
Смешивайте функции на Node.js, Python и Go за одним API-шлюзом, одной моделью секретов и одной историей выполнения — без отдельной инфраструктуры под каждый язык.
Что дальше
Как работают функции на контейнерах в Inquir
Выбрать рантайм
Node.js 22, Python 3.12 или Go 1.22. Объявите зависимости в package.json, requirements.txt или go.mod — Dockerfile не нужен.
Подключить слои для нативных зависимостей
Добавьте готовые слои платформы или свои для нативных модулей. Платформа монтирует их в контейнер при запуске.
Подключить маршруты шлюза и шаги пайплайна
Привяжите функцию к 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, }; }
Когда подходит
Когда нужны serverless-контейнеры
Когда это уместно
- Функции нужны нативные модули, сабпроцессы или исходящие вызовы к базам и API, которые запрещают edge-изоляты.
- Нужны Node.js, Python и Go за одним шлюзом, без отдельного вендора под каждый язык.
Когда лучше выбрать другое
- Функция крошечная, на чистом JavaScript и должна работать в сотнях edge-точек ради глобальной задержки — для этого лучше V8-изоляты.
Частые вопросы
Частые вопросы
Нужно ли писать Dockerfile?
Нет. Объявите зависимости в package.json, requirements.txt или go.mod — платформа соберёт контейнер из managed-образа для выбранного рантайма. Для нативных модулей подключите слои; свой 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 как любую другую зависимость.