Modern Reservation System
ποΈ High-Level Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β API Gateway (8080) β
β Spring Cloud Gateway / GraphQL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTP Requests
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Business Services Layer β
ββββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββ¬ββββββββββ€
β Reservation β Availability β Rate β Payment βAnalyticsβ
β Engine β Calculator β Management β Processor β Engine β
β (8081) β (8082) β (8083) β (8084) β (8086) β
β β β β β β
β - Create β - Check β - Dynamic β - Authorize β - KPIs β
β - Update β - Update β Pricing β - Capture β - Reportsβ
β - Cancel β - Block β - Apply β - Refund β - Trendsβ
β - Status β - Release β - History β - Settlement β - Alertsβ
ββββββββββ¬ββββββββ΄βββββββββ¬ββββββββ΄βββββββββ¬ββββββββ΄βββββββββ¬ββββββββ΄ββββββββββ
β β β β
β β β β
β Publish Events β Publish Events β Publish Events β Publish Events
ββββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Apache Kafka Event Streaming Platform β
β (Port 9092, 9094) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Topics: β
β ββ reservation.created ββ payment.authorized ββ analytics.* β
β ββ reservation.confirmed ββ payment.captured ββ rate.updated β
β ββ reservation.modified ββ payment.failed ββ rate.applied β
β ββ reservation.cancelled ββ payment.refunded ββ availability.* β
β ββ reservation.checkin ββ payment.settled β
β ββ reservation.checkout ββ payment.initiated β
β β
β Partitions: 3-10 per topic | Replication Factor: 3 (production) β
β Retention: 7 days | Consumer Groups: Per service β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β Consume Events
ββββββββββββββββββ¬ββββββββββββ΄ββββββββββββ¬βββββββββββββββββ
β β β β
βΌ βΌ βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β Each Service β β Each Service β β Each Service β β Analytics β
β Consumes β β Consumes β β Consumes β β Engine β
β Events β β Events β β Events β β Consumes β
β Relevant β β Relevant β β Relevant β β ALL β
β To Its β β To Its β β To Its β β Events β
β Domain β β Domain β β Domain β β β
ββββββββββ¬ββββββββ ββββββββββ¬ββββββββ ββββββββββ¬ββββββββ ββββββββ¬ββββββββ
β β β β
βΌ βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PostgreSQL Database (5432) β
β Multi-Master Cluster β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Each Service has its own schema: β
β ββ reservations schema ββ payments schema ββ analytics schema β
β ββ availability schema ββ rates schema ββ shared reference data β
β β
β Pattern: Database per Service (Microservices best practice) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β β
βΌ βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Redis Cache (6379) β
β 21-node Cluster (Production) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Event Flow: Complete Reservation Journey
ββββββββββββββββ
β Guest β
β (Client) β
ββββββββ¬ββββββββ
β HTTP POST /api/reservations
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β API Gateway (8080) β
β - Authentication β
β - Rate Limiting β
β - Routing β
ββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β
β Route to Reservation Engine
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Reservation Engine (8081) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1. Validate Request β β
β β 2. Check Business Rules β β
β β 3. Generate Confirmation Number β β
β β 4. Save to Database (reservations schema) β β
β β 5. Publish Event: reservation.created β ββββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β
β β
Returns: 201 Created with confirmation number β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β Event Published to Kafka
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Topic: reservation.created β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Event Payload: β β
β β { β β
β β "eventId": "uuid", β β
β β "eventType": "reservation.created", β β
β β "confirmationNumber": "RSV-2025-001234", β β
β β "propertyId": "PROP-001", β β
β β "guestDetails": {...}, β β
β β "stayDetails": {...}, β β
β β "pricingDetails": {...} β β
β β } β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬ββββββββββββββββ
β β β β
β Consume β Consume β Consume β Consume
β β β β
βΌ βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Availability β β Payment β β Rate β β Analytics β
β Calculator β β Processor β β Management β β Engine β
β (8082) β β (8084) β β (8083) β β (8086) β
ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ
β β β β
β Process β Process β Process β Process
β Event β Event β Event β Event
βΌ βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PARALLEL PROCESSING (All services run simultaneously) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Availability Calculator: β β
β β 1. Reduce room inventory β β
β β 2. Update availability_calendar table β β
β β 3. Check for overbooking β β
β β 4. Publish: availability.updated β ββββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β Payment Processor: β β β
β β 1. Create payment record β β β
β β 2. Call payment gateway API β β β
β β 3. Authorize payment β β β
β β 4. Store payment token securely β β β
β β 5. Publish: payment.authorized β ββββΌββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β Rate Management: β β β β
β β 1. Record rate application β β β β
β β 2. Update rate usage statistics β β β β
β β 3. Trigger dynamic pricing review β β β β
β β 4. Publish: rate.applied β ββββΌββΌββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β
β β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β
β β Analytics Engine: β β β β β
β β 1. Record reservation event β β β β β
β β 2. Update real-time dashboards β β β β β
β β 3. Calculate occupancy metrics β β β β β
β β 4. Update revenue forecasts β β β β β
β β 5. Publish: analytics.reservation β ββββΌββΌββΌββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββΌββΌβββ
β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Topics β
β ββ availability.updated β
β ββ payment.authorized β
β ββ rate.applied β
β ββ analytics.reservation β
ββββββ¬βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Consume β Consume
β β
βΌ βΌ
ββββββββββββββββ ββββββββββββββββ
β Reservation β β Rate β
β Engine β β Management β
β (8081) β β (8083) β
ββββββββ¬ββββββββ ββββββββ¬ββββββββ
β β
β β Adjust dynamic pricing
β β based on availability
β βΌ
β Update rates in database
β
β Update reservation status
β to CONFIRMED (payment authorized)
βΌ
Update database
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FINAL STATE: β
β β
Reservation: CONFIRMED in database β
β β
Inventory: Reduced for booked dates β
β β
Payment: Authorized and token stored β
β β
Rates: Usage tracked, pricing adjusted β
β β
Analytics: Metrics updated in real-time β
β β
β Total Time: ~500ms (all parallel processing) β
β vs Synchronous: ~2000ms (sequential HTTP calls) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Event Flow: Reservation Cancellation
Guest cancels reservation
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Reservation Engine (8081) β
β 1. Validate cancellation request β
β 2. Check cancellation policy β
β 3. Update status to CANCELLED β
β 4. Publish: reservation.cancelled β
ββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Topic: reservation.cancelled β
ββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Availability β β Payment β β Analytics β
β Calculator β β Processor β β Engine β
ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ
β β β
β β β
βΌ βΌ βΌ
Restore Initiate Update
Inventory Refund Metrics
β β β
ββββββββββ¬ββββββββ΄βββββββββββββββββ
β
βΌ
All updates complete
π― Consumer Group Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Topic: reservation.created β
β (3 Partitions) β
βββββββββββββββββββββ¬ββββββββββββββββββββ¬ββββββββββββββββββββββββββ€
β Partition 0 β Partition 1 β Partition 2 β
β Messages 1-100 β Messages 101-200β Messages 201-300 β
βββββββββββ¬ββββββββββ΄ββββββββββ¬ββββββββββ΄ββββββββββ¬ββββββββββββββββ
β β β
β β β
βββββββββββΌββββββββββββββββββββΌββββββββββββββββββββΌββββββββββββββββ
β Consumer Group: availability-calculator-group β
βββββββββββββββββββ¬ββββββββββββββββββββ¬ββββββββββββββββββββββββββββ€
β Consumer 1 β Consumer 2 β Consumer 3 β
β (Thread 1) β (Thread 2) β (Thread 3) β
β Reads P0 β Reads P1 β Reads P2 β
β 100 msg/sec β 100 msg/sec β 100 msg/sec β
βββββββββββββββββββ΄ββββββββββββββββββββ΄ββββββββββββββββββββββββββββ
Total: 300 messages/sec
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Consumer Group: payment-processor-group β
βββββββββββββββββββ¬ββββββββββββββββββββ¬ββββββββββββββββββββββββββββ€
β Consumer 1 β Consumer 2 β Consumer 3 β
β Reads P0 β Reads P1 β Reads P2 β
β (Independent β (Independent β (Independent β
β from above) β from above) β from above) β
βββββββββββββββββββ΄ββββββββββββββββββββ΄ββββββββββββββββββββββββββββ
Key Points:
- Each consumer group gets ALL messages
- Within a group, each partition read by ONE consumer
- Groups process independently
- Scalability: Add more partitions + consumers
ποΈ Service Communication Matrix
Before Kafka (HTTP/REST - Tight Coupling)
βββββββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββ¬ββββββββββ¬βββββββββββ
β βReserv. βAvail. βRate βPayment βAnalytics β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βReservation β - β HTTP β HTTP β HTTP β HTTP β
βEngine β β Call β Call β Call β Call β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βAvailability β HTTP β - β - β - β - β
βCalculator β Call β β β β β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βRate β HTTP β HTTP β - β - β - β
βManagement β Call β Call β β β β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βPayment β HTTP β - β - β - β - β
βProcessor β Call β β β β β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βAnalytics β - β - β - β - β - β
βEngine β β β β β β
βββββββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββ΄ββββββββββ΄βββββββββββ
Problems:
β 8 direct dependencies
β If one service down, others fail
β Synchronous blocking calls
β Difficult to scale independently
After Kafka (Event-Driven - Loose Coupling)
βββββββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββ¬ββββββββββ¬βββββββββββ
β βReserv. βAvail. βRate βPayment βAnalytics β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βReservation β - β Event βEvent β Event β Event β
βEngine β β Pub β Pub β Pub β Pub β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βAvailability β Event β - βEvent β - β Event β
βCalculator β Sub β β Pub β β Pub β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βRate β Event β Event β - β - β Event β
βManagement β Sub β Sub β β β Pub β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βPayment β Event β - β - β - β Event β
βProcessor β Sub+Pub β β β β Pub β
βββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββΌββββββββββΌβββββββββββ€
βAnalytics β Event β Event βEvent β Event β - β
βEngine β Sub β Sub β Sub β Sub β β
βββββββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββ΄ββββββββββ΄βββββββββββ
Benefits:
β
Services don't know each other
β
Services work independently
β
Asynchronous non-blocking
β
Easy to scale each service
β
Easy to add new consumers
β
Complete event history
π Topic Partitioning Strategy
Topic: reservation.created
Partitions: 3 (for load distribution)
Partition Assignment (by property ID):
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Partition 0: property IDs ending in 0, 3, 6, 9 β
β ββ PROP-001, PROP-004, PROP-007, PROP-010 β
β ββ Consumer 1 processes these β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Partition 1: property IDs ending in 1, 4, 7 β
β ββ PROP-002, PROP-005, PROP-008, PROP-011 β
β ββ Consumer 2 processes these β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Partition 2: property IDs ending in 2, 5, 8 β
β ββ PROP-003, PROP-006, PROP-009, PROP-012 β
β ββ Consumer 3 processes these β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Benefits:
β
Even load distribution
β
Messages for same property always in same partition (ordering)
β
Parallel processing across properties
β
Easy to scale (add more partitions)
π Security & Reliability Patterns
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Reliability Patterns β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. EXACTLY-ONCE SEMANTICS β
β Producer: enable.idempotence=true β
β Consumer: Idempotent processing β
β β
β 2. RETRY WITH BACKOFF β
β Initial: 100ms β 200ms β 400ms β 800ms β 1600ms β
β Max retries: 5 β
β β
β 3. DEAD LETTER QUEUE β
β Failed messages β reservation.created.dlq β
β Manual investigation and replay β
β β
β 4. CIRCUIT BREAKER β
β If consumer fails 10 times β OPEN circuit β
β Wait 30 seconds β Try again (HALF-OPEN) β
β β
β 5. CONSUMER LAG MONITORING β
β Alert if lag > 1000 messages β
β Alert if lag age > 5 minutes β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Scalability Model
Current Load: 100 reservations/minute
Future Load: 10,000 reservations/minute (100x increase)
Scaling Strategy:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Cluster: β
β ββ Current: 1 broker, 3 partitions β
β ββ Scale to: 3-5 brokers, 10-20 partitions β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Service Instances: β
β ββ Reservation Engine: 1 β 5 instances β
β ββ Availability Calc: 1 β 3 instances β
β ββ Payment Processor: 1 β 3 instances β
β ββ Rate Management: 1 β 2 instances β
β ββ Analytics Engine: 1 β 2 instances β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Expected Performance: β
β ββ Throughput: 10,000 reservations/minute β
β ββ Latency: < 100ms (p95) β
β ββ Consumer Lag: < 100 messages β
β ββ CPU Usage: < 70% per service β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Last Updated: October 6, 2025 Document Version: 1.0