Inquir Compute · контейнеры

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 — больше церемоний, чем нужно большинству бэкендов.

Изоляция контейнеров без эксплуатации кластера

Каждая функция работает в собственном изолированном контейнере. Нативные модули, подключённые через слои, работают потому, что рантайм — настоящее контейнерное окружение, а не прослойка над изолятом. Тяжёлые 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

1

Выбрать рантайм

Node.js 22, Python 3.12 или Go 1.22. Объявите зависимости в package.json, requirements.txt или go.mod — Dockerfile не нужен.

2

Подключить слои для нативных зависимостей

Добавьте готовые слои платформы или свои для нативных модулей. Платформа монтирует их в контейнер при запуске.

3

Подключить маршруты шлюза и шаги пайплайна

Привяжите функцию к HTTP-маршруту или шагу пайплайна. Для регулярных запусков добавьте расписание пайплайну — один и тот же контейнер обрабатывает все вызовы.

Пример нативного модуля: обработка изображений через sharp

Sharp использует нативные C++-биндинги: в контейнерах Inquir работает, в большинстве edge-изолятов падает. Функция получает байты изображения через тело HTTP-запроса или payload пайплайна.

images/thumbnail.mjs
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 как любую другую зависимость.