Tail latency, throughput, and memory overhead of monolithic and microservices architectures in resource-constrained docker deployments - Yoga Ari Tofan (JUTI: Jurnal Ilmiah Teknologi Informasi, 2026)
Software architecture selection directly impacts system performance and resource efficiency. This motivates controlled comparisons to make pragmatic deployment decisions. This study compares the implementation of the same backend system, Node.js/Express and MariaDB, in a monolithic and microservices architecture with the same Docker resource allocation, 2 CPUs and 512 MB RAM per architecture, except database containers. The load test was carried out with Apache JMeter 5.6.3 with three levels of concurrency (50, 200, 500 users). Each scenario was performed 20 times within 60 s. The main metrics were response time P90, P95, throughput, error rate, CPU/RAM utilization. The monolithic implementation performed better than the microservices at all load levels. The monolith reached P90 131.35 ms and 429.89 req/s versus microservices P90 171.38 ms and 332.38 req/s at 50 users, and P90 1217.60 ms and 438.25 req/s versus 1534.50 ms and 343.24 req/s at 500 users. Statistical analysis All differences were statistically significant (Mann-Whitney U, p < 0.0001, |δ| = 1.000). For both architectures, the throughput plateaued at load levels. The most operationally significant difference in resource usage was in memory overhead at 500 users, the monolith used 95.31 ± 1.99 MiB compared to 319.43 MiB aggregate for microservices (3.35x higher). CPU utilization was broadly comparable across architectures. The results presented here are specific to this experimental configuration, i.e. a single-machine Docker deployment, two-service decomposition, and synchronous HTTP/REST communication, and should not be generalized to monolithic and microservices architectures in general.