āϰā§āĻāĻŽā§āύā§āĻĄā§āĻĄ āĻšāĻžāĻ-āϞā§āĻā§āϞ āĻĄāĻŋāĻāĻžāĻāύ āĻāĻŦāĻ āϏāĻŽā§āĻŽāϤāĻŋ āĻā§āϰāĻšāĻŖ (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-āĻāϰ āĻŦāĻžāĻāϰā§āĨ¤
Hotel-related APIs
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
Room-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
Reservation 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
āĻļā§āώā§, â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] āĻĻā§āĻā§āύāĨ¤