Skip to Content
Nextra 4.0 is released 🎉
DocumentationHotel Reservation SystemPropose High Level Design and Get Buy In

āϰ⧇āĻ•āĻŽā§‡āĻ¨ā§āĻĄā§‡āĻĄ āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āĻĄāĻŋāϜāĻžāχāύ āĻāĻŦāĻ‚ āϏāĻŽā§āĻŽāϤāĻŋ āĻ—ā§āϰāĻšāĻŖ (Propose High-Level Design and Get Buy-In)

āĻāχ āĻ…āĻ‚āĻļ⧇ āφāĻŽāϰāĻž āφāϞ⧋āϚāύāĻž āĻ•āϰāĻŦ:

API design

Data models

High-level design

API design

āφāĻŽāϰāĻž āĻšā§‹āĻŸā§‡āϞ āϰāĻŋāϜāĻžāĻ°ā§āϭ⧇āĻļāύ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ API design āύāĻŋāϝāĻŧ⧇ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻŋāĨ¤ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ API-āϗ⧁āϞ⧋ āύāĻŋāĻšā§‡ RESTful conventions āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϞ⧋āĨ¤

āύ⧋āϟ āĻ•āϰ⧁āύ āϝ⧇ āĻāχ āĻ…āĻ§ā§āϝāĻžāϝāĻŧāϟāĻŋ āĻāĻ•āϟāĻŋ hotel reservation system-āĻāϰ design-āĻāϰ āĻ“āĻĒāϰ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ hotel website-āĻāϰ āϜāĻ¨ā§āϝ design-āĻ āĻ—ā§āϰāĻžāĻšāĻ•āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ criteria-āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ room search āĻ•āϰāĻžāϰ āϏāĻšāϜāĻŦā§‹āĻ§ā§āϝ āĻĢāĻŋāϚāĻžāϰ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ search feature-āϗ⧁āϞ⧋āϰ API āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻšāϞ⧇āĻ“, āϏ⧇āϗ⧁āϞ⧋ technicalāĻ­āĻžāĻŦ⧇ āϖ⧁āĻŦ āĻšā§āϝāĻžāϞ⧇āĻžā§āϜāĻŋāĻ‚ āύāϝāĻŧāĨ¤ āϤāĻžāχ āĻāϗ⧁āϞ⧋ āĻāχ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇āϰ scope-āĻāϰ āĻŦāĻžāχāϰ⧇āĨ¤

API Detail GET /v1/hotels/ID āĻāĻ•āϟāĻŋ hotel-āĻāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ POST /v1/hotels āύāϤ⧁āύ hotel āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤ āĻāχ API āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤ PUT /v1/hotels/ID hotel information āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇āĨ¤ āĻāχ API āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤ DELETE /v1/hotels/ID āĻāĻ•āϟāĻŋ hotel delete āĻ•āϰ⧇āĨ¤ āĻāχ API āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤

Table 1 Hotel-related APIs

API Detail GET /v1/hotels/ID/rooms/ID āĻāĻ•āϟāĻŋ room-āĻāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ POST /v1/hotels/ID/rooms āĻāĻ•āϟāĻŋ room āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤ āĻāχ API āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤ PUT /v1/hotels/ID/rooms/ID room information āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇āĨ¤ āĻāχ API āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤ DELETE /v1/hotels/ID/rooms/ID āĻāĻ•āϟāĻŋ room delete āĻ•āϰ⧇āĨ¤ āĻāχ API āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤

Table 2 Room-related APIs

API Detail GET /v1/reservations logged-in user-āĻāϰ reservation history āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ GET /v1/reservations/ID āĻāĻ•āϟāĻŋ reservation-āĻāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ POST /v1/reservations āύāϤ⧁āύ reservation āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ DELETE /v1/reservations/ID āĻāĻ•āϟāĻŋ reservation cancel āĻ•āϰ⧇āĨ¤

Table 3 Reservation-related APIs

āύāϤ⧁āύ reservation āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϖ⧁āĻŦāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻāĻ•āϟāĻŋ featureāĨ¤ āύāϤ⧁āύ reservation āϤ⧈āϰāĻŋāϰ request parameters (POST /v1/reservations) āĻāĻŽāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇:

