APPLICATION & LOAD

Kiểm thử API rate limiting dưới burst: 429, Retry-After và fairness

8/8/2026 · 16 phút

Nhiều API client gửi burst qua gateway có rate limiter tới backend service
Mục lục bài viết 9 phần

Một API gateway có thể trả đúng HTTP 429 nhưng vẫn để burst lọt xuống backend, làm client retry đồng loạt hoặc phân bổ quota sai giữa tenant. Bài này kiểm chứng limiter từ góc nhìn client, gateway và service thay vì chỉ đếm response code.

ĐỌC NHANH

Bài viết giúp bạn

  • Rate limiting cần trả lời câu hỏi nào?
  • Topology và traffic profile
  • Biến số phải kiểm soát
Tùy chỉnh đọc
01

Rate limiting cần trả lời câu hỏi nào?

#

Trước hết xác định đơn vị quota: request, token, byte hay cost; cửa sổ theo giây/phút; và key theo IP, API key, user, tenant hay route. Nếu thiếu định nghĩa này, cùng một kết quả 429 có thể được coi vừa đúng vừa sai.

Limiter cần bảo vệ backend mà không chặn nhầm client hợp lệ. Ngoài enforcement tại ngưỡng, phải kiểm tra burst allowance, thời điểm reset, header hướng dẫn client, fairness giữa tenant và hành vi khi kho quota phân tán chậm hoặc mất kết nối.

02

Topology và traffic profile

#

Đặt load generator ngoài gateway, quan sát gateway/limiter store và backend riêng. Tạo ít nhất ba nhóm client: steady hợp lệ, burst vượt quota và tenant nền để đo ảnh hưởng chéo. Gắn request ID, tenant ID và timestamp để nối log ba lớp.

Traffic profile nên gồm ramp, spike ngắn, sustained overload, synchronized retry và retry có exponential backoff+jitter. Tách idempotent/non-idempotent endpoint và request cost khác nhau; không để một GET nhẹ đại diện cho API ghi dữ liệu nặng.

Topology kiểm thử API rate limiting với client steady, burst và tenant nền
Topology kiểm thử API rate limiting với client steady, burst và tenant nền
03

Biến số phải kiểm soát

#

Khóa thuật toán token bucket/sliding window/fixed window, bucket size, refill rate, clock source, scope và distributed consistency. Ghi rõ header được dùng: HTTP 429 là chuẩn trạng thái; Retry-After có thể là số giây hoặc ngày HTTP theo semantics của HTTP.

Kiểm soát keep-alive, HTTP/2 multiplexing, connection reuse, CDN/WAF/cache, client timeout và retry policy. Nếu generator tự retry mà không ghi nhận, offered load và accepted load bị trộn, làm sai kết luận.

04

KPI và bằng chứng đầu ra

#

Đo offered RPS, accepted RPS, rejected RPS, overshoot trong cửa sổ, false reject, response code mix, Retry-After accuracy, latency p50/p95/p99, backend CPU/queue và recovery time. Fairness nên đo theo accepted share hoặc Jain’s fairness index khi phù hợp.

  • KPI: Enforcement error · Ý nghĩa: Lệch giữa quota và accepted request · Bằng chứng: Gateway log + client result
  • KPI: Overshoot · Ý nghĩa: Request lọt quá ngưỡng trong burst · Bằng chứng: Timestamp theo cửa sổ
  • KPI: False reject · Ý nghĩa: Client dưới quota vẫn bị chặn · Bằng chứng: Per-key counters
  • KPI: Retry amplification · Ý nghĩa: Retry làm tải tăng thêm · Bằng chứng: Attempt chain theo request ID
  • KPI: Backend protection · Ý nghĩa: Service giữ SLO dưới overload · Bằng chứng: Queue/CPU/error/latency
  • KPI: Fairness · Ý nghĩa: Tenant nền có bị starvation · Bằng chứng: Accepted rate từng tenant
05

Ma trận thuật toán và kịch bản

