Links rápidos:
Introdução:
Olá, entusiastas de código aberto e aficionados do Go! Estou de volta com uma rápida visão geral do meu projeto de código aberto, ThrottleX, um limitador de taxa distribuída para APIs. Ainda sou muito novo neste mundo de código aberto, então seus conselhos são sempre bem-vindos! ?
ThrottleX foi desenvolvido para ajudá-lo a gerenciar o tráfego de API de maneira eficaz, mantendo seu sistema tranquilo e justo. Seja para evitar abusos ou lidar com cargas elevadas, o ThrottleX tem o que você precisa. Vamos explorar alguns dos algoritmos de limitação de taxa que tornam o ThrottleX poderoso. ?
ThrottleX vem com três algoritmos principais para ajudá-lo a gerenciar seu tráfego de API:
Como funciona: Imagine dividir o tempo em intervalos fixos. Durante cada intervalo, você permite um número fixo de solicitações — digamos, 100 solicitações por minuto. Assim que a janela fecha, o contador é reiniciado.
Caso de uso: ótimo para padrões de tráfego previsíveis, mas tome cuidado com o "problema de limite", onde muitas solicitações próximas ao final da janela podem contornar o limite de taxa pretendido.
Como funciona: é como uma média móvel — em vez de ser redefinido completamente no final de cada janela, o limite de taxa "desliza" ao longo do tempo, proporcionando um controle mais suave.
Caso de uso: Perfeito para evitar picos e distribuir solicitações de maneira mais uniforme.
Como funciona: imagine um balde que se enche de tokens em uma taxa constante. As solicitações consomem tokens e, se o bucket estiver vazio, as solicitações serão bloqueadas até que sejam recarregadas.
Caso de uso: Ideal para permitir picos repentinos de tráfego se os tokens forem salvos.
Aqui está um exemplo simples usando o limitador de taxa de janela fixa:
package main import ( "github.com/neelp03/throttlex/ratelimiter" "github.com/neelp03/throttlex/store" "time" "fmt" ) func main() { // Initialize an in-memory store and a Fixed Window rate limiter memStore := store.NewMemoryStore() limiter, err := ratelimiter.NewFixedWindowLimiter(memStore, 10, time.Minute) if err != nil { fmt.Println("Failed to create limiter:", err) return } // Simulate API requests key := "user1" for i := 0; iResultado esperado:
Request 1 allowed Request 2 allowed ... (up to 10 allowed) Request 11 blocked Request 12 blocked ... (up to 15 blocked)O que vem por aí para o ThrottleX? ?
Fique atento a essas atualizações futuras que tornarão o ThrottleX ainda mais poderoso!
Ainda sou novo no código aberto e adoraria que você fizesse parte dessa jornada! Contribuições são sempre bem-vindas – sejam correções de bugs, sugestões ou melhorias na documentação.
Confira o repositório: ThrottleX GitHub Repo e dê uma estrela se achar útil. Sinta-se à vontade para abrir problemas ou obter solicitações - tudo ajuda!
Considerações Finais
ThrottleX é minha tentativa de tornar a limitação de taxa de API mais acessível e eficiente. Vamos tornar isso divertido (e menos doloroso)! ?
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3