Lesson 52 — Rate Limiting & Circuit Breaker

Trang này minh hoạ 3 ý chính của bài học bằng mô phỏng tương tác: (1) 4 thuật toán rate limit (token / leaky / fixed / sliding) chạy trên cùng một stream request để so sánh trực tiếp; (2) circuit breaker state machine Closed → Open → Half-Open, animate theo tỉ lệ fail bạn chọn; (3) cascading failure A→B→C — so sánh có và không có circuit breaker.

1. Bốn thuật toán rate limit trên cùng 1 stream

Tất cả 4 limiter dùng chung tham số limit = 10 / window 1s (token & leaky: rate 10/s, cap 10). Mỗi lần bạn bấm Gửi 1 request (hoặc bật Auto burst), cùng một request được đưa qua cả 4 — quan sát cái nào allow, cái nào deny.

Đồng hồ mô phỏng: 0.0s · request đã gửi: 0

Token bucket

Token nạp đều 10/s, request nhặt 1. Cho phép burst tới khi rỗng.
Tokens: 10.0 / 10

Leaky bucket

Xô rò 10/s, request đổ nước vào. Đầy → drop. Output đều.
Nước: 0.0 / 10

Fixed window

Đếm trong window 1s, reset đầu mỗi giây. Có lỗ hổng boundary.
Count: 0 / 10

Sliding window (counter)

Nội suy count window này + trước. Mượt, không burst boundary.
Ước lượng: 0.0 / 10

Mẹo: bấm Auto burst rồi +1 giây nhiều lần để thấy token/sliding "hồi" dần, còn fixed window reset nhảy bậc ở mỗi ranh giới giây.

2. Circuit breaker — state machine

Breaker với ngưỡng 5 fail liên tiếpOpen, cooldown 3sHalf-Open (1 probe). Kéo slider để chọn xác suất downstream fail, rồi bấm Gửi request hoặc Auto để xem mạch tự đóng/mở.

fail liên tiếp: 0 · trip count: 0
CLOSEDcho qua, đếm fail
OPENreject ngay
HALF-OPEN1 probe thử

3. Cascading failure — có vs. không circuit breaker

Service A → B → C. Service C "lock DB" (down). Mỗi call tới C đang hỏng mất 2s timeout mới fail. Bấm Bắn 30 request vào A để xem điều gì xảy ra với connection pool của A trong 2 kịch bản.

C đang: DOWN (lock DB)

Không có circuit breaker

A
B
C
Connection pool A (cap 30): 0/30 kẹt
User được trả lời: 0 · 504 timeout: 0

Có circuit breaker (+ timeout)

A
B
C
Connection pool A (cap 30): 0/30 kẹt
Breaker: CLOSED · fail-fast 503: 0 · 504: 0

Quan sát: bên trái, pool A bị 30 connection kẹt đợi C → A không nhận thêm request → cascading. Bên phải, sau vài fail breaker Open → A trả 503 ngay (fail-fast), pool không bao giờ cạn → A vẫn sống.