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
BullMQ Job stalled với ElastiCache dù Redis vẫn chạy
Phân tích nguyên nhân và cách khắc phục lỗi BullMQ timeout, Job stalled khi dùng AWS ElastiCache (Redis).
Xpenology trên Proxmox VE 8.2.4 với passthrough HDD
Hướng dẫn cài đặt Xpenology DSM 7.2.1 trên Proxmox VE 8.2.4 và cấu hình passthrough HDD để đọc SMART thông qua passthrough.
Resize EC2 EBS volume và mở rộng XFS không mất dữ liệu
Các bước mở rộng EBS volume và filesystem XFS trên EC2 Ubuntu một cách an toàn.
Bài viết mới nhất
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.
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.
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.
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.
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.