Sobes.tech
Junior — Middle

Como é que o mecanismo de limitação do número de pedidos por unidade de tempo é implementado no sistema?

sobes.tech IA

Resposta da IA

O mecanismo de limitação de quantidade de pedidos por unidade de tempo (limitação de taxa) em Go é frequentemente implementado usando tokens ou contadores com janela de tempo.

Exemplo usando o pacote golang.org/x/time/rate:

import (
    "golang.org/x/time/rate"
    "net/http"
)

var limiter = rate.NewLimiter(1, 5) // 1 pedido por segundo com um máximo de 5 tokens

func handler(w http.ResponseWriter, r *http.Request) {
    if !limiter.Allow() {
        http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
        return
    }
    // processamento do pedido
}

Aqui, rate.NewLimiter cria um limitador que permite 1 pedido por segundo, mas pode acumular até 5 tokens, permitindo picos curtos de pedidos. Se houver pedidos demais, eles são rejeitados com erro 429.

Outras abordagens incluem janela fixa, janela deslizante ou uso de Redis para limitação distribuída.