Nâng CaoGolang iconGolang

Rate limiter implement trong Go?

Để implement rate limiting trong Go, cách chuẩn là dùng package golang.org/x/time/rate với token bucket algorithm: limiter := rate.NewLimiter(rate.Every(time.Second), 10) tạo limiter cho phép 10 request mỗi giây.

  • Trong HTTP middleware, kiểm tra if !limiter.Allow() và trả về status 429 Too Many Requests nếu vượt giới hạn.
  • Để giới hạn theo từng client (per-IP), cần dùng map[string]*rate.Limiter kết hợp với mutex để quản lý limiter riêng cho mỗi IP, đồng thời nên dọn dẹp các limiter cũ theo định kỳ để tránh memory leak.
  • Trong môi trường production nhiều server, nên dùng Redis-based distributed rate limiter để đảm bảo giới hạn nhất quán across tất cả instances.

Xem toàn bộ Golang cùng filter theo level & chủ đề con.

Mở danh sách Golang