The course requires a decent understanding of Java. A dedicated course can be found here.
- Microservices Patterns; Richardson
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
- Study and document the problem of modeling a distributed system (define microservices, APIs, bounded contexts).
- Compare REST, GraphQL, and Protobuf by implementing a service using all three technologies and analyzing their differences.
- Continue developing an existing social network project.
- Study and document the distributed architecture of platforms like Facebook, Uber, or Netflix.
- Create an interactive lab to test the resilience of microservices using observability tools (also test Signoz and OpenObserve).
- Perform performance testing on a distributed system using tools like Istio, Locust, k6, or Gatling.
- Use Microsim to simulate the behavior of a microservices architecture under load and failure scenarios.
- Explore open-source projects listed in Awesome Distributed System Projects.
- Deepen knowledge of automatic deployment tools (e.g., Chef, Puppet, Ansible).
- Port current examples to Python.