Error Handling trong Node.js: Bắt lỗi đúng cách
Một request lỗi làm treo event loop, một promise reject không ai bắt khiến Node.js âm thầm chết lúc 3 giờ sáng. Error handling là một hệ thống: bắt đúng chỗ, phân loại lỗi, không để app chết im lặng.
Tổng hợp toàn bộ bài viết kỹ thuật về Docker, Redis, Node.js và System Design — sắp xếp theo từng series để dễ theo dõi.
Một request lỗi làm treo event loop, một promise reject không ai bắt khiến Node.js âm thầm chết lúc 3 giờ sáng. Error handling là một hệ thống: bắt đúng chỗ, phân loại lỗi, không để app chết im lặng.
Sản phẩm sập lúc 2 giờ sáng, mở log ra toàn console.log vô nghĩa? Structured logging với pino biến log thành dữ liệu truy vết: JSON có cấu trúc, kèm request ID, dựng dashboard trong vài phút.
Máy 8 CPU core nhưng ứng dụng Node.js mặc định chỉ dùng một luồng — lãng phí tới 87% sức mạnh. Cluster Module và PM2 giúp chạy đa tiến trình, tận dụng trọn CPU, tự phục hồi và reload không downtime.
Ứng dụng chạy ngon trên máy dev nhưng lên production lại "dở chứng" vì kiến trúc không thiết kế cho môi trường thật? 12-Factor App là bộ quy tắc vàng giúp bạn deploy, scale và vận hành ở bất kỳ đâu.
Ứng dụng chạy ngon ở dev nhưng lên production, Redis vừa restart là mọi request treo 30 giây rồi trả 500. Vấn đề nằm ở cách quản lý kết nối — bài này dạy bạn cấu hình ioredis để hệ thống sống khỏe.
Ứng dụng giao đồ ăn hiện 20 quán quanh mình, sắp xếp theo khoảng cách chỉ trong mili giây — không cần database spatial hay Google Maps API, chỉ với vài lệnh Geo xây trên nền Sorted Sets.
Đếm DAU cho 10 triệu user bằng Set tốn hàng trăm MB RAM, nhưng HyperLogLog chỉ cần 12KB và Bitmap theo dõi trạng thái từng user với vỏn vẹn 1.25MB. Hai vũ khí bí mật cho analytics quy mô lớn.
Cả hai đều là cache trong bộ nhớ, đều 'cực nhanh' — vậy tại sao Memcached vẫn tồn tại khi Redis làm được nhiều hơn? Bài này giúp bạn chọn đúng công cụ và biết khi nào không cần đổi.
Bạn viết redis.get mà không hiểu vì sao thỉnh thoảng timeout? Muốn gộp 1000 lệnh thành một round-trip duy nhất? ioredis đưa bạn từ kết nối đầu tiên đến những pattern production thực thụ.
5 triệu key đang đẩy Redis đến giới hạn RAM, còn một node chết là cả hệ thống sụp? Redis Cluster chia dữ liệu ra nhiều node, vừa mở rộng dung lượng vừa tự động chịu lỗi, không cần dừng dịch vụ.
Hai request cùng xử lý một đơn hàng và cả hai đều trừ tiền thành công? Đó là race condition — kẻ thù số một của hệ thống phân tán. Distributed Lock với Redlock giúp chống lại nó an toàn.
Redis mặc định không có bảo mật — chạy production mà không khắc phục là thảm họa. Bài viết hướng dẫn bảo mật bằng AUTH và ACL, sao lưu tự động và cách triển khai Redis trên Docker trong production.