The course requires a decent understanding of Java. A dedicated course can be found here.
- JDK Development Kit 21
- IntelliJ IDEA [Plugins: Envfile]
- Apache Maven
- Docker Desktop
- mlflow
- EvidentlyAI
- Microservices Patterns; Richardson
- Spring Microservices in Action; Carnell, Sánchez
- Microservices with Spring Boot 3 and Spring Cloud; Larsson
Your pull requests are very welcome! To contribute, please refer to this guide. For a more general introduction to GitHub, refer to this page. By contributing to this repository, you agree that your contributions will be licensed under the LICENSE file in the root directory of this source tree.
- Monolithic and distributed architectural styles
- The transition towards microservices architectures
- Introduction to Spring Boot as microservice chassis
- Building a basic layered microservice with Spring Boot
- Packaging a project with Maven
M3 Containerization and orchestration
- Introduction to containerization
- Building docker images (single-layer, multi-layer)
- Container orchestration with docker compose
- Synchronous communications and their limitations (Rest/GraphQL/Protobuf)
- Asynchronous messaging systems (RabbitMQ)
- Spring Cloud Stream and its abstraction over messaging systems
- Service discovery
- Service routing
- Centralized configuration
- Client-side patterns
- Server-side patterns
- Resilience4j and its integration with Spring Boot
- Instrumentation and maintenance costs
- Key observability stacks: Prometheus, ELK, Jaeger/Zipkin, Grafana
- OpenTelemetry
M8 Distributed transaction management
- The SAGA pattern
- The CQRS pattern
- The Conductor orchestration framework
- The DevSecOps model and its benefits in distributed contexts
- Automating code linting, security testing, and deployment with GitHub Actions
- The MLOps model and its benefits in distributed contexts
- Tracking ML experiments with MLFlow
- Observing ML models in production with EvidentlyAI
- Studiare e documentare il problema della modellazione un sistema distribuito (definire microservizi, API, bounded contexts).
- Confrontare REST, GraphQL e Protobuf implementando un servizio con tutte e tre le tecnologie e analizzandone le differenze.
- Continuare a sviluppare progetto già presente di un social network.
- Studiare e documentare l’architettura distribuita di piattaforme come Facebook, Uber o Netflix.
- Creare un laboratorio interattivo per testare la resilienza di microservizi utilizzando strumenti di osservabilità (testare anche signoz e openobserve).
- Eseguire test di performance su un sistema distribuito con strumenti come Istio, Locust, k6 o Gatling.
- Utilizzare Microsim per simulare il comportamento di un’architettura a microservizi in scenari di carico e guasto.
- Esplorare progetti open-source tra quelli elencati in Awesome Distributed System Projects.
- Approfondire tools di deployment automatico (e.g. Chef, Puppet, Ansible)
- Porting degli esempi attuali in Python