{ "startDate":"2021-04-28", "endDate":"2021-04-30", "hotelID":"245", "roomID":"U12354673389", "reservationID":"13422445" }

āĻĻāϝāĻŧāĻž āĻ•āϰ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰ⧁āύ, reservationID āϕ⧇ idempotency key āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ double booking āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝāĨ¤ Double booking āĻŽāĻžāύ⧇ āĻāĻ•āχ room-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āχ āĻĻāĻŋāύ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• reservation āϤ⧈āϰāĻŋ āĻšāϝāĻŧ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāĨ¤ āĻāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ “Concurrency issue” āĻ…āĻ‚āĻļ⧇ ‘Deep Dive’ āϏ⧇āĻ•āĻļāύ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

Data model

āϕ⧋āύ database āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇ āϤāĻž āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āĻ“āϝāĻŧāĻžāϰ āφāϗ⧇, data access pattern āĻ­āĻžāϞ⧋āĻ­āĻžāĻŦ⧇ āĻĻ⧇āĻ–āĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ Hotel reservation system-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāĻšā§‡āϰ query-āϗ⧁āϞ⧋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

Query 1: āĻāĻ•āϟāĻŋ hotel-āĻāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ āĻĻ⧇āĻ–āĻžāĨ¤

Query 2: āĻāĻ•āϟāĻŋ date range āĻĻāĻŋāϞ⧇ available room type āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāĻžāĨ¤

Query 3: āĻāĻ•āϟāĻŋ reservation āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰāĻžāĨ¤

Query 4: āĻāĻ•āϟāĻŋ reservation āĻŦāĻž āφāϗ⧇āϰ reservation history āϖ⧁āρāĻœā§‡ āĻĻ⧇āĻ–āĻžāĨ¤

Back-of-the-envelope estimation āĻĨ⧇āϕ⧇ āφāĻŽāϰāĻž āϜāĻžāύāĻŋ system-āĻāϰ scale āϖ⧁āĻŦ āĻŦāĻĄāĻŧ āύāϝāĻŧ, āϤāĻŦ⧇ āĻŦāĻĄāĻŧ event-āĻāϰ āϏāĻŽāϝāĻŧ traffic surge-āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ requirements āĻŽāĻžāĻĨāĻžāϝāĻŧ āϰ⧇āϖ⧇ āφāĻŽāϰāĻž relational database āĻŦ⧇āϛ⧇ āύāĻŋāχ, āĻ•āĻžāϰāĻŖ:

Relational database read-heavy āĻāĻŦāĻ‚ write āĻ•āĻŽ āĻšāĻ“āϝāĻŧāĻž workflow-āĻ āĻ­āĻžāϞ⧋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻ•āĻžāϰāĻŖ hotel website/app āĻ­āĻŋāϜāĻŋāϟ āĻ•āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϏāĻ‚āĻ–ā§āϝāĻž āφāϏāϞ reservation āĻ•āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϤ⧁āϞāύāĻžāϝāĻŧ āĻ•āϝāĻŧ⧇āĻ• order of magnitude āĻŦ⧇āĻļāĻŋāĨ¤ NoSQL databases āϏāĻžāϧāĻžāϰāĻŖāϤ writes-āĻāϰ āϜāĻ¨ā§āϝ optimized, āφāϰ relational database read-heavy workflow-āĻāϰ āϜāĻ¨ā§āϝ āϝāĻĨ⧇āĻˇā§āϟ āĻ­āĻžāϞ⧋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

Relational database ACID (atomicity, consistency, isolation, durability) guarantees āĻĻ⧇āϝāĻŧāĨ¤ Reservation system-āĻāϰ āϜāĻ¨ā§āϝ ACID properties āϖ⧁āĻŦāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻāϗ⧁āϞ⧋ āύāĻž āĻĨāĻžāĻ•āϞ⧇ negative balance, double charge, double reservation āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āϏāĻŽāĻ¸ā§āϝāĻž āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰāĻž āĻ•āĻ āĻŋāύ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ ACID properties application code āĻ…āύ⧇āĻ• āϏāĻšāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒ⧁āϰ⧋ system-āϕ⧇ reason āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ relational database āĻāχ guarantees āĻĻ⧇āϝāĻŧāĨ¤

