ShopVerse
Enterprise-grade event-driven e-commerce platform. 11+ microservices, Kafka streaming, real-time analytics with Flink & ClickHouse, hybrid recommendation engine, and full observability stack.
11+
Microservices
1K+
Events / second
<50ms
P99 API latency
99.9%
Uptime target
Modern e-commerce platforms face a fundamental tension: the same system that processes payments needs to serve product recommendations, handle inventory updates, send notifications, and generate analytics — all under unpredictable load. A monolithic approach doesn't scale well under this kind of multi-domain pressure.
ShopVerse was designed to prove that an event-driven microservices architecture could handle these demands elegantly — where each domain is autonomous, failures are isolated, and the system scales horizontally without coordination overhead.
All inter-service communication flows through Kafka topics. Services publish domain events and subscribe to events they care about — zero direct service-to-service HTTP calls in the async path.
Client Request
│
▼
┌─────────────┐
│ API Gateway │ JWT auth · Rate limiting · Routing
└──────┬──────┘
│ HTTP (sync)
▼
┌──────────────────────────────────────────┐
│ Microservices │
│ User │ Product │ Order │ Inventory │
│ Pay │ Review │ Notif │ Recommend │
└─────────────────────┬────────────────────┘
│ Domain Events (async)
▼
┌─────────────────┐
│ Apache Kafka │ Event bus
└────────┬────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
Consumers Apache Redis
(services) Flink (cache)
│
▼
ClickHouse
(analytics)API Gateway
Single entry point with JWT auth, rate limiting, and request routing.
User Service
Registration, authentication, RBAC, and session management.
Product Service
Catalogue management, search, and category hierarchies.
Order Service
Order lifecycle, state machine, and fulfilment tracking.
Inventory Service
Real-time stock levels, reservations, and restock alerts.
Payment Service
Payment processing, refunds, and transaction history.
Notification Service
Email, SMS, and push notification delivery.
Analytics Service
Real-time event ingestion, aggregation, and dashboard data.
Recommendation Service
Hybrid collaborative filtering using Kafka + Redis.
Review Service
Product ratings, reviews, and moderation workflows.
Config Service
Centralised configuration management via Spring Cloud Config.
Distributed transactions across services
Implemented the Saga pattern using Kafka events. Each service publishes domain events; compensating transactions handle failures without two-phase commit overhead.
Real-time analytics without impacting write performance
Built a separate read path using Kafka → Flink → ClickHouse. Analytics queries hit ClickHouse with millisecond response times, completely isolated from the transactional PostgreSQL databases.
Recommendation engine at scale
Hybrid approach: collaborative filtering via user-item event streams in Kafka, with Redis caching pre-computed recommendations. Cold-start handled with content-based fallback.
Observability across 11 services
Distributed tracing with Zipkin, metrics with Prometheus + Grafana dashboards per service, structured logging with correlation IDs propagated through every Kafka message.
Kafka schema evolution needs to be planned from day one — retrofitting it onto existing topics is painful.
ClickHouse's columnar storage makes aggregation queries 100× faster than PostgreSQL for analytics, but the data modelling is fundamentally different.
The Saga pattern solves distributed transactions but adds significant complexity — only use it where you truly need eventual consistency.
Service discovery and health checks via Spring Cloud are non-negotiable at this scale. Manual configuration doesn't survive operational reality.
Next Case Study
IICSIT Platform