Để 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.Limiterkế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.