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 за разпределено ограничаване на скоростта.