13/10/2026
[English Below]
Hello mọi người!👋 Hai khách, một phòng, cùng một đêm. Đó là loại bug không ai muốn giải thích với khách hàng, và cũng chính là vấn đề mà video 𝗛𝗼𝘁𝗲𝗹 𝗥𝗲𝘀𝗲𝗿𝘃𝗮𝘁𝗶𝗼𝗻 𝗦𝘆𝘀𝘁𝗲𝗺 𝗗𝗲𝘀𝗶𝗴𝗻 này giải quyết. Video đi qua từng bước: các bảng dữ liệu, các endpoint và toàn bộ luồng booking.
Dưới đây là những điểm nổi bật:
🗝️ 𝗜𝗱𝗲𝗺𝗽𝗼𝘁𝗲𝗻𝗰𝘆 𝗞𝗲𝘆: Gửi cùng một booking request hai lần, 𝗥𝗲𝗱𝗶𝘀 vẫn nhớ key đó, nên người dùng chỉ nhận về một reservation duy nhất thay vì hai.
🏨 𝗛𝗼𝘁𝗲𝗹-𝗕𝗮𝘀𝗲𝗱 𝗦𝗵𝗮𝗿𝗱𝗶𝗻𝗴: Giữ toàn bộ dữ liệu của một khách sạn trên cùng một shard biến việc booking thành một 𝗹𝗼𝗰𝗮𝗹 𝘁𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻 đơn giản, không cần đến 𝘁𝘄𝗼-𝗽𝗵𝗮𝘀𝗲 𝗰𝗼𝗺𝗺𝗶𝘁.
📅 𝗣𝗲𝗿-𝗗𝗮𝘁𝗲 𝗜𝗻𝘃𝗲𝗻𝘁𝗼𝗿𝘆: Bảng 𝗿𝗼𝗼𝗺_𝗶𝗻𝘃𝗲𝗻𝘁𝗼𝗿𝘆 theo dõi số phòng trống theo từng room type mỗi ngày, và một 𝗱𝗮𝘁𝗮𝗯𝗮𝘀𝗲 𝗰𝗼𝗻𝘀𝘁𝗿𝗮𝗶𝗻𝘁 sẽ chặn không cho số lượng này xuống dưới 0.
📨 𝗔𝘀𝘆𝗻𝗰 𝗢̛̉ 𝗡𝗼̛𝗶 𝗔𝗻 𝗧𝗼𝗮̀𝗻: Việc onboarding khách sạn chạy qua 𝗞𝗮𝗳𝗸𝗮 và quá trình đánh index trên 𝗘𝗹𝗮𝘀𝘁𝗶𝗰𝘀𝗲𝗮𝗿𝗰𝗵 chấp nhận 𝗲𝘃𝗲𝗻𝘁𝘂𝗮𝗹 𝗰𝗼𝗻𝘀𝗶𝘀𝘁𝗲𝗻𝗰𝘆, vì một kết quả search hơi cũ thì không sao, còn double booking thì không thể chấp nhận.
Nếu bạn xây dựng hệ thống trên 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁, tất cả những điều này quy về 𝗦𝗽𝗿𝗶𝗻𝗴 𝗗𝗮𝘁𝗮 𝗝𝗣𝗔 𝗹𝗼𝗰𝗸𝗶𝗻𝗴, 𝗦𝗽𝗿𝗶𝗻𝗴 𝗗𝗮𝘁𝗮 𝗥𝗲𝗱𝗶𝘀 cho idempotency, và 𝗦𝗽𝗿𝗶𝗻𝗴 𝗞𝗮𝗳𝗸𝗮 kèm 𝗱𝗲𝗮𝗱 𝗹𝗲𝘁𝘁𝗲𝗿 𝘁𝗼𝗽𝗶𝗰 để xử lý retry.
Bạn đã từng để lọt bug double booking lên production chưa? Hãy chia sẻ cách bạn phát hiện ra nó nhé! 💬
(𝘓𝘪𝘯𝘬 𝘣𝘦̂𝘯 𝘥𝘶̛𝘰̛́𝘪 𝘱𝘩𝘢̂̀𝘯 𝘣𝘪̀𝘯𝘩 𝘭𝘶𝘢̣̂𝘯👇)
Happy learning! 👨💻🎉
-------
Hello everyone!👋 Two guests, one room, the same night. That is the bug nobody wants to explain to a customer, and it is exactly what this 𝗛𝗼𝘁𝗲𝗹 𝗥𝗲𝘀𝗲𝗿𝘃𝗮𝘁𝗶𝗼𝗻 𝗦𝘆𝘀𝘁𝗲𝗺 𝗗𝗲𝘀𝗶𝗴𝗻 video solves. It walks through the tables, the endpoints, and the full booking flow step by step.
Here is the short version of why it works:
🗝️ 𝗜𝗱𝗲𝗺𝗽𝗼𝘁𝗲𝗻𝗰𝘆 𝗞𝗲𝘆: Fire the same booking request twice and 𝗥𝗲𝗱𝗶𝘀 remembers the key, so the user ends up with one reservation instead of two.
🏨 𝗛𝗼𝘁𝗲𝗹-𝗕𝗮𝘀𝗲𝗱 𝗦𝗵𝗮𝗿𝗱𝗶𝗻𝗴: Keeping one hotel on one shard turns a booking into a plain 𝗹𝗼𝗰𝗮𝗹 𝘁𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻, so no 𝘁𝘄𝗼-𝗽𝗵𝗮𝘀𝗲 𝗰𝗼𝗺𝗺𝗶𝘁 is needed.
📅 𝗣𝗲𝗿-𝗗𝗮𝘁𝗲 𝗜𝗻𝘃𝗲𝗻𝘁𝗼𝗿𝘆: The 𝗿𝗼𝗼𝗺_𝗶𝗻𝘃𝗲𝗻𝘁𝗼𝗿𝘆 table tracks available rooms per room type per day, and a 𝗱𝗮𝘁𝗮𝗯𝗮𝘀𝗲 𝗰𝗼𝗻𝘀𝘁𝗿𝗮𝗶𝗻𝘁 refuses to let the count drop below zero.
📨 𝗔𝘀𝘆𝗻𝗰 𝗪𝗵𝗲𝗿𝗲 𝗜𝘁 𝗜𝘀 𝗦𝗮𝗳𝗲: Hotel onboarding flows through 𝗞𝗮𝗳𝗸𝗮 and 𝗘𝗹𝗮𝘀𝘁𝗶𝗰𝘀𝗲𝗮𝗿𝗰𝗵 indexing accepts 𝗲𝘃𝗲𝗻𝘁𝘂𝗮𝗹 𝗰𝗼𝗻𝘀𝗶𝘀𝘁𝗲𝗻𝗰𝘆, because a stale search result is fine while a double booking is not.
If you build on 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁, this becomes 𝗦𝗽𝗿𝗶𝗻𝗴 𝗗𝗮𝘁𝗮 𝗝𝗣𝗔 𝗹𝗼𝗰𝗸𝗶𝗻𝗴, 𝗦𝗽𝗿𝗶𝗻𝗴 𝗗𝗮𝘁𝗮 𝗥𝗲𝗱𝗶𝘀 for idempotency, and 𝗦𝗽𝗿𝗶𝗻𝗴 𝗞𝗮𝗳𝗸𝗮 with a 𝗱𝗲𝗮𝗱 𝗹𝗲𝘁𝘁𝗲𝗿 𝘁𝗼𝗽𝗶𝗰 for retries.
Have you ever shipped a double-booking bug? Tell us how you caught it! 💬
(𝘓𝘪𝘯𝘬 𝘪𝘯 𝘵𝘩𝘦 𝘤𝘰𝘮𝘮𝘦𝘯𝘵 𝘴𝘦𝘤𝘵𝘪𝘰𝘯 𝘣𝘦𝘭𝘰𝘸 👇)
Happy learning! 👨💻🎉