Airbnb System Design | Booking.com System Design | System Design Interview Question

Поделиться
HTML-код
  • Опубликовано: 6 сен 2024

Комментарии • 257

  • @rohitkhurana7424
    @rohitkhurana7424 4 года назад +52

    Very nice work brother..it helped us in building our system :) gratitude

    • @codeKarle
      @codeKarle  4 года назад +2

      Glad that it helped :)
      Which system/which company you used this in?

    • @rohitkhurana7424
      @rohitkhurana7424 4 года назад +4

      @@codeKarle an homestay app we soon are going to launch :) we are a startup.

    • @codeKarle
      @codeKarle  4 года назад +4

      That's great to know 🙂

    • @sumitbuddy
      @sumitbuddy 2 года назад

      @@codeKarle brother do you contacts you share i am from non it but deeply wanna to made it.

    • @Whatevername74
      @Whatevername74 Год назад +4

      @@rohitkhurana7424 did your start up come out?

  • @aniruddhkhera510
    @aniruddhkhera510 2 года назад +24

    Great videos on system design Sandeep. Thanks!
    I have one concern about the Airbnb design. You have used Kafka for multiple things and few of them don't really require or would be actually a not-so-good design.
    1. Hotel onboarding: This hotel onboarding wouldn't really require an async service as I don't see this system as write-intensive. A simple sync REST API should work.
    2. Booking of a room: The booking of the room by a user & removing the room from the available list should be consistent. I think here also Kafka's use should be avoided.
    In both cases, immediate reflection to the other users should be handled by a write-through cache policy. Let me know your thoughts. Thank you!

    • @rjarora
      @rjarora 2 месяца назад

      1. Why is Kafka not a good choice? There can be many workflows that we can trigger whenever a hotel is onboarded, like sending a notification to customers, advertisers etc. All of that can be decoupled into a separate service and the service can consume from Kafka

  • @cbest3678
    @cbest3678 3 года назад +15

    Really great video : Have some doubts below
    - So how are we storing available table. Are we going to store for 365 for each hotel . That will be inefficient.
    - Which service will pull data from hadoop cluster? once the analysis done from hadoop cluster aren't we storing it in Analytic DB?
    - Should not we store images first to s3/gcs then later cdn?

    • @harshasarikonda5078
      @harshasarikonda5078 7 месяцев назад

      Excellent points. I had the same question. I think we shouldn't write images directly to CDN. We will store them in an object storage and CDN will cache it based on usage of the files geographically.

    • @ayushjaiswal2085
      @ayushjaiswal2085 5 часов назад

      In case anyone reads it now,
      I believe we are anyways dividing the entire geography into parts in terms of data centers so it won't be exactly a single table populating the data for all the hotels and its room types for 365 days.
      It will be more like -
      If I divide the entire geography into 4 parts where each part will have a separate database, so available_rooms table can contain 1 million/4 = 250000 hotels * 10 room categories * 365 days = ~750 million rows. Ofcourse this data will be sharded based on hotel IDs so it will be separated into separate shards.

  • @mayanksood587
    @mayanksood587 Год назад +2

    Very well explained.
    Just one point of discussion here from my end:
    Can we create some inventory-service and keep availability there instead of booking-service, this will help in well defined boundaries and responsibilities.
    Booking service should just keep the booking information and when booking is done, it can update the availability in one single distributed transaction.
    Let me know if there are any challenges/problems in the above said approach.

  • @shinysingh1797
    @shinysingh1797 2 года назад +18

    Great video. I have one question though. How are you generating/updating the available_rooms table? Where's that data coming from to begin with? Thanks!

    • @yongjiaoyu3770
      @yongjiaoyu3770 2 года назад +2

      That's probably from UI/App for hotel to hotel svc right?

  • @akarkessel
    @akarkessel 3 года назад +4

    @CodeKarlw I like this design, BUT:
    - Using a RDBMS for performing the booking lock may not be appreciated by all interviewers: I proposed a very similar architecture in a sr backend engineer interview @ Uber and I've been rejected with the motivation "He used a RDBMS for performing the reservation lock". It would be interesting seeing an alternate implementation. (Redis lock?)
    - The service crash scenario is completely absent in the design, specifically a crash of the booking service after a payment has been successfully performed but before the booking status update
    - How do you maintain the datacenter database aligned? Shared kafka topic consumed by an align service?
    Thank you for your work anyway!

  • @kanaiyapatel5691
    @kanaiyapatel5691 4 года назад +5

    Superb Sandeep. I am looking for Coupon management system design. its commonly asked across companies. On internet, there is not a single design for this.

  • @rishabhgoel1877
    @rishabhgoel1877 2 года назад +1

    Whenever I see your videos, it feels like I'm sitting in ofc design review meeting with a senior engineer as you don't throw fancy words, really appreciate your content _/\_

  • @revatipandit1220
    @revatipandit1220 4 года назад +22

    Can you please create a video focusing only on the "search hotels". I am sure that will be interesting

    • @jayantlvsv
      @jayantlvsv 3 года назад +1

      I'm wondering how we can get quick Search results with filters like available_quality, date_range and room_classification.

  • @protyaybanerjee5051
    @protyaybanerjee5051 3 года назад +9

    I don't understand a few points here -
    1. How is the available quantity only a function of room_id. If we are accepting date range in POST /book, it should be accounted for in the schema.
    2. Assuming, we have that in the schema, we should also need to have an efficient query that checks for availaibility based on these three criterias.

    • @ayushjaiswal2085
      @ayushjaiswal2085 5 часов назад

      You can probably utilize range based locks while reading the available state and creating the booking entry.

  • @VindyDays
    @VindyDays 2 года назад

    I really like your unassuming way of explaining the essence of your topic. The only suggestion I make is that make it a little more relaxed and casual. I would like to see the tension fade away.

  • @balasravandindukurthi4702
    @balasravandindukurthi4702 Год назад +1

    Great video. One thing i that i found missing in this design is :
    When admin of hotel adds new rooms -> there is no flows that updates rooms availability in DB of booking service
    Please let me know if i i'm missing anything on this

  • @abhishekkumarmishra8398
    @abhishekkumarmishra8398 2 года назад +1

    One of the most complete and perfect system designs tutorial I have seen. The breadth and detail is perfect as an HLD.

  • @deathstrokebrucewayne
    @deathstrokebrucewayne 4 года назад +16

    A wonderful playlist to binge watch :D More power to you Sandeep :)

    • @codeKarle
      @codeKarle  3 года назад

      Glad that you liked it :)

  • @NeerajDhariwal
    @NeerajDhariwal 5 месяцев назад

    Thanks for the lucid explanation. I have a couple of questions:
    1. How do we maintain consistency in this design. If a room has been booked, it should immediately be blocked. Using Kafka would introduce certain delay, during which another person can book the same room.
    2. Can't we use MongoDB for hotel database? A hotel has complex properties, like reviews, amenities etc. Don't you think a no sql database would better fit the use case here?

    • @mrharshrajpal
      @mrharshrajpal 3 месяца назад

      we can always have hotel/room metadata in mongo db

  • @aakashchandwani293
    @aakashchandwani293 3 года назад +2

    This channel should have millions of subscribers.. you are highly under rated. Keep doing the good work

    • @codeKarle
      @codeKarle  3 года назад +1

      Thanks!!
      Can't get there without your support.
      Do share the channel with your friends/colleagues and hopefully we'll get there :)

  • @zheli508
    @zheli508 4 года назад +6

    Definitely the best system design video I have seen! very detailed explanation of each part

    • @codeKarle
      @codeKarle  4 года назад

      Thanks!! Glad that you liked it!

  • @saurabhchoudhary9260
    @saurabhchoudhary9260 3 года назад +3

    One of the best system design videos I have ever seen. Hats off to you and the mechanism you told for handling the case of reserving hotel bookings

  • @the_sweet_heaven
    @the_sweet_heaven 3 года назад +4

    what if customer booking for hotel and at the same time hotel delist their room. Since the databases are different it would definitely create inconsistency. How are you planning to handle that ? Will you be confirming the room to both the databases ?
    User generally spend 5-10 minutes to make the payment, and in between if the hotel is delisted then how it is handled ?

    • @mrharshrajpal
      @mrharshrajpal 3 месяца назад

      the booking table will have an entry with reserved status for that room_id, the hotel staff wont be allowed to delist

  • @ano0810
    @ano0810 3 года назад +8

    Great video Sandeep. Quick tip for Product Managers looking at this - I think the first 15 minutes and then 32:20 onwards is pretty relevant.
    Wanted your thoughts on something:
    The safest way to interact between the booking service and the search service would be to have a single DB where locks are taken on the respective fields when a booking is made. This would guarantee that no room is double booked ever. That approach seems very very 90s and theoretical. But is there ever a case in your design that the delay between syncing the search and booking service through Kafka can cause a double booking scenario. Are there any other cons you could think about this architecture?
    Thanks in advance.

    • @balasravandindukurthi4702
      @balasravandindukurthi4702 Год назад +2

      Hello, we are using only one DB for booking management. There will never be a case where there would be a double booking. there can be a case where in search experience hotel is shown as available but on trying to book - it might be shows as unavailable. But this should be in only very minimal cases

  • @sagartyagi5048
    @sagartyagi5048 3 года назад +1

    Great turotial. The one thing which I feel is missing : Once the hotel owner adds his hostel to the service, there should be some Map segment kind of thing that should happen in order to map a hotel to a place. I mean this can't be a general search like Amazon search, if a user searches for a place, how're we going to show all the hotels in that place? For me the segment approach which you showed during Maps tutorials would work best here.

    • @vineetbhargava4141
      @vineetbhargava4141 3 года назад

      That's a great suggestion. One possible solution without breaking this design is to add some tags while adding the hotel and in that service we could also suggest some tags to the owner so that if someone searches hotels near Parvati river we get this suggestion.

  • @mukeshbarman
    @mukeshbarman Месяц назад

    For the issue where TTL expires before the Payment success message, why can we set the TTL long enough (more than Payment service SLA) for us to be absolutely sure the payment will never be successful later.
    Con is definitely that the room is reserved for more than it should be blocked for, but we definitely reduce some complexity there.
    Kudos for the effort

  • @bibinvninan8057
    @bibinvninan8057 28 дней назад

    Thanks brother .. it really helped.. especially hatsoff for explaining each of the implementation, requirement, user case etc...
    Please make next videos more lengthy so that beginners can understand more details.

  • @theghostwhowalk
    @theghostwhowalk 4 года назад +24

    Thanks for great System design series. One doubt w.r.t. DB design here:
    I assume search API will look like search(lat ,long, startdate, enddate, # of rooms) to return list of hotels in the given lat long area. Perhaps we can use Quad Tree type data structure here if we want to reduce latency or update booking ASAP.
    (1) Available_rooms table has a field for available_quantity, Will it carry 365 entries for date column for say 1 year? If not what is more efficient way to store this info and perform fast search. Also don't you think PK should be room_id+date above for uniqueness. Please correct me if wrong.
    and then (2) How are we connecting Available_Rooms with hotel.

    • @Legendary-Akshit
      @Legendary-Akshit 3 года назад +4

      @theghostwhowalk - I had exactly the same concern as "(2) How are we connecting Available_Rooms with hotel." - Typically there should be an association of hotel in the 'Booking' DB as well. Else how for a given date range would a list of hotels appear based on room availability.
      @codekarle - Sandeep can you help out here ?

    • @kvv6452
      @kvv6452 2 года назад

      @@Legendary-Akshit Yes, booking table should be connected with hotel id rather than room id

  • @srikantd6054
    @srikantd6054 3 года назад +1

    Nice Explanation , I am having one doubt here , From Hotel Service Storing the data into one MYSQL Cluster, and from Booking Service Storing the Data into Another MYSQL Cluster, then How do they in sync ? I am mean Hotel Service data and booking service data in DBS.

  • @archit_singh15
    @archit_singh15 2 месяца назад

    thanks for the video!
    we should also talk about how we use semaphores when we access shared resources in a microservice setup.

  • @gnanstar
    @gnanstar 4 года назад +2

    Contentful video,very nicely explained .. Basically i was looking out for scenario , where multiple people select the same hotel almost at the same time , or like how we do solve the race condition in such a huge system ..? by avoiding same booking with multiple people.

    • @MonisYousuf
      @MonisYousuf 3 года назад +1

      The property ISOLATION of ACID properties deals with that. So, if you set the Isolation level of a transaction (T1) to be Serializable, no other transaction would be able to write into the tables involved in the first transaction (T1). So, whichever transaction starts first, that transaction will end first. In the case of a booking scenario, let's say, T1 and T2 are two transactions booking the same room for same dates at the same time, If T1 starts first, in the Serializable mode, then T2 will have to wait until T1 completes. When T1 completes, T2 sees that there already exists a record which it is trying to book, so it will have to rollback. In that case, you send a message to the user, that someone already booked it.

  • @vishwas8110
    @vishwas8110 2 года назад +1

    Very good video. Ref the last part in terms of dividing dcs by region, it may not work if a user in USA wants to book say a hotel in India. You may want to rethink this to be an active active infrastructure with multi leader replication and IP any casting for low latencies.

  • @elachichai
    @elachichai 3 года назад +1

    Excellent video overall.
    Automatic scalability: How much is the application developer controlling it (scripts, architecture, etc) and how much is the vendor component/cloud service provider (thresholds, metrics, etc) itself doing it?
    I see a component re-usage pattern. User Service, Hotel/Cab Service, Booking Service, Search Service - Elastic Search, etc across your videos. Great to see the modularity being put into action.
    You talk about trade offs and justify design choices which is a good but also reinforcing about first principles of components. Much more than an interview question which reflects knowledge and experience.
    Only disappointing thing is it is rendered by poor voice recording. Sigh!

  • @mostaza1464
    @mostaza1464 Год назад

    Your videos are by far the best system design resources I have found on this platform. Thank you for these valuable materials!

  • @binitdash9334
    @binitdash9334 Месяц назад

    Good video. Just one concern, how come room id will have quantity, I think room id represents one room and quantity should always be one. We should have another table which maps room id to booking id.

  • @Hangar1318
    @Hangar1318 2 года назад

    Love it how your mic makes you sound like you're speaking from the moon. 😂 Thank you for the video.

  • @gurjarc1
    @gurjarc1 2 года назад

    @23.07, i guess we need to mention we need to use which isolation to achieve. I guess check and set or serailizable isolation will help in race condition. Serialiazable isolation can be used with or without locks. it is better to use serializable shapshot isolation (SSI) to get the job done without using locks.

  • @krupaharan12345
    @krupaharan12345 20 дней назад

    Thanks for article.
    Live updates to the Hotel will get published to Kafka and it feeds into Elastic Search. But my question is, Elastic Search only holds live updates or its like a replica of Hotel DB ?

  • @KrishnaSharma-vl4re
    @KrishnaSharma-vl4re 4 года назад +4

    What happens if the booking is for 10 days? It will result in 10 queries to available rooms table to find if the room is available for that day ?

    • @codeKarle
      @codeKarle  4 года назад

      No. We'll do one query where we fetch the data for all the dates. Batch query is usually a better idea than multiple queries

  • @shailytyagi4232
    @shailytyagi4232 2 года назад +1

    Your videos are very helpful! Please consider uploading a low level design series as well.

  • @hardikshah9182
    @hardikshah9182 3 месяца назад

    Very nice video. very thorough and provided all the necessary information in very easy to understand way. great work.

  • @vedanta341
    @vedanta341 4 года назад +3

    Thanks for the great explanation.
    Question: Why do you suggest the approach of setting the boolean "isActive" to false, to delete a record rather than using the SQL delete operation?

    • @codeKarle
      @codeKarle  4 года назад +9

      It's generally not a good idea to delete something from the Database. If you need that information for auditing, financial reporting, or just debugging, it'll be helpful to have that information in our DB marked inactive. Additionally delete queries so have a risk of deleting something accidentally in case of bugs, so i'll always prefer to have a delete/isActive flag and filter the active records in get queries.

  • @anilkatakam2738
    @anilkatakam2738 2 года назад +1

    Its amazing how you have utilized Kafka to interact with different systems. Can you clarify- what if kafka is failed? how are we handling that

    • @vishwas8110
      @vishwas8110 2 года назад +1

      Then all hell breaks loose. It’s assumed Kafka has high availability with partitioning replication

  • @mkbhd2
    @mkbhd2 3 года назад

    First time on your channel, it's pretty good and easily articulated. One small suggestion is to take a break for few seconds, you are not giving any stops.

  • @shubhamchandra9258
    @shubhamchandra9258 2 года назад

    How we can allow booking rooms of different types - Booking table: [booking_id, booking_status, user_id, invoice_id] BookingItem table: [item_id, booking_id, room_id, no_of_rooms, start_date, end_date]. A Booking can have multiple BookingItems. One booking item for each type of room. The scenario is similar to e-commerce app where an Order contains multiple Items, each item is (Product, quantity). Room is similar to a product here.

  • @mugdeeify
    @mugdeeify 2 года назад +1

    Thank you for the insightful video. Very well delivered. Question though, Where do you place users on the waiting list, who have reserved a fully booked hotel that suddenly becomes available?. Do you need a queuing system or they can be placed in the archival

  • @SuperAn0nymus
    @SuperAn0nymus 2 года назад

    Great video! I think you missed a point where the hotel db needs to be updated with decremented available rooms when someone books a room via booking service, to technically there should be a room--updates src talking to kafka which decrements the available rooms

  • @tsaregrad
    @tsaregrad 3 года назад +1

    Availability information should come together with search results - you need to know price and number of available rooms beforehand.

  • @abhishekdhillon7110
    @abhishekdhillon7110 9 месяцев назад

    the way you have linked CDN to hotel service is wrong. The way CDNs work is they have edge nodes (the one that you have represented) and origin servers. The CDN is always seeded by the origin server when the client requests the data. You don't upload to CDN or make any modifications to the CDN as shown in the diagram.

  • @ameyjain3462
    @ameyjain3462 2 года назад

    Another way to compare database is based on hwat is your query pattern and how you can use the functionality of database.

  • @ZeroInfinityCoder
    @ZeroInfinityCoder Год назад +1

    @codeKarle
    I think if we need two type of queries to be supported by cassandra. let say, historical booking for a particular user and also historical booking for a particular hotel, then we need to support two cassandra cluster having same data but partition key will be different , in one it will be user_id and another hotel_id so that both can be supported.
    Let me know your thoughts or anyone else who also things the same

  • @abhinee
    @abhinee Год назад

    have cache on top of mysql and use lazy loading for EC, instead of kafka for search service

  • @AnkurMaheshwari-el4jd
    @AnkurMaheshwari-el4jd Год назад +2

    @Sandeep : Nice discussion. Apart from concerns(which people have already pointed out), that if we connect booking and new hotel posting with kafka, the system will become near real time for search rather than real time which I see can be improved by using SQL DB only to power the search. Also, Kafka has some retention period like 7 days , so powering elastic search from Kafka rather than the SQL DB will result in inaccuracies in listing the hotel. please let me know your thoughts on that.

    • @chippapruthvi2773
      @chippapruthvi2773 8 месяцев назад

      I think here the intention to use Elastic search is to support Fuzzy word search and for Word search Elastic Search DB is best as it optimised for that and gives results in best Time complexity. Also, we can do it with SQL DB but the point here is scalability and when more than a 1M concurrent users tries to search at same time SQL will be overloaded. Also, kafka retention period is nothing to do with elastic search it only retains events produced.

  • @hannahcora5939
    @hannahcora5939 3 года назад +1

    Greate video! Can anyone explain to me why we need the canssandra to store the bookings that have already happened? What is reading from it?

    • @codeKarle
      @codeKarle  3 года назад

      That is for book-keeping purpose and incase a user wants to see an older booking, which happened let's say 2 years ago. That become is not being edited, so you don't need any ACID compliance there.

  • @shrinikethr3797
    @shrinikethr3797 4 года назад +1

    Amazing Video thanks for sharing this ,Can you please add Summary for all your design videos , I see you have added for a few which gives a lot of sense . Thanks Again for all the great work 👍👍👍

    • @codeKarle
      @codeKarle  4 года назад

      Thanks!!
      Yeah, that is work in progress. Other summaries would be live soon in a couple of days at www.codekarle.com/

  • @govi__y
    @govi__y 4 года назад +1

    Very well explanation. I liked the way everything is explained starting from overall architecture to smaller services. Looking forward for more such videos.

  • @ShitalJoshi
    @ShitalJoshi 4 месяца назад

    You haven't mentioned how booking service gets available rooms and room id information. Also available quantity in available rooms is heavily dependent on booking start and end date.

  • @talivanov93
    @talivanov93 4 года назад +1

    Great video, thank you!
    Just a question -
    1. Why don't you use Redis for the other services too?
    2. Why don't you use Casandra DB for Hotel service too?
    3. The arrow from my SQL cluster to archival service is strange to me. How does MySQL send messages? It wouldn't be better that after booking service is done booking then send message \ HTTP request to archived service?
    4. The archived service has only one purpose, just to insert data to Cassandra. Isn't it overhead and the logic should be in the booking service?
    Thank you again :)

    • @codeKarle
      @codeKarle  4 года назад +8

      1. Why don't you use Redis for the other services too? - Usually I prefer to do this when the read-writes ratio is very high. If there are a lot of writes then there is not too much benefit of caching. Usually these decisions would be data driven based on real access patterns.
      2. Why don't you use Casandra DB for Hotel service too? - Cassandra could be used here, but I believe on this kind of dataset, you'll have lot of random queries happening, to fetch hotel by id, to fetch hotels in a region, or to fetch hotels managed by a user, etc. This would be for a lot of internal tools mainly that every company has, which we did not go over int he video, but those tools are always there. Now that query pattern is not optimal for Cassandra and we'll need a lot of data duplication to build those tools, Mysql does a better hob there.
      3. The arrow from my SQL cluster to archival service is strange to me. How does MySQL send messages? It wouldn't be better that after booking service is done booking then send message \ HTTP request to archived service? - Those arrows are just to call out reads and writes. I know it's a bit cluttered there, but mysql is not sending any messages.
      Archival usually should be a bulk batch job, and not done for each booking, and it makes it more optimal, since you can run this at low load times though there is nothing stopping from doing it the way you are suggesting as well.
      4. The archived service has only one purpose, just to insert data to Cassandra. Isn't it overhead and the logic should be in the booking service? It could be the same service in a small scale system, but at scale this would cause problems. Think of it in a way that when archival begins, it would probably shoot up to near 100% CPU utilization for a few seconds while it is running unless you are throttling. If thats in the same service, it'll impact other features of booking service. If you have it as a separate service, you can run that out of just two machines/maybe one docker container only, while booking service can scale as per your bookings traffic.
      Hope that answers your questions :)

  • @prashantsalgaocar
    @prashantsalgaocar 2 месяца назад

    Also do not see an api gateway in front of the lb which could then load balance the distributed services..

  • @joshitamishra3949
    @joshitamishra3949 2 года назад

    Best system design video i have watched till now, i was able to relate to most of the explanation given for choosing the right storage at right place. Precise and to the point.

  • @prashantsalgaocar
    @prashantsalgaocar 2 месяца назад

    For hotels data store images in s3 or any blob storage and metadata in MySQL with ref to s3 as a link and then have cdn pull data from s3 which can be accessed via the user app along with metadata for the hotel. Not sure why cdn is being used as store for images in this design..

  • @subhedarsanchay
    @subhedarsanchay 2 года назад

    Simple and Nice video. Loved it. However, it did not cover searching of hotels in a radius. It would have been helpful to see how that might have been done.

  • @coolvipool
    @coolvipool 3 года назад

    Very nicely explained from high level to low level. Lots of concepts covered in the whole session.

  • @vinoda88
    @vinoda88 3 года назад +1

    How is it assured that the second SQL server in the booking service has the same details as the first one in the hotel service?

  • @AnkitChaudhary2601
    @AnkitChaudhary2601 3 года назад +1

    @codeKarle Shouldn't we also talk about about scenario where two hotel broker trying to book same room. For eg: AirBnB and MakeMyTrip. What should be source of truth in this case?

    • @codeKarle
      @codeKarle  3 года назад +1

      Great question. But more than a tech problem, it's a business headache to manage, so all these companies so a slightly different thing.
      Usually if the hotel has 50 rooms, they would give off 10 to AirBnB, 15 to MMT and so on. Mostly these companies pay for these rooms upfront even if there is no customer there to get those rooms all for themselves. The benefit it gives is that each of these companies say AirBnB now has exclusive 10 rooms that it works with and takes care of booking, and they could play with demand-supply maths and change the pricing to make more money.
      That being said, we could still build the system for what you are recommending. It's not a big change from what we have here, but the solution highly depends on the tech capabilities of the hotels, and who maintains the master list of inventory for each hotel.

  • @rainenguyen3349
    @rainenguyen3349 Год назад

    Thank you very much for sharing your knowledge. I have a question regarding search: hotel inventory is associated with time. For example, this particular hotel does not have room now but will have room(s) in the next 2 days. How do you store data in your ElasticSearch to allow searching for rooms given the checkin, checkout time?

  • @rastogideepika
    @rastogideepika 2 года назад

    Very good video and extremely simple explanation, connecting us to the internals of the real world hotel booking.

  • @mayursoni346
    @mayursoni346 3 года назад +1

    thanks for detailed explanation. I am new newbie to system designs - Could you please clarify if Hotel Service, Search Services, booking service,.etc. are different EC2 machines and there would be multiple load balancer supporting each service to scale? thanks in advance.

    • @codeKarle
      @codeKarle  3 года назад +1

      At a very high level, kind of yes.
      They are different services, and by that it means they are different logical components, and it's better to assume that they would be running on different hardware.
      But that's not a requirement. You can have two services running on one machine, and specially with the increased adoption of container based technologies, it's more common to have multiple services running on same machine.
      By machine I here mean both VMs and physical hardware, and in case of EC2 you could still have two different EC2 VM instances running off the same physical hardware and multiple containers of your services running on each of those EC2 VMs.
      For the Load Balancers, you could have multiple loadbalancers supporting each service, or you could choose to use a Service Mesh which is a more common approach in the container based world.

  • @commondev2595
    @commondev2595 3 года назад

    One of the great System design videos out on youtube. Keep up the good work..

  • @ravindrajonwal580
    @ravindrajonwal580 4 года назад +1

    very nicely explained. Thank you
    Question: why can't we rely on our timer in payment service rather than getting notified from redis?

    • @codeKarle
      @codeKarle  4 года назад +1

      We could do that too. There is nothing wrong in that approach as well.
      I would prefer the redis approach, reason: since we have an easy way to implement this and it's widely used & stable, then why bother building & maintaining a timer.

  • @mohajeramir
    @mohajeramir Год назад

    I wish he talked a little about the locality table. Every country has attributes for locations. US as zip code, Canada has postal code, etc. How can a table be flexible for this and at the same time provide efficient query o
    n these attributes?

  • @priyankapyati4648
    @priyankapyati4648 2 года назад

    Explained very well. Please make video on online pizza delivery app system design or online shopping system design.

  • @protyaybanerjee5051
    @protyaybanerjee5051 3 года назад +5

    For DC replication , what happens if the person connects to the R2 DC (from US) and tries searching for hotels in region which is NOT maintained on the data-store for that region ?
    The whole data layer needs to be replicated, I think

    • @rijuagarwala
      @rijuagarwala 3 года назад

      Have the same question

    • @jayantlvsv
      @jayantlvsv 3 года назад

      All the data will be replicated to each data center that was opening statement. Partition data just acts like multi-master. But data is still replicated. Other DC can act as slave, where reads can happen.

  • @vineetsharma8270
    @vineetsharma8270 5 месяцев назад

    Hello I am new to system design and learnt most of what was explained. I still need some help on archival service and cassandra. Why do we need an archival Service?

  • @apshiva
    @apshiva Год назад

    Thank you for this presentation. It is well explained.
    If possible, request to add ticket booking app design like bookmyshow, please.

  • @TusharArora71
    @TusharArora71 Год назад

    Great content but I think an important part is missing here that how the data is being created for available_rooms tabel for every date in future ? For how many days in future shall this data be there and how will it be generated ?

  • @Tarunv26
    @Tarunv26 3 года назад

    The content is awesome, really helpful to me. Please make videos on geographic information systems like- Google Earth, Street View, Voice recognition systems like- Siri, Alexa

  • @orvillepinto3553
    @orvillepinto3553 4 года назад +1

    If you could add the most important api calls for each service in the design diagram , it would be helpful especially for interviews. Thank you

    • @codeKarle
      @codeKarle  4 года назад

      Great suggestion! We'll add that in the future ones.

  • @jiaweiwu9857
    @jiaweiwu9857 3 года назад +1

    Hi Karle, I have one question. Will Kafka only contains all the hotel/room data, same as a database? If we treat Kafka as a source of truth for the input of search service, and some room data that exist in the database are not in Kafka, the search result will always miss that part of room data. In addition, the Kafka data will be expired and evited in 7 days, which means some room data will not be able to search by end-user to book, even though they are available, just because it does not exist in Kafka, and we treat Kafka as the source of search service. Could you help to clarify it? Thanks.

    • @Rahul1703punyani
      @Rahul1703punyani 3 года назад

      It isn't Kafka where we keep this data. We will keep this in ElasticSearch. Kafka is just a message broker and passes all the info from sql db to elastic search for better search capabilities.

  • @sumitkumar03
    @sumitkumar03 Год назад

    All your videos are very helpful. Thank you.
    There seems to be an issue in Booking DB(I might be wrong. If so please clarify). It has a table called Available_Rooms having columns Room_Id and Available_Quantity. Now Room_Id is unique for each room. How can I say that Room_Id 123 has available quantity 20? So instead of Room_Id may be we should use hotel id over there.

    • @harwinderjit5903
      @harwinderjit5903 Год назад

      i agree
      The concept of room-id and qty associated with it seems flawed

  • @jayantlvsv
    @jayantlvsv 3 года назад

    Ready nice video detailed explanation. I'm wondering how we can get quick Search results with filters like available_quality, date_range and room_classification. Please make a video on this.

  • @jlokj
    @jlokj 3 года назад +1

    Can you prepare the same for movie booking system? It looks similar to this, but in movie booking, user has the freedom to choose which seat to book. The DB schemas might be different.

  • @tigeruppercut7
    @tigeruppercut7 3 года назад +1

    @18:45, why would there be available_qty for a given room for a given date. Doesn't make any sense at all.

  • @tigeruppercut7
    @tigeruppercut7 3 года назад +1

    Whats the drawback of having two separate databases for hotels and booking? Can you mention problems that might arise due to consistency issues and how to resolve them?

  • @stkmgr00
    @stkmgr00 2 года назад

    excellent video. very informative and useful. Thanks and kudos to Sandeep.

  • @SaiPavanPothuri
    @SaiPavanPothuri Год назад

    He is mentioning about redis callbacks to use when we didn't receive payment within specified time.
    But what if the redis itself is down for sometime ? ( as redis is in-memory key value store )
    How are we going to make a callback which will mark the booking status as cancelled and increments the available room count.

  • @mayankgupta4365
    @mayankgupta4365 4 года назад +2

    The availability room table just has a date table. I did not understand, how were you able to book for date range.

    • @codeKarle
      @codeKarle  4 года назад +1

      If you think of range from 1-Jan to 3-Jan as three different requests coming for 1-Jan, 2-Jan and 3-Jan, you should be able to make that work, with the current structure easily.
      Now it's just about building it for each of the days in that range, and doing this in one request, which can be managed from the code+queries.

  • @cakec9
    @cakec9 3 года назад

    i love you man. Your videos help me a lot in my prep. Keep it up!!

  • @ZhiHan
    @ZhiHan 4 года назад +1

    Very nice design presentation. Question: why do you use kafka instead of just RPCs, say, between the hodel svc and booking svc?

    • @codeKarle
      @codeKarle  4 года назад +6

      To answer it in a generic way, lets say Service A is calling Service B for something.
      Now if A needs the response of B to proceed further with what it was doing, or if they collectively form a Transactional System, then we can use Rest/RPC/any syncronous method. But wherever A does not need the response of B, and this is more of an Info that B needs to do something on, then I would rather make it an Async thing and keep any queueing solution like Kafka in between.
      Async RPC/Async Rest could be used, but then it has it's own set of complications like who does the retry, what if server B is down, circuit breaking, sudden bursts in traffic, etc, and Kafka is taking a lot of that complexity away.

  • @anirbanroy1524
    @anirbanroy1524 4 года назад

    Your videos are really great for improving architectural concepts.

    • @codeKarle
      @codeKarle  4 года назад

      Thanks!
      Glad that you liked them.
      Do share these with your colleagues :)

  • @Clavicade007
    @Clavicade007 7 месяцев назад

    Amazing walk through. Thank you making this video.

  • @akshaybankar2756
    @akshaybankar2756 2 года назад +1

    How does checking for room availability work from your design? We could have multiple bookings for the same room for different dates.

  • @Zeeshanadg
    @Zeeshanadg 3 года назад

    Great video. Just wanted to check at which point the Actual Room is assigned to a booking, eg 12A, 12B etc.

    • @codeKarle
      @codeKarle  3 года назад

      Maybe a bit too late to answer this, but this would happen after the acknowledgement for payment has been received.

    • @architgupta4087
      @architgupta4087 3 года назад

      Rarely the specific room number is assigned at Booking time. You just get a confirmation about a King/Twin/Double room and later when you arrive at the property you get to know 12A/12B/3A etc.

  • @gamervihaan772
    @gamervihaan772 3 года назад +1

    I have a concern here. We cannot search for hotels from ES cluster. We need real-time information about the hotel rooms inventory for searching. So hotel search should come from you booking my sql cluster. We can use cache with a small TTL for search patterns though. Thoughts?

  • @BondhanNovandy
    @BondhanNovandy 2 года назад

    Thanks for sharing. I have questions:
    - Is the user service is together located in Booking service?
    - I guess better to have noun in the API design, e.g. booking instead of book. WDYT?

  • @mufizshaikh7450
    @mufizshaikh7450 3 года назад +1

    how do deal with concurrency? two users trying to book the same room. first user from 3rd to 8th and second from 6th to 10th. how this situation will be dealt with if they are trying to book at the same time?

  • @knight0856
    @knight0856 3 года назад

    Thanks Sandeep ! One request, can you create one design tutorial on Rate limiting !

  • @sekhars2073
    @sekhars2073 9 месяцев назад

    Great explanation and elaboration on the design.

  • @mysterygirl191
    @mysterygirl191 3 года назад

    Superb explanation .. thank you for this . One question do you have more explanation on Apache Kafka and Redis as separate topics ? It will be really helpful.

  • @Chesstreamer
    @Chesstreamer Год назад

    Well explained , to the point explanation , thanks a lot !

  • @AbdelhameedG
    @AbdelhameedG 2 года назад

    Thank you very much, that was enlightening, God bless you.

  • @souviksen6071
    @souviksen6071 4 года назад

    This is an awesome explanation.
    Requesting you to please prepare one system design video for Flight Ticket booking system also.

    • @codeKarle
      @codeKarle  4 года назад

      That would be very similar to this one, just that in that scenario, instead of hotel being the primary entity, it would be a flight ticket. Rest most of the things would remain very similar to Airbnb, be it the search flow, be it the booking flow, be it the analytics.
      One difference though would be the way we interact with the third parties(Airlines) and do reconciliation. We'll try and do a video on that, but that might take some time :)

  • @vidhyasridhar7467
    @vidhyasridhar7467 2 года назад

    I am trying to understand the real need Kafka here. Can we just do the same with those two seperate MySQL DB and the corresponding services?

  • @sergeykuznetsov3249
    @sergeykuznetsov3249 Год назад

    Thanks for the video, I do not quite understand is HotelService database will have the same data as in ES Cluster?