Bird
Raised Fist0
LLDsystem_design~12 mins

Booking conflict resolution in LLD - Architecture Diagram

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
System Overview - Booking conflict resolution

This system manages booking requests for resources like rooms or appointments. It ensures no two bookings overlap for the same resource by detecting conflicts and resolving them before confirming the booking.

Architecture Diagram
User
  |
  v
Load Balancer
  |
  v
API Gateway
  |
  v
Booking Service <--> Conflict Resolver Service
  |                      |
  v                      v
Cache <---------------- Database
Components
User
client
Sends booking requests and receives confirmations or conflict notifications
Load Balancer
load_balancer
Distributes incoming user requests evenly to API Gateway instances
API Gateway
api_gateway
Routes booking requests to Booking Service and handles authentication
Booking Service
service
Processes booking requests and interacts with Conflict Resolver to check for overlaps
Conflict Resolver Service
service
Checks for booking conflicts using data from Cache and Database, and decides if booking can proceed
Cache
cache
Stores recent booking data for quick conflict checks to reduce database load
Database
database
Stores all booking records persistently
Request Flow - 13 Hops
UserLoad Balancer
Load BalancerAPI Gateway
API GatewayBooking Service
Booking ServiceConflict Resolver Service
Conflict Resolver ServiceCache
CacheConflict Resolver Service
Conflict Resolver ServiceDatabase
DatabaseConflict Resolver Service
Conflict Resolver ServiceBooking Service
Booking ServiceDatabase
Booking ServiceCache
Booking ServiceAPI Gateway
API GatewayUser
Failure Scenario
Component Fails:Cache
Impact:Conflict Resolver cannot quickly check recent bookings, causing more database queries and higher latency
Mitigation:System falls back to querying the database directly for conflict checks; cache is rebuilt asynchronously
Architecture Quiz - 3 Questions
Test your understanding
Which component is responsible for detecting booking conflicts?
ABooking Service
BConflict Resolver Service
CAPI Gateway
DLoad Balancer
Design Principle
This design separates conflict detection into a dedicated service to keep booking logic clean and scalable. Using cache reduces database load and speeds up conflict checks, improving user experience.

Practice

(1/5)
1. What is the primary goal of booking conflict resolution in a system?
easy
A. To ignore booking times and accept all requests
B. To allow multiple bookings at the same time for efficiency
C. To delete all previous bookings automatically
D. To prevent overlapping reservations for the same resource

Solution

  1. Step 1: Understand booking conflict concept

    Booking conflict resolution ensures no two bookings overlap for the same resource.
  2. Step 2: Identify the goal of conflict resolution

    The goal is to prevent double-booking by checking time overlaps and rejecting or adjusting conflicting bookings.
  3. Final Answer:

    To prevent overlapping reservations for the same resource -> Option D
  4. Quick Check:

    Conflict resolution = prevent overlaps [OK]
Hint: Conflict resolution means no double bookings allowed [OK]
Common Mistakes:
  • Thinking multiple bookings at same time are allowed
  • Assuming conflict resolution deletes bookings
  • Ignoring time overlaps in bookings
2. Which of the following code snippets correctly checks if two time intervals (start1, end1) and (start2, end2) overlap?
easy
A. if start1 < end2 and start2 < end1: overlap
B. if start1 > end2 or start2 > end1: overlap
C. if end1 <= start2 or end2 <= start1: no overlap
D. if start1 == end2 or start2 == end1: overlap

Solution

  1. Step 1: Understand time interval overlap condition

    Two intervals overlap if one starts before the other ends and vice versa.
  2. Step 2: Match condition to code

    Condition start1 < end2 and start2 < end1 correctly detects overlap.
  3. Final Answer:

    if start1 < end2 and start2 < end1: overlap -> Option A
  4. Quick Check:

    Overlap check = start1 < end2 and start2 < end1 [OK]
Hint: Overlap if intervals cross each other in time [OK]
Common Mistakes:
  • Using <= instead of < causing false negatives
  • Confusing no overlap with overlap conditions
  • Checking equality as overlap incorrectly
3. Given existing bookings: [(10, 12), (14, 16), (18, 20)], what will be the result of checking a new booking (12, 14) for conflict using the overlap condition start1 < end2 and start2 < end1?
medium
A. Conflict with (10, 12)
B. Conflict with (14, 16)
C. No conflict
D. Conflict with all existing bookings

Solution

  1. Step 1: Check overlap with each existing booking

    Check (12,14) against (10,12): 12 < 12 is false, no overlap. Against (14,16): 12 < 16 true, 14 < 14 false, no overlap. Against (18,20): no overlap.
  2. Step 2: Determine conflict result

    No overlaps found with any existing booking intervals.
  3. Final Answer:

    No conflict -> Option C
  4. Quick Check:

    New booking fits between existing without overlap [OK]
Hint: Check each existing booking for overlap carefully [OK]
Common Mistakes:
  • Assuming touching intervals overlap
  • Ignoring strict less than condition
  • Confusing start and end times
4. Identify the bug in this booking conflict check code snippet:
def is_conflict(new_start, new_end, existing_bookings):
    for start, end in existing_bookings:
        if new_start <= end and new_end >= start:
            return True
    return False
medium
A. The condition incorrectly uses <= and >= causing false conflicts
B. The condition allows bookings that end exactly when another starts
C. The function does not return anything
D. The loop does not iterate over bookings

Solution

  1. Step 1: Analyze the overlap condition

    Condition new_start <= end and new_end >= start includes cases where bookings just touch at edges, causing false conflicts.
  2. Step 2: Correct condition for strict overlap

    Use new_start < end and new_end > start to detect true overlaps only.
  3. Final Answer:

    The condition incorrectly uses <= and >= causing false conflicts -> Option A
  4. Quick Check:

    Use strict inequalities for overlap [OK]
Hint: Use < and >, not <= or >= for overlap checks [OK]
Common Mistakes:
  • Using inclusive operators causing false positives
  • Forgetting to return a boolean
  • Not iterating over all bookings
5. You are designing a booking system for meeting rooms. To handle conflict resolution at scale, which approach is best to ensure no overlapping bookings and high performance?
hard
A. Use a centralized lock on the entire booking database for each new booking
B. Check for conflicts by querying only relevant time slots and use optimistic concurrency control
C. Allow all bookings and resolve conflicts manually later
D. Store bookings without timestamps and rely on user honesty

Solution

  1. Step 1: Understand scalability and conflict resolution needs

    Centralized locking (Use a centralized lock on the entire booking database for each new booking) causes bottlenecks; manual or no checks (Options C, D) cause errors.
  2. Step 2: Choose efficient conflict detection method

    Querying only relevant time slots reduces load; optimistic concurrency control handles race conditions efficiently.
  3. Final Answer:

    Check for conflicts by querying only relevant time slots and use optimistic concurrency control -> Option B
  4. Quick Check:

    Efficient conflict check + concurrency control = scalable solution [OK]
Hint: Query relevant slots + optimistic control for scalable conflict resolution [OK]
Common Mistakes:
  • Using global locks causing slowdowns
  • Ignoring concurrency issues
  • Not filtering bookings by time before checking