Why this series?
A while back, I started building a microservices demo project. Not for a client, not for work — just to learn by doing.
The idea was simple: take an e-commerce use case, keep the business logic simple, and focus entirely on the technical side. What patterns to use, how to wire services together, how to deploy them, how to make them resilient.
Over time the project grew. More services, more patterns, more infrastructure. At some point I started documenting everything in a GitBook guide, and the repo crossed 80 stars with several forks.
That was my sign to go further, and to start sharing the concepts more publicly, in a format that’s easier to follow than a docs page.
Microservices the Cloud-Native Way is a series of 9 articles walking through the key concepts, one topic at a time.
What’s the project?

It’s an e-commerce platform built with Spring Boot 3 and Spring Cloud. Nothing fancy on the business side; customers place orders, payments get processed, and notifications get sent. That’s it.
What matters here is the architecture, not the features — and what happens under the hood. Five core services, each owning its own database:
- Customer — registration and management
- Product — catalog and inventory
- Order — order lifecycle, with CQRS
- Payment — payment processing
- Notification — email notifications via AWS SES
They communicate either synchronously over REST using OpenFeign, or asynchronously through RabbitMQ events. Everything sits behind a Spring Cloud Gateway.
What will we cover?
- Part 02 — Service Discovery & Inter-Service Communication
- Part 03 — API Gateway: Routing, Load Balancing & Resiliency
- Part 04 — Security: OAuth2 with Keycloak & API Key Manager
- Part 05 — From Code to Cluster: Docker, Kubernetes & Skaffold
- Part 06 — Observability: Distributed Tracing & Metrics
- Part 07 — CQRS: Separating Reads from Writes
- Part 08 — Cloud Deployment & Infrastructure as Code
- Part 09 — Zero-Downtime Deployment Strategies
The tech stack
| Layer | Technologies |
|---|---|
| Language & Framework | Java 17, Spring Boot 3, Spring Cloud 2023 |
| Patterns | Eureka, Gateway, OpenFeign, Resilience4j, CQRS |
| Messaging | RabbitMQ |
| Security | Keycloak (OAuth2/OIDC), API Key Manager |
| Observability | OpenTelemetry, Prometheus, Grafana |
| Containers | Docker, Jib, Kubernetes, Skaffold |
| Cloud & IaC | AWS EKS, Terraform |
One thing before we start
This is not a “build a todo app with microservices” series. Microservices add complexity. Multiple databases to maintain, network calls that can fail, distributed tracing to set up, deployments that are harder than a monolith. None of that is hidden here.
The goal is to show how these challenges are handled in practice. If you already know Spring Boot and want to understand what production microservices actually look like, this series is for you.
Resources
- GitHub: github.com/miliariadnane/demo-microservices
- Full guide: miliariadnane.gitbook.io/demo-microservices
Next — Part 02: Service Discovery & Inter-Service Communication. How do services find each other when their addresses change dynamically?