Relational database āϏāĻšāĻœā§‡āχ data model āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ Business data-āĻāϰ structure āϖ⧁āĻŦ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ, āĻāĻŦāĻ‚ hotel, room, room_type āχāĻ¤ā§āϝāĻžāĻĻāĻŋ entity-āϗ⧁āϞ⧋āϰ relationship āĻ¸ā§āĻĨāĻŋāϰāĨ¤ āĻ āϧāϰāύ⧇āϰ data model relational database-āĻ āϏāĻšāĻœā§‡āχ model āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

āĻāĻ–āύ āϝ⧇āĻšā§‡āϤ⧁ relational database āϕ⧇ data store āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇, āφāϏ⧁āύ schema design āĻĻ⧇āĻ–āĻŋāĨ¤ Figure 2-āĻ āĻāĻ•āϟāĻŋ straightforward schema design āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻ…āύ⧇āĻ• candidate-āĻāϰ āϜāĻ¨ā§āϝ hotel reservation system model āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ natural āωāĻĒāĻžāϝāĻŧ āĻāϟāĻŋāĨ¤

Figure 2 Database schema

āĻāχ diagram-āĻ āĻāĻ•āϟāĻŋ hotel reservation system-āĻāϰ database schema design Entity-Relationship diagram āφāĻ•āĻžāϰ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āϚāĻžāϰāϟāĻŋ service āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇: ‘Hotel Service,’ ‘Rate Service,’ ‘Guest Service,’ āĻāĻŦāĻ‚ ‘Reservation Service.’ āĻĒā§āϰāϤāĻŋāϟāĻŋ service-āĻāϰ āĻāĻ•āϟāĻŋ table āφāϛ⧇āĨ¤

‘Hotel Service’-āĻ āĻāĻ•āϟāĻŋ hotel table āφāϛ⧇, āϝāĻžāϰ attributes:

  • hotel_id (primary key, PK)
  • name
  • address
  • location

‘Rate Service’-āĻ āĻāĻ•āϟāĻŋ room_type_rate table āφāϛ⧇, āϝāĻžāϰ attributes:

  • hotel_id (PK)
  • date (PK)
  • rate

‘Guest Service’-āĻ āĻāĻ•āϟāĻŋ guest table āφāϛ⧇, āϝāĻžāϰ attributes:

  • guest_id (PK)
  • first_name
  • last_name
  • email

āĻļ⧇āώ⧇, ‘Reservation Service’-āĻ āĻāĻ•āϟāĻŋ reservation table āφāϛ⧇, āϝāĻžāϰ attributes:

  • reservation_id (PK)
  • hotel_id
  • room_id
  • start_date
  • end_date
  • status
  • guest_id

āĻāχ diagram-āĻ table-āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ relationship shared attribute names āϝ⧇āĻŽāύ hotel_id, room_id, āĻāĻŦāĻ‚ guest_id-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§‹āĻāĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇, āϝāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦ database implementation-āĻ foreign key relationship āĻšāĻŋāϏ⧇āĻŦ⧇ explicitly define āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ explicit connection āφāρāĻ•āĻž āĻšāϝāĻŧāύāĻŋ, āϤāĻŦ⧇ shared attributes relationship āĻŦā§‹āĻāĻžāϝāĻŧāĨ¤

Figure 2 Database schema

āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— attribute-āχ āϏāĻšāϜāĻŦā§‹āĻ§ā§āϝ, āϤāĻžāχ āφāĻŽāϰāĻž reservation table-āĻāϰ status field-āϟāĻŋ āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻŦāĨ¤ status field āύāĻŋāĻšā§‡āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϗ⧁āϞ⧋āϰ āϝ⧇āϕ⧋āύ⧋ āĻāĻ•āϟāĻŋāϤ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇:

  • pending
  • paid
  • refunded
  • canceled
  • rejected

āĻāχ state machine Figure 3-āĻ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

Figure 3 Reservation status

