API timeout nhưng server vẫn xử lý thành công thì hệ thống production sẽ xử lý thế nào?
Client gọi API tạo đơn hàng, chờ lâu quá nên timeout.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
Message queue xử lý trùng event thì hệ thống production sẽ xử lý thế nào?
Consumer nhận cùng một event hai lần do retry hoặc broker redelivery.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
Cache stale làm hiển thị sai giá hoặc sai tồn kho thì hệ thống production sẽ xử lý thế nào?
Giá sản phẩm đã đổi trong database nhưng cache vẫn giữ giá cũ.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
Chỉ còn 1 sản phẩm trong kho, vì sao hệ thống vẫn có thể bán thành công 2 đơn?
Một hệ thống bán hàng có một sản phẩm chỉ còn đúng 1 đơn vị trong kho.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
1️⃣ Lưu dữ liệu vào Database 2️⃣ Gọi sang hệ thống bên ngoài 3️⃣ Nhận kết quả rồi cập nhật trạng thái 4️⃣ Có lỗi thì rollback toàn bộ
Nhưng có một vấn đề:
@Transactional chỉ quản lý transaction của Database hiện tại.
Nó không thể rollback những gì đã xảy ra ở hệ thống bên ngoài. ⚠️
Ví dụ:
💳 Hệ thống gọi Payment Gateway và thanh toán thành công. 🌐 Response trên đường về bị timeout. ↩️ Method throw exception nên Database rollback.
Kết quả:
Payment Gateway đã trừ tiền, nhưng hệ thống của bạn lại không lưu nhận giao dịch thành công.
Tệ hơn, nếu request được retry, khách hàng có thể tiếp tục bị trừ tiền lần nữa. 💥
Bọc REST API call trong transaction còn có thể khiến:
🔒 Database connection và lock bị giữ lâu ⏱️ Transaction phụ thuộc vào độ trễ của network 📉 Connection Pool nhanh chóng cạn khi traffic tăng 💥 Remote service timeout kéo theo transaction thất bại 🔄 Retry dễ tạo ra side effect trùng lặp
Distributed System không có một nút rollback chung cho cả Database và REST API.
Thay vì kỳ vọng @Transactional giải quyết tất cả, hệ thống thường cần kết hợp:
✅ Idempotency ✅ Trạng thái trung gian như PENDING hoặc PROCESSING ✅ Timeout và Retry có kiểm soát ✅ Outbox Pattern ✅ Compensation hoặc Reconciliation ✅ Lưu lại request để có thể xử lý tiếp khi gặp lỗi
@Transactional rất mạnh trong phạm vi một Database.
Nhưng bước qua network boundary, chúng ta đã bước vào một bài toán khác.
Đó không còn chỉ là Database Transaction.
Đó là Distributed Transaction. 🧠
💬 Bạn từng gặp trường hợp Database rollback nhưng hệ thống bên ngoài đã xử lý thành công chưa?
TechCraft Official
Bạn không thể test hết mọi edge case.
Vì đôi khi… user chính là edge case.
#TechCraft #Developer #UIUX #DevLife
20 hours ago | [YT] | 2
View 0 replies
TechCraft Official
Hôm qua mình vừa hoàn thành phần 20, cũng là phần cuối của series Replication & Scaling trên Dev Insider. 🔄
Series bắt đầu từ một câu hỏi:
Điều gì xảy ra khi một Database không còn đủ nữa?
Và càng đi sâu, câu hỏi lại chuyển thành:
Làm sao giữ được “sự thật” khi Data tồn tại ở nhiều nơi?
20 phần vừa rồi đi từ những vấn đề rất quen thuộc khi scale Database đến những bài toán khó hơn của Distributed Systems.
Nhưng câu chuyện về Truth chưa kết thúc.
Bởi còn một câu hỏi khác:
Current State cho chúng ta biết hệ thống đang ở đâu.
Nhưng liệu nó có kể được hệ thống đã đi đến đó bằng cách nào?
Đó sẽ là chủ đề của series tiếp theo:
Event Sourcing & CQRS — Khi Current State không còn đủ để kể lại sự thật.
Một series khép lại. Một series mới bắt đầu. 👨💻
Và như cam kết với anh em Dev Insider:
Mỗi ngày vẫn có một bài mới.
Link trọn bộ Replication & Scaling www.patreon.com/collection/2351128?view=expanded
1 day ago | [YT] | 4
View 0 replies
TechCraft Official
API timeout nhưng server vẫn xử lý thành công thì hệ thống production sẽ xử lý thế nào?
Client gọi API tạo đơn hàng, chờ lâu quá nên timeout.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
#TechCraft #Backend #SystemDesign #SoftwareEngineering #ProductionBug
1 week ago | [YT] | 8
View 0 replies
TechCraft Official
Message queue xử lý trùng event thì hệ thống production sẽ xử lý thế nào?
Consumer nhận cùng một event hai lần do retry hoặc broker redelivery.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
#TechCraft #Backend #SystemDesign #SoftwareEngineering #ProductionBug
1 week ago | [YT] | 12
View 0 replies
TechCraft Official
Cache stale làm hiển thị sai giá hoặc sai tồn kho thì hệ thống production sẽ xử lý thế nào?
Giá sản phẩm đã đổi trong database nhưng cache vẫn giữ giá cũ.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
#TechCraft #Backend #SystemDesign #SoftwareEngineering #ProductionBug
2 weeks ago | [YT] | 4
View 0 replies
TechCraft Official
Chỉ còn 1 sản phẩm trong kho, vì sao hệ thống vẫn có thể bán thành công 2 đơn?
Một hệ thống bán hàng có một sản phẩm chỉ còn đúng 1 đơn vị trong kho.
Đây là một lỗi rất dễ bị bỏ qua nếu chỉ test happy path. Khi hệ thống có traffic thật, retry, timeout hoặc nhiều service cùng tham gia, dữ liệu cuối có thể bị lệch.
#TechCraft #Backend #SystemDesign #SoftwareEngineering #ProductionBug
2 weeks ago | [YT] | 6
View 0 replies
TechCraft Official
AI trong tưởng tượng của chúng ta một thời =)))
3 weeks ago | [YT] | 4
View 0 replies
TechCraft Official
🇻🇳 VIỆT NAM VÔ ĐỊCH — DEV INSIDER GIẢM 50%! 🏆
🎁 Code: VNTOP1
Nếu chuyển khoản trực tiếp, mức ưu đãi:
🔥 35K tháng đầu — giá gốc 69K
🔥 280K / 6 tháng — giá gốc 329K
🔥 499K / 12 tháng — giá gốc 599K
Nếu bạn đang muốn đi sâu hơn về Backend, System Design, Architecture và tư duy Senior Engineer, đây là dịp khá đẹp để tham gia Dev Insider.
👉 Patreon: www.patreon.com/cw/techcraft_official/membership
Hẹn gặp anh em bên trong Dev Insider.
VIỆT NAM VÔ ĐỊCH! 🇻🇳🏆
1 month ago | [YT] | 5
View 4 replies
TechCraft Official
🎉 30K RỒI ANH EM Ạ!
TechCraft chính thức cán mốc 30.000 followers.
Chỉ muốn nói:
Cảm ơn anh em rất nhiều. ❤️
Cảm ơn vì vẫn đọc mấy bài dài ngoằng về Backend, Database, System Design.
Cảm ơn vì vẫn vào comment tranh luận.
Và cảm ơn vì vẫn ở đây dù lâu lâu TechCraft đăng mấy cái meme hơi nhảm 😂
30K thì phải có quà.
🎁 Giảm 30% khi tham gia Dev Insider
Code: TC30K
Dành cho anh em muốn đào sâu hơn về Software Engineering, Database, System Design,... và những thứ xảy ra ngoài đời thật khi code chạy lên production.
Thế thôi.
Cảm ơn 30.000 anh em
50K tính tiếp. 🚀
1 month ago | [YT] | 6
View 2 replies
TechCraft Official
😨 Thấy @Transactional bọc cả một REST API call.
Nhìn qua tưởng rất an toàn:
1️⃣ Lưu dữ liệu vào Database
2️⃣ Gọi sang hệ thống bên ngoài
3️⃣ Nhận kết quả rồi cập nhật trạng thái
4️⃣ Có lỗi thì rollback toàn bộ
Nhưng có một vấn đề:
@Transactional chỉ quản lý transaction của Database hiện tại.
Nó không thể rollback những gì đã xảy ra ở hệ thống bên ngoài. ⚠️
Ví dụ:
💳 Hệ thống gọi Payment Gateway và thanh toán thành công.
🌐 Response trên đường về bị timeout.
↩️ Method throw exception nên Database rollback.
Kết quả:
Payment Gateway đã trừ tiền, nhưng hệ thống của bạn lại không lưu nhận giao dịch thành công.
Tệ hơn, nếu request được retry, khách hàng có thể tiếp tục bị trừ tiền lần nữa. 💥
Bọc REST API call trong transaction còn có thể khiến:
🔒 Database connection và lock bị giữ lâu
⏱️ Transaction phụ thuộc vào độ trễ của network
📉 Connection Pool nhanh chóng cạn khi traffic tăng
💥 Remote service timeout kéo theo transaction thất bại
🔄 Retry dễ tạo ra side effect trùng lặp
Distributed System không có một nút rollback chung cho cả Database và REST API.
Thay vì kỳ vọng @Transactional giải quyết tất cả, hệ thống thường cần kết hợp:
✅ Idempotency
✅ Trạng thái trung gian như PENDING hoặc PROCESSING
✅ Timeout và Retry có kiểm soát
✅ Outbox Pattern
✅ Compensation hoặc Reconciliation
✅ Lưu lại request để có thể xử lý tiếp khi gặp lỗi
@Transactional rất mạnh trong phạm vi một Database.
Nhưng bước qua network boundary, chúng ta đã bước vào một bài toán khác.
Đó không còn chỉ là Database Transaction.
Đó là Distributed Transaction. 🧠
💬 Bạn từng gặp trường hợp Database rollback nhưng hệ thống bên ngoài đã xử lý thành công chưa?
#TechCraft #SpringBoot #Transactional #Backend #DistributedSystems #Microservices #SystemDesign #SoftwareEngineering
1 month ago | [YT] | 11
View 1 reply
Load more