#
  • Kịch bản: Dưới quota · Tải: 70–90% steady · Câu hỏi pass/fail: Không false reject, SLO ổn định
  • Kịch bản: Chạm quota · Tải: Ramp qua ngưỡng · Câu hỏi pass/fail: Enforcement đúng cửa sổ
  • Kịch bản: Burst allowance · Tải: Spike ngắn · Câu hỏi pass/fail: Overshoot trong thiết kế
  • Kịch bản: Multi-tenant · Tải: Một tenant xấu · Câu hỏi pass/fail: Tenant khỏe không starvation
  • Kịch bản: Retry storm · Tải: Nhiều client đồng bộ · Câu hỏi pass/fail: Retry-After/jitter giảm khuếch đại
  • Kịch bản: Store lỗi/chậm · Tải: Fault injection · Câu hỏi pass/fail: Fail-open/closed đúng chính sách
  • Kịch bản: Clock skew · Tải: Node lệch có kiểm soát · Câu hỏi pass/fail: Không reset quota bất thường
06

Test plan theo từng pha

#

Baseline backend không limiter để xác định công suất và tránh limiter che bottleneck khác. Bật limiter với một client, xác minh quota và headers. Sau đó mở rộng multi-key/multi-node, tăng burst theo bước, giữ nguyên request mix và ghi raw timestamps.

Pha resiliency làm chậm hoặc cô lập state store theo phương án được phép; xác nhận hệ thống fail-open hay fail-closed đúng tài liệu. Pha recovery giảm tải và đo thời gian accepted rate, latency, queue trở về baseline; kiểm tra bucket không refill hoặc reset sai.

Ma trận kiểm thử rate limiter dưới burst, retry và phân bổ công bằng
Ma trận kiểm thử rate limiter dưới burst, retry và phân bổ công bằng
07

Checklist nghiệm thu

#
  • Chốt quota unit, key, window và burst allowance.
  • Tách initial request khỏi retry attempt.
  • Kiểm tra 429 và Retry-After ở client thực.
  • Báo accepted/rejected theo từng tenant.
  • Quan sát backend queue, error và tail latency.
  • Kiểm tra limiter store lỗi và clock skew.
  • Lưu cấu hình, version, raw log và correlation ID.
08

Giới hạn của kết luận

#

Kết quả phụ thuộc thuật toán, topology phân tán, cache, client retry và request cost. Không suy rộng từ một endpoint sang toàn API. HTTP chỉ định semantics; quota cụ thể và pass/fail là chính sách dịch vụ, không phải con số do RFC áp đặt.

09

Khái niệm cần nhớ

#
  • HTTP 429: Trạng thái Too Many Requests.
  • Retry-After: Gợi ý thời điểm client có thể thử lại.
  • Token bucket: Cơ chế tích lũy token cho phép burst hữu hạn.
  • Overshoot: Request được nhận vượt giới hạn thiết kế.
  • Fairness: Mức phân bổ công bằng giữa client/tenant.
  • Retry amplification: Retry làm tải tổng lớn hơn tải ban đầu.
THUẬT NGỮ NHANH

Khái niệm cần nhớ

DUT / SUT
Thiết bị hoặc toàn bộ hệ thống đang là đối tượng của bài kiểm thử.
Steady state
Giai đoạn tải đã ổn định và đủ điều kiện để lấy số liệu đại diện.
Pass / fail
Kết luận dựa trên ngưỡng đã thống nhất, luôn đi cùng topology, cấu hình và điều kiện đo.
TÀI LIỆU ĐỐI CHIẾUTài liệu tham khảo4 nguồn

Nội dung được biên soạn độc lập, theo hướng vendor-neutral và đối chiếu các tài liệu gốc dưới đây. Tính năng sản phẩm cần được kiểm tra lại theo phiên bản đang sử dụng.

Nguyên tắc biên tập

NetVali ưu tiên nguồn tiêu chuẩn và tài liệu chính thức; phân biệt khuyến nghị triển khai với yêu cầu của tiêu chuẩn; không công bố thông số sản phẩm chưa gắn với phiên bản và điều kiện đo.

Thông số và khả năng sản phẩm có thể thay đổi theo phiên bản. Hãy đối chiếu tài liệu chính thức trước khi xây dựng cấu hình hoặc tiêu chí nghiệm thu.
BẮT ĐẦU TỪ BÀI TOÁN

Cần chuyển kiến thức thành test plan?

Chia sẻ mục tiêu, topology và ràng buộc kỹ thuật. NetVali sẽ cùng bạn xác định bài đo phù hợp.

Trao đổi yêu cầu kỹ thuật