āĻāχ schema design-āĻ āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŧ āϏāĻŽāĻ¸ā§āϝāĻž āφāϛ⧇āĨ¤ āĻāχ data model Airbnb-āĻāϰ āĻŽāϤ⧋ company-āϰ āϜāĻ¨ā§āϝ āĻ•āĻžāϜ āĻ•āϰ⧇, āϝ⧇āĻ–āĻžāύ⧇ user reservation āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ room_id (āϝāĻž listing_id-āĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇) āĻĒāĻžāϝāĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ hotel-āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϤāĻž āĻšāϝāĻŧ āύāĻžāĨ¤ User āφāϏāϞ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ room āύāϝāĻŧ, āĻŦāϰāĻ‚ āĻāĻ•āϟāĻŋ hotel-āĻāϰ āϭ⧇āϤāϰ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ room type reserve āĻ•āϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ room type āĻšāϤ⧇ āĻĒāĻžāϰ⧇ standard room, king-size room, queen-size room with two queen beds, āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ Guest check-in āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ room number āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ, reservation āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āύāϝāĻŧāĨ¤ āĻāχ āύāϤ⧁āύ requirement reflect āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ data model āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāϰāĻ“ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāϤ⧇ ‘Deep Dive’ section-āĻāϰ “Improved data model” āĻĻ⧇āϖ⧁āύāĨ¤

High-level design

āĻāχ hotel reservation system-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž microservice architecture āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋāĨ¤ āĻ—āϤ āĻ•āϝāĻŧ⧇āĻ• āĻŦāĻ›āϰ⧇ microservice architecture āϖ⧁āĻŦāχ āϜāύāĻĒā§āϰāĻŋāϝāĻŧ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āϝ⧇ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϗ⧁āϞ⧋ microservice āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āφāϛ⧇ Amazon, Netflix, Uber, Airbnb, Twitter, āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ āφāĻĒāύāĻŋ microservice architecture-āĻāϰ āϏ⧁āĻŦāĻŋāϧāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻ•āĻŋāϛ⧁ āĻ­āĻžāϞ⧋ resource [1] [2] āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻŽāĻžāĻĻ⧇āϰ design microservice architecture-āĻāϰ āĻ“āĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϤ⧈āϰāĻŋ, āĻāĻŦāĻ‚ high-level design diagram Figure 4-āĻ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

Figure 4 High-level design

āĻāχ diagram-āĻ āĻāĻ•āϟāĻŋ hotel booking system-āĻāϰ system architecture āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ Diagram-āϟāĻŋ external āĻāĻŦāĻ‚ internal āĻĻ⧁āχ āĻ­āĻžāϗ⧇ āĻŦāĻŋāĻ­āĻ•ā§āϤ, āĻŽāĻžāĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ horizontal line āĻĻāĻŋāϝāĻŧ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

External side-āĻ user-āĻāϰ mobile device āĻāĻ•āϟāĻŋ CDN (Content Delivery Network)-āĻāϰ āϏāĻžāĻĨ⧇ interact āĻ•āϰ⧇, āϝāĻž āĻĒāϰ⧇ āĻāĻ•āϟāĻŋ Public API Gateway-āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāϝāĻŧāĨ¤ āĻāχ gateway central point āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ request-āϗ⧁āϞ⧋ āϚāĻžāϰāϟāĻŋ distinct service-āĻ distribute āĻ•āϰ⧇:

  • Hotel Service
  • Rate Service
  • Reservation Service
  • Payment Service

āĻāχ service-āϗ⧁āϞ⧋āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ own database āφāϛ⧇:

  • Hotel DB
  • Rate DB
  • Reservation DB
  • Payment DB

Hotel Service āφāϰāĻ“ āĻ­āĻžāϞ⧋ performance-āĻāϰ āϜāĻ¨ā§āϝ Hotel Cache āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤

Internal, private side-āĻ āĻāĻ•āϜāύ Admin user āĻāĻ•āϟāĻŋ Internal API-āĻāϰ āϏāĻžāĻĨ⧇ interact āĻ•āϰ⧇, āϝāĻž Hotel Management Service-āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻĨāĻžāϕ⧇āĨ¤

āĻāχ arrows component-āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ information āĻāĻŦāĻ‚ request flow āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ System-āϟāĻŋ hotel information, rates, reservations, āĻāĻŦāĻ‚ payments handling-āĻāϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ, āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ hotel data manage āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ administrative interface-āĻ“ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤

