Impress Application Server

Сервер приложений Metarhia — управляет инфраструктурой (HTTP, sandbox, sessions, threads, hot reload), а разработчик пишет только доменную логику.

Что это

Аналог Tomcat/JBoss для Java, но для Node.js. До Impress в Node такого почти не было — все писали «голый процесс».

Impress поднимается из конфига: HTTP-сервер, балансер тредов, sandbox per app, sessions, статика, логер. Программист не пишет require для инфраструктуры — сразу бизнес-логика.

Структура приложения

applications/
  myapp/
    api/        # GSTP/Metacom RPC endpoints
    www/        # статические HTTP-ресурсы
    domain/     # бизнес-логика
    lib/        # утилиты
    cert/       # сертификаты
    config/     # конфигурация

Multi-app в одном сервере

  • Один Impress-процесс хостит несколько приложений.
  • Каждое приложение — изолированный sandbox.
  • applications/foo/api/v1/users/get.js — RPC-метод foo.users.get.

Sandbox per app

  • На каждое приложение свой V8 context (vm module).
  • Утечка памяти лечится пересозданием sandbox без рестарта процесса.
  • sandbox-fs запирает приложение в его каталоге — не выйдешь выше.
  • Библиотеки прописываются в sandbox-конфиге; даже встроенные модули Node — только разрешённые.

Контейнеризация

«Impress сам делает контейнера. Внутри одного процесса может быть много приложений и внутри одного приложения много процессов — много ко многим. С Docker так не сделаешь.»

  • Один процесс — N приложений.
  • Один app — M процессов (worker threads).

Что Impress берёт на себя

  • HTTP/HTTPS-сервер
  • WebSocket (через Metacom)
  • Routing → автогенерация из ФС
  • Sessions и authentication
  • Sandbox-изоляция
  • Hot reload (подгрузка изменённых модулей в sandbox)
  • Многопоточность (балансер + воркеры)
  • Логирование (metalog)
  • Валидация (metaschema)
  • Sandbox-FS — безопасная файловая система

🎓 Источники

См. также