Quora Microservices App
Overview
Four services, one gateway, one question at a time — a Quora clone built the way distributed systems actually get built.
Quora Microservices App re-creates the core of a Q&A platform — asking, answering, moderating, and administering content — as a set of independently deployable Spring Boot services. Instead of one monolith handling everything, each concern lives in its own service, reachable through a single API gateway.
Problem
A Q&A platform touches very different concerns — user accounts, question/answer content, moderation, and admin controls — each with different scaling needs and release cadence. Cramming all of that into one codebase makes it hard to deploy a moderation fix without redeploying the entire platform, and hard to reason about which service owns which data.
What I Built
- Four independent Spring Boot services —
userApp,QuoraApp(Q&A),QuoraModeratorApp, andAdminApp— each with its own controllers, services, and persistence layer - An
Api_Gatewaysitting in front of all services, acting as the single entry point and routing incoming requests to the right backend - Synchronous inter-service communication via
RestTemplate(e.g.AdminAppcalling out to other services), alongside Kafka-based asynchronous processing for decoupled, event-driven workflows - A dual-persistence setup spanning MongoDB and MySQL across services, matched to each service’s data shape
- Maven-wrapper-based builds (
mvnw) per service, keeping the whole system easy to build and run without extra tooling installed
Key Outcomes
- Modeled a realistic content-platform architecture — auth/user, content, moderation, and admin cleanly separated into services that scale and deploy independently
- Combined synchronous (REST) and asynchronous (Kafka) communication patterns in the same system, mirroring how real platforms balance immediate requests against background processing
- Used an API gateway as the single client-facing entry point, keeping individual service locations and internals hidden from consumers — a pattern directly transferable to production-grade distributed systems
- Structured the codebase so each domain service can evolve, redeploy, and scale on its own, without touching the rest of the platform