Calculadora token bucket
Um balde de 10 tokens com 5 dentro, que recarrega 2 por segundo, tem 8 disponíveis após 1,5 segundo, então uma rajada de 3 passa e deixa 5. Digite seus números para ver se ela é permitida ou negada e quanto esperar. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Capacidade
- 10
- Taxa de reposição
- 2
- Tokens
- 5
- Tempo decorrido
- 1,5
- Número de requisições
- 3
- Tokens disponíveis
- 8
- Tokens restantes
- 5
- Tokens consumidos
- 3
- Déficit
- 0
Você mantém um balde de tokens até uma capacidade fixa, recarrega em ritmo constante e gasta tokens quando chega uma requisição ou um burst. Esta calculadora de limite de taxa token bucket aceita a capacidade, a taxa de recarga em tokens por segundo, a contagem atual de tokens, quantos segundos se passaram desde a última atualização e quantos tokens o próximo burst precisa. Ela recarrega o balde com um teto rígido na capacidade, decide permitir ou negar, informa os tokens restantes após a decisão e, quando o burst é negado, calcula quanto você deve esperar para reunir tokens suficientes—ou indica que a requisição nunca poderá ser atendida porque excede a capacidade ou a recarga é zero.
Como o balde decide
Um token bucket guarda um saldo de tokens que nunca passa de uma capacidade fixa. O tempo acrescenta tokens a uma taxa de recarga constante, e cada rajada gasta tantos tokens quanto custa. Para decidir, a calculadora primeiro recarrega: soma ao saldo atual os segundos passados multiplicados pela taxa e limita o resultado à capacidade. Isso é o que pode ser gasto naquele momento. Se cobrir o custo, a rajada é permitida e o custo é descontado. No exemplo, 5 tokens mais 1,5 segundo a 2 por segundo somam 8, então uma rajada de 3 passa e sobram 5. Você informa o tempo passado, por isso os mesmos números sempre dão a mesma resposta.
Para que serve e os erros mais comuns
Serve para conferir a cota de um gateway ou um limitador do seu próprio código contra uma referência, para explicar um projeto numa revisão ou para preparar simulações de carga. Ajuda principalmente nos casos-limite em que limitadores escritos à mão erram: um balde já cheio, uma recarga parcial e uma rajada maior que o teto. Um erro comum é esquecer o limite, o que deixa o saldo crescer sem fim depois de uma pausa longa e permite rajadas muito maiores que o previsto. Outro é tratar uma rajada maior que a capacidade como se só precisasse de paciência: nenhuma espera vai fazê-la caber, e a calculadora avisa.
Perguntas frequentes
Quantos tokens ficam disponíveis depois de uma pausa?
Some aos tokens atuais os segundos passados multiplicados pela taxa de recarga e limite o resultado à capacidade. Com 5 tokens, taxa de 2 por segundo e 1,5 segundo passado, você tem 8, desde que a capacidade chegue a esse valor.
Quanto tempo esperar quando uma rajada é negada?
A calculadora divide o déficit, ou seja, os tokens que faltam, pela taxa de recarga. O resultado são os segundos de espera até que a rajada caiba no balde.
Quando uma rajada nunca pode ser permitida?
Quando custa mais tokens do que o balde consegue guardar, ou quando a taxa de recarga é zero e o balde ainda não tem o suficiente. Nos dois casos a calculadora avisa claramente, em vez de dar um tempo de espera.
O que significam na prática a capacidade e a taxa de recarga?
A capacidade é a maior rajada que o balde aceita de uma vez, o seu teto. A taxa de recarga, em tokens por segundo, é o ritmo constante que dá para sustentar com o tempo depois de gasta essa rajada.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/token-bucket \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"capacity":10,"refill_rate":2,"tokens":5,"elapsed":1.5,"request_count":3}'const res = await fetch("https://api.kit.forhosting.com/dev/token-bucket", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"capacity": 10,
"refill_rate": 2,
"tokens": 5,
"elapsed": 1.5,
"request_count": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/token-bucket",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"capacity": 10,
"refill_rate": 2,
"tokens": 5,
"elapsed": 1.5,
"request_count": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/token-bucket", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"capacity":10,"refill_rate":2,"tokens":5,"elapsed":1.5,"request_count":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"capacity":10,"refill_rate":2,"tokens":5,"elapsed":1.5,"request_count":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/token-bucket", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"capacity": 10,
"refill_rate": 2,
"tokens": 5,
"elapsed": 1.5,
"request_count": 3
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.token_bucket",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
O limitador de taxa token bucket é o modelo padrão por trás do throttling de API, das cotas de gateway e da contrapressão no cliente. O mesmo módulo puro e determinístico alimenta a ferramenta gratuita do navegador e o caminho da API, de modo que revisões de design, scripts de teste de carga e simuladores de produção não discordam em casos-limite como balde cheio, recarga parcial ou requisição maior que o teto de burst.
Como o algoritmo token bucket decide permitir ou negar
O token bucket guarda um saldo de tokens não negativo que nunca ultrapassa a capacidade. O tempo decorrido é informado por quem chama para a matemática permanecer determinística—nenhum relógio de parede é lido—, assim as mesmas entradas sempre produzem a mesma decisão, o mesmo saldo restante e os mesmos segundos de espera em runtimes e goldens. Entre verificações, os tokens se acumulam a refill_rate tokens por segundo durante o intervalo elapsed e o saldo é limitado com min(capacity, tokens + elapsed vezes refill_rate). Esse valor limitado é tokens_available: o que você pode gastar agora. Um burst que custa request_count tokens é permitido quando tokens_available é pelo menos request_count; ao permitir, tokens_remaining vira tokens_available menos request_count e tokens_consumed iguala request_count. Ao negar, nenhum token é gasto: tokens_remaining permanece em tokens_available, tokens_consumed é zero e deficit é request_count menos tokens_available. O tempo de espera é deficit dividido por refill_rate quando a recarga é positiva e a requisição não é maior que a capacidade; caso contrário a requisição também não poderá ser atendida depois (can_satisfy é false), o que cobre tanto um custo acima do teto de burst quanto um balde congelado com recarga zero. A capacidade é a folga de burst: um balde cheio de dez com recarga lenta ainda deixa passar um pico de dez tokens, por isso gateways escolhem capacity para picos e refill_rate para o tráfego médio sustentado.
Contrato de entrada, campos de resposta e erros de validação
Envie um corpo JSON com cinco números finitos obrigatórios. capacity deve ser maior que zero e é o máximo de tokens que o balde pode reter após a recarga. refill_rate deve ser maior ou igual a zero e se mede em tokens por segundo; zero significa que o balde nunca se recupera depois de vazio. tokens é o saldo antes de aplicar este intervalo elapsed e deve ser não negativo; valores acima de capacity são aceitos e limitados ao calcular tokens_available após a recarga. elapsed são os segundos desde a última atualização e deve ser não negativo. request_count é quantos tokens este burst precisa e deve ser maior que zero. Campos ausentes, strings não numéricas, NaN, Infinity e sinais fora da faixa falham com invalid_input nomeando o campo e não são cobrados. Em caso de sucesso o corpo ecoa as cinco entradas e devolve tokens_available após a recarga, allowed como booleano, tokens_remaining após a decisão de gasto, tokens_consumed, deficit, wait_seconds (zero quando permitido ou quando a requisição nunca pode passar), can_satisfy e uma string formula curta que reescreve a regra de atualização. Exemplo: capacity dez, refill_rate dois por segundo, tokens cinco, elapsed um e meio, request_count três produz tokens_available oito (cinco mais três da recarga, ainda sob a capacidade), allowed true, tokens_remaining cinco e wait_seconds zero. Uma segunda chamada que pede nove tokens com os mesmos oito disponíveis é negada com deficit um e wait_seconds de meio segundo a dois tokens por segundo.
Onde uma calculadora token bucket justifica o uso
Autores de edge e de gateway usam a calculadora como oráculo ao implementar baldes em Redis ou em memória, comparando a máquina de estados local com este resultado de forma fechada para entradas idênticas. Educadores e entrevistas de SRE usam-na para mostrar que token bucket não é o mesmo que um leaky bucket puro: bursts são permitidos até capacity e depois a recarga suave restaura folga. Validação falha não consome saldo. Equipes de produto de API dimensionam capacity e recarga antes de publicar uma cota: testam números candidatos e tamanhos de burst de amostra para ver se picos legítimos passam enquanto inundações abusivas esperam. Harnesses de teste de carga e scripts de caos chamam o mesmo endpoint puro para afirmar que um cliente sintético que segue wait_seconds nunca gasta além do limite documentado. Como a implementação é parse pura de nível A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo e sem rede de saída. Mantenha as requisições pequenas, fixe nos testes os campos numéricos arredondados e obtenha respostas reprodutíveis de permitir e esperar para docs de design, exemplos de SDK e ensaios em produção sem levantar um serviço completo de limite de taxa.
Casos de integração
Dimensionamento de cota de API e de burst
Ajuste capacity e refill_rate diante de bursts realistas de request_count para que os limites de produto permitam picos legítimos e ainda limitem o tráfego sustentado.
Oráculos de teste de carga e back-off do cliente
Dirija clientes sintéticos com o wait_seconds retornado e afirme que nunca excedem o contrato token-bucket documentado em cenários concorrentes.
Checagens cruzadas de implementação no gateway
Compare máquinas de estados de balde em Redis ou em processo com esta calculadora determinística para as mesmas entradas de capacity, recarga, tokens, elapsed e custo.
Perguntas técnicas
Como funciona a calculadora de limite de taxa token bucket?
Ela calcula tokens_available = min(capacity, tokens + elapsed × refill_rate), permite o burst quando esse valor é pelo menos request_count, subtrai ao permitir e, caso contrário, devolve deficit e wait_seconds = deficit / refill_rate quando a recarga pode cobrir o custo com o tempo.
Quais unidades devo usar para refill_rate e elapsed?
Use a mesma unidade de tempo para ambos: refill_rate é tokens por segundo e elapsed são segundos. Escalar os dois para milissegundos só funciona se você mantiver a coerência; a API não converte unidades por você.
E se request_count for maior que capacity?
O burst é negado com can_satisfy false e wait_seconds zero. Uma única requisição que precisa de mais tokens do que o balde pode reter nunca passará, mesmo com recarga completa.
tokens pode ser maior que capacity na entrada?
Sim. A calculadora aceita um valor de tokens não negativo acima de capacity e só limita após aplicar a recarga por elapsed, alinhada a implementações comuns que guardam um contador sem teto até a próxima atualização.
Quanto custa a calculadora token bucket?
A ferramenta no navegador é gratuita. Requisições à API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.