A comprehensive framework for benchmarking containerized REST services under the Grafana LGTM observability stack
This project provides a production-ready Docker Compose environment for benchmarking REST service implementations while collecting comprehensive telemetry data including logs, metrics, traces, and CPU profiles.
Benchmark results up to 83,000 RPS on CPU-limited containers (4 vCPUs)
Complete LGTM stack: Loki, Grafana, Tempo, Mimir with Pyroscope profiling
Spring Boot, Quarkus implementations with JVM and native compilation
Compare platform threads, virtual threads, and reactive programming
Deterministic load generation with wrk2 and containerized environment
Complete Docker Compose orchestration for all services and tools
A modern, cloud-native architecture demonstrating industry best practices in observability and performance engineering.
Performance comparison of different frameworks and concurrency models on CPU-limited containers (4 vCPUs)
| Implementation | Mode | RPS (22/01/2026) |
|---|---|---|
| Quarkus JVM | Reactive | 104,000 |
| Quarkus JVM | Virtual | 90,000 |
| Quarkus JVM | Platform | 70,000 |
| Quarkus Native | Virtual | 54,000 |
| Go | N/A | 52,000 |
| Quarkus Native | Reactive | 51,000 |
| Quarkus Native | Platform | 45,000 |
| Spring JVM | Platform | 32,000 |
| Spring JVM | Virtual | 29,000 |
| Spring JVM | Reactive | 22,000 |
| Spring Native | Virtual | 20,000 |
| Spring Native | Platform | 20,000 |
| Spring Native | Reactive | 16,000 |
See Benchmarking Methodology for reproducibility details and interpretation.
Quarkus reactive implementation shows exceptional throughput under fixed-rate load
Java virtual threads provide strong throughput with a simpler concurrency model
Native images offer faster startup; the JVM can deliver higher peak throughput
All results here assume a comparable observability pipeline (OTel + LGTM + profiling)
Set up Docker, start the stack, and run your first benchmark
Understand the end-to-end telemetry pipeline and system design
Reproducible benchmarking: warmup, measurement, and interpretation
Frameworks, observability components, and quality guards
Dashboard + orchestrator: reasoning, job/SSE model, and workflows
How to wire in a new benchmark target (compose + orchestrator + wrk2 + docs)