A production-style cloud-native distributed ad bidding system built using microservices, Apache Kafka, Kubernetes, and AWS EKS.
This project simulates how modern real-time bidding (RTB) systems process ad auctions in milliseconds using asynchronous event-driven workflows, distributed messaging, and scalable infrastructure.
Modern ad-tech systems operate under extreme scale and latency constraints.
When a user visits a webpage:
- advertisers compete for ad inventory
- bid requests are generated in real time
- multiple bidders respond asynchronously
- an auction engine selects the winner
- budgets are updated dynamically
- analytics and traces are generated across services
All of this must happen within milliseconds.
This project focuses not only on building backend APIs, but on operating a distributed cloud-native system using modern DevOps and platform engineering practices.
ββββββββββββββββββββββ
β Client/User β
βββββββββββ¬βββββββββββ
β
βΌ
AWS Application Load Balancer
β
βΌ
Kubernetes Ingress
β
βΌ
Campaign Service
β
βΌ
Kafka Topics
β
βΌ
Bidder Service
β
βΌ
Kafka Topics
β
βΌ
Auction Service
β
βΌ
MySQL
------------------------------------------------------------
Observability Stack:
Prometheus β Metrics Collection
Grafana β Visualization & Dashboards
Zipkin β Distributed Tracing
- Java 21
- Spring Boot
- Spring Kafka
- Spring Data JPA
- Maven
- Apache Kafka
- Event-Driven Architecture
- Asynchronous Messaging
- Consumer Groups
- Partition-based Processing
- Idempotent Event Handling
- Docker
- Docker Compose
- Kubernetes
- AWS EKS
- Helm
- AWS Load Balancer Controller
- EBS CSI Driver
- Prometheus
- Grafana
- Zipkin
- Spring Boot Actuator
- Micrometer
- MySQL
- Persistent Volumes (EBS)
| Service | Responsibility |
|---|---|
| Campaign Service | Campaign creation, budget management |
| Bidder Service | Consumes bid requests and generates bids |
| Auction Service | Processes bids and selects auction winner |
| Kafka | Distributed event backbone |
| MySQL | Persistent campaign and auction storage |
Client Request
β
Campaign Service
β
Kafka β BidRequestEvent
β
Bidder Service
β
Kafka β BidResponseEvent
β
Auction Service
β
Kafka β AuctionResultEvent
β
Campaign Service
β
Budget Update
The entire platform is deployed on AWS EKS using Kubernetes.
Infrastructure components include:
- AWS EKS Cluster
- Managed Node Groups
- Kubernetes Deployments & Services
- AWS ALB Ingress
- Persistent Volume Claims
- EBS CSI Driver
- Namespace Isolation
- Kubernetes DNS-based Service Discovery
The platform includes full observability support.
- JVM metrics
- Kubernetes metrics
- Pod resource monitoring
- Service metrics
- Kubernetes dashboards
- JVM dashboards
- Infrastructure visualization
- Live monitoring
- Distributed request tracing
- Cross-service request visibility
- End-to-end event tracing
- Event-Driven Architecture
- Asynchronous Processing
- Distributed Messaging
- Consumer Groups
- Event Ordering
- Idempotency
- Retry Handling
- Fault Isolation
- Decoupled Services
- Stateful vs Stateless Workloads
- Distributed Tracing
- Scalable Event Pipelines
This project heavily focuses on infrastructure and operational engineering:
- Containerized Microservices using Docker
- Kubernetes Workload Orchestration
- AWS Cloud Deployment
- Helm-based Infrastructure Management
- Ingress Routing & Load Balancing
- Persistent Storage Provisioning
- Metrics Collection & Monitoring
- Distributed Observability
- Infrastructure Debugging
- Cloud-Native Networking
- Namespace Isolation
- Public API Exposure through ALB
docker compose up -dkubectl apply -f k8s/mysql
kubectl apply -f k8s/kafkakubectl apply -f k8s/campaign-service
kubectl apply -f k8s/bidder-service
kubectl apply -f k8s/auction-servicehelm install prometheus prometheus-community/kube-prometheus-stack -n observability| Topic | Description |
|---|---|
| bid-requests | Incoming bid requests |
| bid-responses | Bidder responses |
| auction-results | Final auction results |
β
Distributed Event-Driven Communication
β
Kubernetes Orchestration
β
AWS Cloud Deployment
β
Public Ingress Routing
β
Persistent Stateful Workloads
β
Distributed Tracing
β
Metrics Monitoring
β
Grafana Dashboards
β
Kafka-based Async Processing
β
Production-style Infrastructure Setup
- K6 Load Testing
- Horizontal Pod Autoscaling (HPA)
- Redis-based Bid Aggregation
- Dead Letter Queue (DLQ)
- CI/CD Pipelines
- Multi-region Kafka Setup
- API Gateway Integration
- Chaos Testing
- Service Mesh (Istio)
This project fundamentally changed how I think about backend engineering.
Building APIs is only one small part of distributed systems engineering.
The real complexity starts when:
- services become asynchronous
- infrastructure becomes distributed
- failures become non-deterministic
- observability becomes mandatory
- scalability becomes operational
This project provided hands-on experience with:
- distributed systems
- cloud-native infrastructure
- Kubernetes operations
- DevOps workflows
- production-style observability
Built as a deep dive into:
- Distributed Systems
- Event-Driven Architecture
- Cloud-Native Infrastructure
- Kubernetes
- DevOps Engineering
- Scalable Backend Systems