System Architecture

Overview

The Observability Benchmarking project is designed as a modular, cloud-native system that demonstrates modern software engineering practices. The architecture follows a layered approach with clear separation of concerns.

Architectural Principles

1. Cloud-Native Design

2. Observability-First Approach

3. Performance Engineering

System Components

Load Generation Layer

wrk2 - HTTP benchmarking tool providing constant-throughput load generation

Service Layer

REST Services - Multiple implementations for comparison

Service Characteristics:

Collection Layer

Grafana Alloy - OpenTelemetry collector and distributor

Pyroscope Java Agent - Profiling agent for JVM services

Storage Layer

Loki - Log aggregation system

Tempo - Distributed tracing backend

Mimir - Metrics storage (Prometheus-compatible)

Pyroscope - Continuous profiling storage

Visualization Layer

Grafana - Unified observability platform

Data Flow

Telemetry Pipeline

Service → OpenTelemetry SDK → OTLP/gRPC → Alloy → {Loki, Tempo, Mimir}
                                                  ↓
                                              Pyroscope
                                                  ↓
                                              Grafana

Profiling Pipeline (Java)

JVM Service → Pyroscope Agent → Pyroscope Server
                     ↓
            OpenTelemetry Context
                     ↓
                  Alloy

eBPF Profiling Pipeline

Container → Alloy (eBPF) → Pyroscope Server

Network Architecture

Service Communication

Observability Communication

Resource Management

CPU Allocation

Memory Allocation

Storage

Configuration Management

Environment Variables

Docker Compose Profiles

Security Considerations

Network Isolation

Credentials

Container Security

Scalability Considerations

Horizontal Scaling

Vertical Scaling

Monitoring the Monitors

Alloy Metrics

Storage Metrics

Future Architecture Enhancements

Planned Improvements

  1. Kubernetes Support: Helm charts and operators
  2. gRPC - HTTP/2 - HTTP/3: Additional protocols
  3. CI/CD Integration: Automated benchmark runs
  4. Multi-region: Distributed load generation
  5. Service Mesh: Istio/Linkerd integration
  6. Chaos Engineering: Fault injection
  7. Cost Analysis: Resource utilization tracking

Extensibility Points

Technology Choices

Why Spring Boot?

Why Quarkus?

Why Grafana LGTM Stack?

Why Docker Compose?

Design Trade-offs

Performance vs. Observability

Simplicity vs. Realism

Local vs. Production

References