Salta al contenuto principale
WIP MITDidattici

Spring Boot Microservices Lab

Laboratorio pratico di microservizi con Spring Cloud, Eureka, Gateway, Kafka e Resilience4j

Stato
WIP
Licenza
MIT
Categoria
Didattici
Aggiornato

Stato del progetto

Descrizione

Spring Boot Microservices Lab è il follow-up naturale di Spring Boot From Scratch: parti da una monolith funzionante e la decomponi in microservizi reali, affrontando i problemi che emergono solo quando hai più servizi (network failure, distributed tracing, event consistency, schema evolution). Il laboratorio modella un dominio e-commerce semplificato (catalog-service, order-service, payment-service, notification-service) e copre: service discovery con Eureka (alternativa Consul/Kubernetes service mesh discussa), API gateway con Spring Cloud Gateway + rate limiting + JWT propagation, circuit breaker e bulkhead con Resilience4j, event-driven architecture con Kafka (producer/consumer + Dead Letter Topic + idempotency key), distributed tracing con OpenTelemetry + Jaeger, observability con Prometheus + Grafana dashboards pre-built. Ogni step ha un branch git con codice funzionante, una guida MkDocs con diagrammi C4 (livello 2 e 3) e una sezione 'cosa va male' che simula failure (kill un servizio, network partition, Kafka broker down) per mostrare come Resilience4j e retry policies reagiscono. La filosofia è 'distributed-by-design': non insegniamo a fare microservizi a tutti i costi (la monolith modulare è spesso meglio), ma a costruirli bene quando servono davvero. License MIT, codice riutilizzabile come scaffold per progetti enterprise. Il dominio e-commerce è scelto per essere familiare ma non triviale—abbastanza complesso da mostrare il valore dell'event-driven, abbastanza semplice da non distrarre dai pattern.

Funzionalità chiave

  • Service discovery con Eureka

    Eureka server + 4 microservizi client, health check, self-preservation mode, fallback a hardcoded URL list se Eureka down.

  • API Gateway Spring Cloud

    Routing predicate-based, filter chain custom (JWT validation + rate limiting + request logging), CORS centralizzato.

  • Resilience4j: circuit breaker + bulkhead

    Pattern circuit breaker con fallback method, bulkhead per isolare thread pool, retry con exponential backoff, time limiter.

  • Event-driven con Kafka

    Producer transactional, consumer con manual ack, Dead Letter Topic, idempotency key con Redis dedupe, schema evolution con Avro + Schema Registry.

  • Distributed tracing

    OpenTelemetry SDK + Micrometer Tracing, span context propagation HTTP + Kafka, visualizzazione Jaeger UI.

  • Observability stack pre-built

    Docker compose con Prometheus + Grafana + Loki + Jaeger, dashboard JSON pronte (golden signals: rate, errors, duration, saturation).

  • Chaos engineering exercises

    Script che simulano failure (kill container, network partition con tc netem, Kafka broker down) per testare la resilienza.

  • Saga pattern + outbox

    Implementazione saga pattern per transazioni distribuite ordine→pagamento→notifica, outbox table per eventual consistency con Debezium opzionale.

Tech stack

  • Spring Boot 3.4
  • Spring Cloud 2024
  • Java 21
  • Eureka
  • Spring Cloud Gateway
  • Resilience4j
  • Apache Kafka
  • OpenTelemetry
  • Prometheus
  • Grafana
  • Jaeger
  • Docker Compose

Casi d'uso

  • Sviluppatori mid-senior che vogliono imparare microservizi Spring senza fare cargo-culting cloud-native
  • Team che migrano da monolith a microservizi e vogliono un reference architecture sperimentale
  • Bootcamp avanzati che cercano un lab realistico con failure injection e chaos engineering
  • Architetti che vogliono mostrare al team trade-off concreti (consistency vs availability, service mesh vs gateway)

Roadmap

  1. v0.1.0 Pianificata

    Service discovery + Gateway baseline

    • Setup Eureka server + 4 microservizi base
    • Spring Cloud Gateway con routing predicate
    • JWT propagation across services
    • Docker compose stack base
  2. v0.5.0 Pianificata

    Resilience + Event-driven

    • Resilience4j circuit breaker + bulkhead su 3 endpoint critici
    • Kafka integration con producer/consumer transactional
    • Dead Letter Topic + retry policy
    • Saga pattern su flow ordine-pagamento
  3. v1.0.0 Pianificata

    Observability + Chaos engineering

    • OpenTelemetry tracing end-to-end
    • Grafana dashboards golden signals
    • Script chaos engineering (kill, partition, slow)
    • Documentazione completa + deploy guide K8s opzionale

A chi è rivolto

  • Pro Dev junior-mid
  • Pro Dev senior

Quick Start

Avvia il progetto localmente in pochi comandi.

# Quick start (work-in-progress, repo non ancora pubblicato)
# git clone https://github.com/<tba>/spring-boot-microservices-lab.git
# cd spring-boot-microservices-lab
# docker compose up -d kafka eureka prometheus grafana
# ./mvnw -pl catalog-service spring-boot:run
# ./mvnw -pl order-service spring-boot:run

Contribuisci al progetto

Spring Boot Microservices Lab è open source. Apri una issue, proponi una pull request o lascia una stella su GitHub: ogni contributo, anche piccolo, è benvenuto.

  • ⭐ Lascia una stella se ti è utile
  • 🐛 Segnala bug o proponi feature via issue
  • 🔧 Invia pull request con fix o miglioramenti
  • 📣 Condividi il progetto se lo trovi interessante