All Case Studies
Case Study
● ActiveEnterprise Platform · 2024

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

Context

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.

Architecture

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.

Challenges
01

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.

02

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.

03

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.

04

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.

Tech Stack
Backend
Spring BootSpring CloudJava 17REST APIsJWT / RBAC
Messaging
Apache KafkaApache FlinkEvent-Driven Architecture
Data
ClickHouseRedisPostgreSQLMySQL
Frontend
React 19Next.jsTailwind CSSTypeScript
DevOps
DockerDocker ComposePrometheusGrafanaZipkin
Key Learnings
01

Kafka schema evolution needs to be planned from day one — retrofitting it onto existing topics is painful.

02

ClickHouse's columnar storage makes aggregation queries 100× faster than PostgreSQL for analytics, but the data modelling is fundamentally different.

03

The Saga pattern solves distributed transactions but adds significant complexity — only use it where you truly need eventual consistency.

04

Service discovery and health checks via Spring Cloud are non-negotiable at this scale. Manual configuration doesn't survive operational reality.