Thiết kế hệ thống thực chiến: URL Shortener
Từng khối xây dựng nắm trong tay: load balancer, cache, database scaling, queue, API, consistency. Giờ ghép tất cả vào case study kinh điển — thiết kế URL shortener cho 100 triệu URL, 1.000 QPS đọc.
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.
Từng khối xây dựng nắm trong tay: load balancer, cache, database scaling, queue, API, consistency. Giờ ghép tất cả vào case study kinh điển — thiết kế URL shortener cho 100 triệu URL, 1.000 QPS đọc.
Hai người cùng xem số dư: một người thấy 1.000.000đ, người kia thấy 900.000đ — không phải bug, mà là bản chất của hệ thống phân tán. CAP Theorem giải thích vì sao, giúp bạn quyết định đánh đổi cái gì.
Mobile cần 20 field, web cần 12, API trả 50 — ai cũng thừa, ai cũng thiếu. REST, gRPC và GraphQL mỗi cái mạnh ở một bài toán; chọn đúng triết lý, bạn không trả giá bằng hiệu năng và đau đầu bảo trì.
Đặt hàng phải gửi email, SMS, cập nhật kho, tính điểm — làm đồng bộ, API chậm gấp 5 lần, dễ treo. Queue đảo ngược cách nghĩ: API chỉ xác nhận, việc nặng chạy nền, thành phần không còn phụ thuộc nhau.
Database đạt 10.000 QPS đọc, một máy bắt đầu đuối; dữ liệu chạm 500GB, mọi query chậm dần. Replication chia tải đọc, sharding chia dữ liệu — lộ trình scale database đúng thứ tự, kèm các bẫy cần tránh.
Cùng một API, đọc database mất 50ms, đọc cache chỉ mất 1ms — nhanh gấp 50 lần, chi phí gần như bằng không. Từ cache-aside, TTL đến chống stampede, bài viết giúp bạn tận dụng tối đa tầng đệm.
Một server gánh nổi 1.000 request/giây, khách hàng cần 10.000 — mua server to hơn thì giá tăng theo cấp số nhân. Đặt một “người gác cổng” trước nhiều server, bạn chia đều tải và scale thoải mái.
Hai ứng dụng cùng tính năng, cùng công nghệ — một cái chết ngạt ở 1.000 user, một cái phục vụ 10 triệu user vẫn ngon lành. Khác biệt nằm ở kiến trúc: lộ trình 4 bước giúp bạn làm chủ kỹ năng này.
Ứng dụng chậm dần, RAM phình to tới mức bị kill mỗi đêm, còn bạn chỉ đoán mò thủ phạm? Profiling thay phán đoán bằng dữ liệu: 5 bước tìm nút thắt CPU, memory leak và tối ưu đúng chỗ.
Một request POST khéo léo có thể xóa sạch database của bạn — bảo mật không phải chuyện của firewall mà của từng dòng code. Điểm mặt 10 lỗ hổng Node.js phổ biến nhất và cách vá từng cái.
Mỗi lần deploy vài request lỗi 502 vì instance cũ bị kill giữa chừng. Graceful shutdown cho ứng dụng thời gian dọn dẹp: chờ request xong, đóng kết nối sạch rồi mới tắt — deploy mà không ai nhận ra.
Ứng dụng vẫn "chạy" nhưng đang hấp hối: event loop nghẽn 5 giây, memory tăng không phanh, hàng trăm request treo mà không ai hay. Dựng health checks và alert để luôn là người biết sự cố đầu tiên.