System Design

Từ 250ms xuống 0ms: request “đi tắt” qua 4 tầng cache

Tóm tắt

Hệ thống thường có nhiều tầng cache: trình duyệt, CDN, Redis, rồi mới tới database. Request đi từ trên xuống và dừng ở tầng đầu tiên có dữ liệu. Lần đầu (miss hết) tốn nhiều nhất, nhưng trên đường về dữ liệu được lưu lại ở từng tầng cho các lần sau.

Ba lượt request

LượtDừng ở tầngThời gian
1 — cache nguộiDatabase (miss cả 3 tầng cache)~250ms
2Browser~0ms
3 — TTL tầng trên hết hạnRedis~80ms

Áp dụng thế nào?

  • Chặn càng sớm càng tốt: tầng càng sâu càng đắt; ưu tiên cache ở browser/CDN cho nội dung tĩnh hoặc ít thay đổi (Cache-Control, ETag).
  • Đặt TTL theo mức độ chấp nhận dữ liệu cũ của từng loại dữ liệu — giá sản phẩm khác ảnh đại diện.
  • Có chiến lược invalidation khi dữ liệu thay đổi (xoá key Redis, purge CDN), đừng chỉ chờ TTL.
  • Cẩn thận dữ liệu riêng tư: không để CDN cache response chứa thông tin cá nhân (Cache-Control: private).
  • Theo dõi hit rate của từng tầng; hit rate thấp nghĩa là cache đang tốn tiền mà không giúp gì.