Chia sẻ kinh nghiệm thực chiến

Build. Deploy. Solve.
Document. Repeat.

Chia sẻ kiến thức thực chiến về Backend, Cloud, DevOps và Homelab. Những lỗi đã gặp, cách debug và giải pháp đã áp dụng.

Bài viết nổi bật

Xem tất cả
📄

Bài viết mới nhất

BOT
MSG
FREE
Telegram Bot
alert • monitor • notify
BackendDevOps

Gửi thông báo Telegram từ NestJS: alert lỗi, deploy và monitor

Tích hợp Telegram Bot API vào NestJS: TelegramModule, exception filter bắt 5xx, BullMQ job fail, app start và deploy xong — không cần thư viện ngoài.

11 phút đọc18/06/2026
LOST
DIRTY
PHTM
Isolation Level
rc • rr • for update
BackendMySQL

Race condition trong MySQL: isolation level nào giải quyết được?

MySQL có 4 isolation level nhưng mặc định REPEATABLE READ không chặn được mọi race condition. Dirty read, lost update, phantom read — từng loại xảy ra khi nào, isolation level nào ngăn được, và khi nào cần SELECT FOR UPDATE.

12 phút đọc18/06/2026
DTO
DB
Validate in Code
dto • service • not db
BackendDatabase

Tại sao không nên dùng database để validate input trong backend

Nhiều backend dựa vào NOT NULL, VARCHAR(n), UNIQUE constraint của database để bắt lỗi input. Quan điểm này sai về kiến trúc — database không phải lớp validate. Validate đúng chỗ: DTO hoặc service layer, trước khi data chạm vào DB.

10 phút đọc18/06/2026
TX1
LOCK
TX2
Deadlock
innodb • log • rollback
BackendMySQL

MySQL Deadlock: cách đọc log InnoDB và giảm xác suất xảy ra

Deadlock trong MySQL tự resolve nhưng rollback transaction ngẫu nhiên gây lỗi ở app layer. Cách đọc SHOW ENGINE INNODB STATUS để biết chính xác dòng nào bị lock, nguyên nhân phổ biến, và 5 cách giảm xác suất deadlock.

12 phút đọc18/06/2026
1
+N
SQL
SLOW
N+1 Query
orm • join • batch
BackendDatabase

N+1 Query trong ORM: cách phát hiện bằng SQL log và fix bằng eager loading

N+1 query không gây lỗi nhưng làm API chậm dần khi data tăng — ORM gửi 1 query lấy danh sách rồi lặp N query con. Cách bật SQL log để bắt, đếm query per request, và fix bằng include, batch, hoặc DataLoader.

11 phút đọc18/06/2026