Rate limiting — ограничение скорости запросов в определенной системе. К примеру вы можете поставить ограничения на ваш веб сервер — не более 10 запросов в секунду. Возможно создание ограничения только для определенного клиента или типа машины.
В Golang добавление rate limit довольно просто, достаточно использовать готовую библиотеку golang.org/x/time/rate
Как пример — я хочу получать не более 10 запросов в секунду с первоначальным burst (довольно сложно перевести на русский, что-то типа вспышки или очереди запросов) в 100:
package main
import (
"context"
"fmt"
"time"
"golang.org/x/time/rate"
)
func main() {
limit := 10
burst := 100
limiter := rate.NewLimiter(rate.Limit(limit), burst)
ctx := context.Background()
i := 0
for {
fmt.Println("Do smth...", time.Now())
limiter.Wait(ctx)
fmt.Println(i, " - ", time.Now())
i++
}
}
Итого, при запуске я получу 100 Do smth.. немедленно и далее следующие запросы будут идти пачками по 10 штук в секунду.
Мы также можем сбросить burst или изменить это значение во время исполнения программы.