āĻāĻ–āύ āφāĻŽāϰāĻž system-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ component āϏāĻ‚āĻ•ā§āώ⧇āĻĒ⧇ top to bottom āĻĻ⧇āϖ⧇ āύāĻŋāχāĨ¤

User: āĻāĻ•āϜāύ user mobile phone āĻŦāĻž computer āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ hotel room book āĻ•āϰ⧇āĨ¤

Admin (hotel staff): authorized hotel staff refund āĻ•āϰāĻž, reservation cancel āĻ•āϰāĻž, room information update āĻ•āϰāĻž āχāĻ¤ā§āϝāĻžāĻĻāĻŋ administrative operation āĻ•āϰ⧇āĨ¤

CDN (content delivery network): load time āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ CDN āϏāĻŦ static asset cache āĻ•āϰ⧇, āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ JavaScript bundles, images, videos, HTML, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤāĨ¤

Public API Gateway: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ fully managed service āϝāĻž rate limiting, authentication, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ support āĻ•āϰ⧇āĨ¤ API gateway endpoint-āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ service-āĻ request route āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ configure āĻ•āϰāĻž āĻĨāĻžāϕ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, hotel homepage load āĻ•āϰāĻžāϰ request hotel service-āĻ āϝāĻžāϝāĻŧ, āφāϰ hotel room book āĻ•āϰāĻžāϰ request reservation service-āĻ route āĻšāϝāĻŧāĨ¤

Internal APIs: āĻāχ API-āϗ⧁āϞ⧋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ authorized hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤ āĻāϗ⧁āϞ⧋ internal software āĻŦāĻž website-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ access āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϗ⧁āϞ⧋ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āĻĨāĻžāϕ⧇ VPN (virtual private network)-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡āĨ¤

Hotel Service: āĻāϟāĻŋ hotel āĻāĻŦāĻ‚ room āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ āĻĻ⧇āϝāĻŧāĨ¤ Hotel āĻāĻŦāĻ‚ room data āϏāĻžāϧāĻžāϰāĻŖāϤ static, āϤāĻžāχ āϏāĻšāĻœā§‡āχ cache āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

Rate Service: āĻāϟāĻŋ āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ date-āĻāϰ āϜāĻ¨ā§āϝ room rate āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ Hotel industry-āϤ⧇ interesting āĻāĻ•āϟāĻŋ āĻŦāĻŋāώāϝāĻŧ āĻšāϞ⧋, room-āĻāϰ āĻĻāĻžāĻŽ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĻāĻŋāύ⧇ hotel āĻ•āϤāϟāĻž full āĻšāĻ“āϝāĻŧāĻžāϰ āφāĻļāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ āϤāĻžāϰ āĻ“āĻĒāϰāĨ¤

Reservation Service: āĻāϟāĻŋ reservation request āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āĻāĻŦāĻ‚ hotel room reserve āĻ•āϰ⧇āĨ¤ āĻāχ service room reserve āĻšāĻ“āϝāĻŧāĻž āĻŦāĻž reservation cancel āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻžāĻĨ⧇ room inventory-āĻ“ track āĻ•āϰ⧇āĨ¤

Payment Service: āĻāϟāĻŋ customer-āĻāϰ payment execute āĻ•āϰ⧇ āĻāĻŦāĻ‚ payment transaction āϏāĻĢāϞ āĻšāϞ⧇ reservation status āϕ⧇ “paid” āĻ update āĻ•āϰ⧇, āφāϰ transaction fail āĻšāϞ⧇ “rejected” āĻ•āϰ⧇āĨ¤

Hotel Management Service: āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ authorized hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧāĨ¤ Hotel staff-āĻāϰ āϜāĻ¨ā§āϝ āϝ⧇āϏāĻŦ feature āĻĨāĻžāϕ⧇ āϤāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āφāϛ⧇:

  • upcoming reservation-āĻāϰ record āĻĻ⧇āĻ–āĻž
  • customer-āĻāϰ āϜāĻ¨ā§āϝ room reserve āĻ•āϰāĻž
  • reservation cancel āĻ•āϰāĻž
  • āχāĻ¤ā§āϝāĻžāĻĻāĻŋ

