I am currently working on a critical manufacturing customization project using an IoT Automation Manager designed for edge devices. While the architecture is functional for small-scale deployments, I am encountering significant scaling issues regarding memory consumption.
The Setup
My current test environment consists of:
• 1 Automation Manager (Orchestration layer)
• 50 Controllers
• 50 Drivers
The Problem
This architecture results in approximately 110 individual Node.js processes. Currently, this setup consumes ~20 GB of RAM, which is prohibitively expensive for standard edge gateway hardware.
While the manager is marketed as “lightweight,” the overhead of the Node.js runtime for each individual node process (Manager + Controller + Driver) is causing a massive memory footprint that doesn’t scale linearly with the hardware typically available at the edge.
Questions for the Community:
- *Process Consolidation: *Are there proven patterns for consolidation? Specifically, is it feasible to run multiple Drivers/Controllers within a single worker thread or process to reduce the V8 engine overhead?
- Resource Management: For those using Node-based edge managers, how do you handle the baseline memory footprint per resource? Are there specific flags (e.g., --max-old-space-size or --gc-interval) you’ve found effective for dense deployments?
3.* Alternative Architectures: *Given the requirement for 50+ resources, should I be looking into a more modular “Plugin” architecture rather than a “Process-per-Resource” model? - *Shared Runtimes: *Are there ways to share the Node runtime across these 110 processes to avoid 110 separate heaps?