Felix DesyatirikovContact me

← Publications

Process-Level Orchestration as an Alternative to Containerization for Hosting Node.js Applications

F. A. Desyatirikov

Software Engineering, vol. 17, no. 8, pp. 435–445, 2026

Abstract

This paper addresses the problem of hosting a large number of lightweight Node.js applications on a single server in situations where full-scale container orchestration (Kubernetes, Docker Swarm) introduces excessive overhead. A process-level orchestration approach is proposed in which each application runs as a separate operating system process managed by a single application server implemented in Kotlin with Spring Boot. The paper describes the architecture of the Node Orchestrator system, including a REST API for deployment, a reverse-proxy mechanism, automatic restart of crashed processes, and an automated monitoring module: anomaly detection in process metrics based on the Isolation Forest algorithm for preemptive restarts, and adaptive cooldown management based on failure history. The experiments demonstrate that the prototype works correctly and consumes fewer resources than the container-based approach. The results suggest that process-level orchestration combined with automated monitoring components can serve as a promising lightweight alternative under the evaluated conditions for hosting small Express.js services.

Keywords: process orchestration, Node.js, containerization, Docker, Kubernetes, Spring Boot, reverse proxy, PaaS, ALM, anomaly detection, ML, adaptive cooldown. The PDF is the journal version (English and Russian). An extended English manuscript, “ML-Based Preemptive Restarts: Process-Level Orchestration as a Lightweight Alternative to Containers for Node.js”, is available as a separate PDF.

BibTeX

@article{desyatirikov2026orchestration,
  title   = {Process-Level Orchestration as an Alternative to Containerization for Hosting Node.js Applications},
  author  = {Desyatirikov, Felix A.},
  journal = {Programmnaya Ingeneria},
  year    = {2026},
  volume  = {17},
  number  = {8},
  pages   = {435--445},
  doi     = {10.17587/prin.17.435-445}
}