āĻ¸ā§āĻĒāĻˇā§āϟāϤāĻžāϰ āϜāĻ¨ā§āϝ Figure 4-āĻ microservice-āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āĻ…āύ⧇āĻ• interaction arrow āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧāύāĻŋāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, Figure 5-āĻ āϝ⧇āĻŽāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇, Reservation service āĻāĻŦāĻ‚ Rate service-āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ arrow āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤ Reservation service room rate āϜāĻžāύāϤ⧇ Rate service-āϕ⧇ query āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ reservation-āĻāϰ total room charge āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āφāϰ⧇āĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻšāϞ⧋, Hotel Management Service-āĻāϰ āϏāĻžāĻĨ⧇ āĻ…āĻ¨ā§āϝ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— service-āĻāϰ āĻ…āύ⧇āĻ• arrow āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤ āϝāĻ–āύ āϕ⧋āύ⧋ admin Hotel Management Service-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇, āϤāĻ–āύ āϏ⧇āχ request-āϗ⧁āϞ⧋ āĻĄā§‡āϟāĻžāϰ āĻŽāĻžāϞāĻŋāĻ• service-āĻ forward āĻ•āϰāĻž āĻšāϝāĻŧ, āϝāĻžāϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϟāĻŋ handle āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

Figure 5 Connections between services

āĻāχ diagram-āĻ āĻĻ⧁āϟāĻŋ āφāϞāĻžāĻĻāĻž service architecture āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻŦāĻžāĻŽ āĻĒāĻžāĻļ⧇ āĻāĻ•āϟāĻŋ simple two-service architecture āφāϛ⧇, āϝ⧇āĻ–āĻžāύ⧇ Reservation Service āϏāϰāĻžāϏāϰāĻŋ Rate Service-āϕ⧇ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ call āĻ•āϰ⧇āĨ¤ āĻĻ⧁āχāϟāĻŋ rectangular box-āϕ⧇ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ downward arrow āĻāϟāĻŋ āĻĻ⧇āĻ–āĻžāĻšā§āϛ⧇āĨ¤

āĻĄāĻžāύ āĻĒāĻžāĻļ⧇ āĻāĻ•āϟāĻŋ āφāϰāĻ“ āϜāϟāĻŋāϞ microservices-based architecture āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ central Hotel Management Service orchestrator āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ subordinate service-āĻ request distribute āĻ•āϰ⧇āĨ¤ Hotel Management Service āĻĨ⧇āϕ⧇ āϚāĻžāϰāϟāĻŋ service-āĻ arrow āϗ⧇āϛ⧇:

  • Hotel Service
  • Rate Service
  • Reservation Service
  • āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ ellipsis (â€Ļ) āϝāĻž āφāϰāĻ“ āĻ•āĻŋāϛ⧁ unspecified service āĻŦā§‹āĻāĻžāϝāĻŧ

āĻāϟāĻŋ āĻāĻ•āϟāĻŋ client-server relationship āĻĻ⧇āĻ–āĻžāϝāĻŧ, āϝ⧇āĻ–āĻžāύ⧇ Hotel Management Service central control point āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ specialized task delegate āĻ•āϰ⧇āĨ¤ āĻŦāĻžāĻŽ āĻĒāĻžāĻļ⧇āϰ simple direct interaction-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻāϰ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻāĻ–āĻžāύ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĨ¤

āĻāχ diagram monolithic (āĻŦāĻžāĻŽ) āĻāĻŦāĻ‚ microservices (āĻĄāĻžāύ) system design-āĻāϰ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤

Production system-āĻ inter-service communication-āĻ āϏāĻžāϧāĻžāϰāĻŖāϤ gRPC-āĻāϰ āĻŽāϤ⧋ modern āĻāĻŦāĻ‚ high-performance remote procedure call (RPC) framework āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻ āϧāϰāύ⧇āϰ framework āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ…āύ⧇āĻ• āϏ⧁āĻŦāĻŋāϧāĻž āφāϛ⧇āĨ¤ āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ gRPC āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āϚāĻžāχāϞ⧇ [3] āĻĻ⧇āϖ⧁āύāĨ¤

Step 3 - Design Deep Dive