Tối Ưu Hiệu Suất: Kiến Trúc Caching và Load Balancing
Giới thiệu
Trong phần 3 của chuỗi bài viết về Thiết kế Hệ thống, chúng ta sẽ tìm hiểu về caching và load balancing - những yếu tố không thể thiếu để nâng cao hiệu suất hệ thống. Nếu không có chúng, các hệ thống sẽ gặp khó khăn khi mở rộng quy mô.
Bài viết này sẽ cung cấp cho bạn:
- Caching – Các loại caching: App, DB, CDN; write-through và write-back, TTL.
- Cache Invalidation – TTL, versioning, bảo vệ chống stampede.
- Load Balancing – L4 và L7, round-robin, least-connections, hashing.
1. Caching
Tóm tắt: Caching là công cụ đầu tiên để mở rộng quy mô. Sử dụng nó ở mọi nơi, nhưng cần hiểu các đánh đổi.
Các loại caching:
- App cache: Caching trong bộ nhớ (Redis, Memcached). Nhanh nhưng không ổn định.
- DB cache: Caching truy vấn hoặc đối tượng để giảm tải cho các truy vấn nóng.
- CDN cache: Đưa tài sản tĩnh gần người dùng hơn.
Chiến lược caching:
- Write-through: Ghi vào cache và DB đồng thời (an toàn, nhất quán, nhưng ghi chậm hơn).
- Write-back: Ghi vào cache trước, đồng bộ hóa với DB sau (nhanh, nhưng rủi ro nếu cache gặp sự cố).
- TTL (Time To Live): Tự động làm mới dữ liệu cũ.
👉 Ví dụ: Một trang chủ tin tức lưu trữ các câu chuyện hàng đầu trong 30 giây — tiết kiệm hàng ngàn yêu cầu.
👉 Gợi ý phỏng vấn: “Bạn sẽ mở rộng một dịch vụ đọc nhiều như thế nào?” — caching là câu trả lời đầu tiên.
2. Cache Invalidation
Tóm tắt: Phần khó nhất của caching không phải là caching — mà là việc vô hiệu hóa cache.
Các phương pháp vô hiệu hóa cache:
- TTL: Mặc định an toàn, nhưng có thể phục vụ dữ liệu cũ.
- Versioning: Thay đổi khóa cache khi dữ liệu được cập nhật (ví dụ:
user:v2:123). - Bảo vệ chống stampede: Sử dụng khóa hoặc gộp yêu cầu để tránh nhiều client cùng truy cập DB khi cache hết hạn.
👉 Ví dụ: Nếu 1 triệu người refresh khi một cache hết hạn, đó được gọi là cache stampede. Sử dụng TTL ngẫu nhiên hoặc làm mới bất đồng bộ.
👉 Gợi ý phỏng vấn: Họ sẽ hỏi “Phần khó khăn nhất về caching là gì?” — câu trả lời: vô hiệu hóa và tính nhất quán.
3. Load Balancing
Tóm tắt: Bộ cân bằng tải phân phối yêu cầu giữa các máy chủ và ẩn đi các sự cố.
Các loại load balancing:
- L4 (Transport): Cân bằng dựa trên IP/cổng. Đơn giản và nhanh chóng.
- L7 (Application): Thông minh hơn — định tuyến dựa trên headers, cookies, và đường dẫn.
Các thuật toán:
- Round Robin: Phân phối đều.
- Least Connections: Gửi đến máy chủ có ít yêu cầu đang hoạt động nhất.
- Hashing: Phiên người dùng cố định (ví dụ: người dùng giống nhau → máy chủ giống nhau).
👉 Ví dụ: Ứng dụng thương mại điện tử sử dụng L7 LB để định tuyến /images → CDN, /checkout → cụm thanh toán.
👉 Gợi ý phỏng vấn: “Bạn sẽ xử lý lưu lượng không đồng đều giữa các máy chủ như thế nào?” — sử dụng least-connections hoặc cân bằng tải có trọng số.
✅ Những điểm chính
- Cache nơi cần thiết nhất: truy vấn nóng, tài sản tĩnh, các điểm cuối đọc nhiều.
- Vô hiệu hóa là thách thức thực sự; lên kế hoạch chiến lược từ trước.
- Cân bằng tải là rất quan trọng cho công bằng, tính bền vững và logic định tuyến.
💡 Câu hỏi thực hành:
"Thiết kế chiến lược caching cho dòng thời gian Twitter. Làm thế nào bạn tránh được cache stampede trong các sự kiện đang hot?"