Junior — Middle
Как се реализира механизмът за ограничаване на броя на заявките за единица време в системата?
sobes.tech AI
Отговор от AI
Механизмът за ограничаване на броя на заявките за единица време (rate limiting) в Go често се реализира с помощта на токени или броячи с времеви прозорец.
Пример с използване на пакета golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 заявка на секунда с максимум 5 токена
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// обработка на заявката
}
Тук rate.NewLimiter създава лимитатор, който позволява 1 заявка на секунда, но може да натрупа до 5 токена, което позволява кратки изблици на заявки. Ако има твърде много заявки, те се отхвърлят с грешка 429.
Други подходи включват фиксирано окно, плъзгащо се окно или използване на Redis за разпределено ограничаване на скоростта.