Skip to content
Низкоуровневые системы 5 мин чтения

Принципы daemonless рантайма: почему Cardinal не требует постоянного фонового сервиса

Почему архитектура без демона эффективнее для контейнерных нагрузок: прямое использование clone(2), cgroups v2, OverlayFS и освобождение системных ресурсов сразу после старта контейнера.

#Linux #Go #Containers #Namespaces #OverlayFS #cgroups v2
Ключевые выводы архитектуры
  • ▸Традиционные рантаймы тратят память хоста на непрерывно работающие root-демоны (dockerd / containerd).
  • ▸Cardinal настраивает изоляцию (PID, Mount, Net, UTS, IPC), монтирует OverlayFS, применяет лимиты cgroups v2 и завершает управляющий процесс.
  • ▸Изолированные контейнеры продолжают работать под управлением стандартного ядра Linux (init / systemd).
  • ▸Динамическое добавление портов (`cardinal port add/rm`) работает через манипуляцию iptables/nftables без перезапуска контейнера.

1. Проблема постоянного демона в традиционных рантаймах

В классической архитектуре Docker или containerd на сервере непрерывно запущен фоновый сервис (daemon), потребляющий от 50 до 150 МБ оперативной памяти даже в состоянии полного простоя (0 запущенных контейнеров). Более того, падение демона создаёт риск разрыва соединений или затрудняет восстановление состояния процессов. Cardinal изначально спроектирован по daemonless-философии: статический бинарник (~5 МБ) вызывается только тогда, когда нужно запустить, остановить или проинспектировать контейнер.

2. Системные примитивы ядра Linux: clone(2) и cgroups v2

Контейнер в Linux — это не виртуальная машина, а обычный процесс с ограниченным пространством имён. Cardinal использует системный вызов clone(2) с флагами CLONE_NEWPID, CLONE_NEWNS, CLONE_NEWNET, CLONE_NEWUTS и CLONE_NEWIPC. Ограничение потребления ресурсов (CPU shares, memory.max, io.weight) настраивается напрямую через контроллеры современной файловой системы cgroups v2 (`/sys/fs/cgroup/cardinal/<id>`).

Пример ограничения ресурсов в Cardinal CLI
bash
# Запуск PostgreSQL с лимитом 1 ГБ RAM и 2 ядрами CPU
cardinal run -d --name pg-main \
  --memory 1024m \
  --cpus 2 \
  -p 5432:5432 \
  postgres:16

# Проверка реального потребления ресурсов через cgroups v2:
cardinal stats pg-main

3. Динамический проброс портов без перезапуска

Одной из уникальных возможностей Cardinal является динамическое добавление и удаление портов на лету без необходимости пересоздавать контейнер. Команда `cardinal port add <container> <host_port>:<container_port>` напрямую вносит правила NAT в сетевой стек Linux, позволяя подключать новые сервисы в работающий контейнер мгновенно.

Сайт animesao.work.gd · MIT

MIT LicensePermissive

Исходный код сайта animesao.work.gd (Nuxt 4, Vue 3, Tailwind CSS 4), архитектурные схемы и инженерные заметки полностью открыты под лицензией MIT. Разрешено коммерческое и частное использование, модификация и адаптация при сохранении уведомления об авторстве.

Разрешено
  • ✓Коммерческое использование
  • ✓Модификация кода и стилей
  • ✓Распространение
  • ✓Частное использование
Ограничения
  • ✕Ограничение ответственности
  • ✕Отсутствие гарантий
Условия
  • ℹСохранение уведомления об авторских правах (c) 2026 animesao
Официальный текст лицензииSPDX: MIT
MIT License

Copyright (c) 2026 animesao

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.