#Backend & Microservices#Kiến trúc & System Design#Bảo mật & Tối ưu tải
Thiết kế Rate Limiter phân tán: So sánh Token Bucket, Leaky Bucket và Sliding Window Log
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview Bảo vệ hệ thống trước bão Request Rate Limiter là thành phần chốt chặn không thể thiếu của bất kỳ API Gateway nào: - Ngăn chặn người dùng spam hoặc bot DDOS. - Giới hạn hạn ngạch sử dụng theo gói dịc…
☰ Mục lục bài viết (6 phần) Mở / Đóng mục lục
Bảo vệ hệ thống trước bão Request#
Rate Limiter là thành phần chốt chặn không thể thiếu của bất kỳ API Gateway nào:
- Ngăn chặn người dùng spam hoặc bot DDOS.
- Giới hạn hạn ngạch sử dụng theo gói dịch vụ (Free: 100 req/ngày, Pro: 10.000 req/ngày).
Dưới đây là phân tích 3 thuật toán giới hạn tần suất kinh điển nhất.
1. Token Bucket (Thùng chứa Token)#
- Một chiếc xô có sức chứa tối đa $B$ tokens. Cứ mỗi giây, hệ thống tự động rót thêm $R$ tokens vào xô.
- Mỗi khi có request đến: Nếu trong xô còn token $\rightarrow$ Lấy 1 token và cho qua. Nếu xô rỗng $\rightarrow$ Từ chối với mã HTTP 429.
- Ưu điểm: Cho phép xử lý lưu lượng tăng đột biến trong thời gian ngắn (Traffic Burst) miễn là trong xô còn đủ token tích lũy.
2. Leaky Bucket (Thùng nước rò rỉ)#
- Request đổ vào xô như nước. Ở đáy xô có một lỗ rò rỉ xả nước ra với tốc độ cố định $R$ request/giây.
- Ưu điểm: Làm phẳng lưu lượng (Traffic Smoothing), bảo vệ backend không bao giờ bị quá tải đột ngột.
- Nhược điểm: Các request đột biến hợp lệ vẫn bị xếp hàng chậm trễ.
3. Sliding Window Log (Cửa sổ trượt ghi log)#
- Lưu timestamp của từng request vào một Redis Sorted Set (
ZADD). - Khi có request mới: Xóa toàn bộ timestamp cũ hơn 1 phút trước (
ZREMRANGEBYSCORE), sau đó đếm số lượng phần tử còn lại (ZCARD). - Ưu điểm: Chính xác tuyệt đối 100%, không bị lỗi biên (Boundary issues).
- Nhược điểm: Tốn rất nhiều bộ nhớ RAM nếu lượng request lớn.
Thuật toán tối ưu cho Production: Sliding Window Counter#
Kết hợp giữa Fixed Window và Sliding Window: Tính toán tỷ lệ trọng số của cửa sổ trước đó và cửa sổ hiện tại.
CODE
Số request ước tính = (Request cửa sổ hiện tại) + (Request cửa sổ trước) × (Tỷ lệ thời gian còn lại)
Vừa chính xác cao, vừa chỉ tốn đúng 2 keys số nguyên trong Redis!
Góc thảo luận#
Hệ thống của bạn đang sử dụng thuật toán Rate Limit nào? Bạn triển khai bằng Redis, Envoy Proxy hay Kong Gateway?
Xem thêm nội dung liên quan:
Tác giả bài viết
Hoàng Nam (Tech Lead)
Tham gia từ thg 5 2026 · 15 bài viết · 25 phản hồi
Thảo luận
1 phản hồi
💬
Tham gia thảo luận
Cộng đồng mở · Đăng nhập 1-chạm qua Google
Bài liên quan trong #Backend & Microservices
-
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
So sánh mô hình Embedding đa ngữ: OpenAI text-embedding-3 vs BGE-M3 vs Cohere
Minh Trí (AI Engineer) · 💬 1 -
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1 -
Tokenization tiếng Việt của các LLM: Tại sao chi phí tiếng Việt đắt gấp 3 lần tiếng Anh?
Minh Trí (AI Engineer) · 💬 1