Calculadora token bucket
Un cubo de 10 tokens con 5 dentro, que se recarga a 2 por segundo, tiene 8 disponibles tras 1,5 segundos, así que una ráfaga de 3 pasa y deja 5. Escriba sus cifras para ver si se permite o se deniega y cuánto esperar. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Capacidad
- 10
- Tasa de recarga
- 2
- Tokens
- 5
- Tiempo transcurrido
- 1,5
- Número de solicitudes
- 3
- Tokens disponibles
- 8
- Tokens restantes
- 5
- Tokens consumidos
- 3
- Déficit
- 0
Se mantiene un cubo de tokens hasta una capacidad fija, se rellena a ritmo constante y se gastan tokens cuando llega una petición o una ráfaga. Esta calculadora de límite de tasa token bucket acepta la capacidad, la tasa de recarga en tokens por segundo, el conteo actual de tokens, los segundos transcurridos desde la última actualización y cuántos tokens necesita la siguiente ráfaga. Rellena el cubo con un tope duro en la capacidad, decide permitir o denegar, informa de los tokens restantes tras la decisión y, si la ráfaga se deniega, calcula cuánto debe esperar para acumular tokens suficientes—o indica que la petición nunca podrá satisfacerse porque supera la capacidad o la recarga es cero.
Cómo decide el cubo
Un token bucket guarda un saldo de tokens que nunca supera una capacidad fija. El tiempo añade tokens a una tasa de recarga constante y cada ráfaga gasta tantos tokens como cuesta. Para decidir, la calculadora primero recarga: suma al saldo actual los segundos transcurridos multiplicados por la tasa y limita el resultado a la capacidad. Eso es lo que se puede gastar en ese momento. Si cubre el coste, la ráfaga se permite y el coste se descuenta. En el ejemplo, 5 tokens más 1,5 segundos a 2 por segundo suman 8, de modo que una ráfaga de 3 pasa y quedan 5. El tiempo transcurrido lo indica usted, así que las mismas cifras dan siempre la misma respuesta.
Para qué sirve y los errores habituales
Sirve para contrastar la cuota de una pasarela o un limitador de su propio código con una referencia, para explicar un diseño en una revisión o para preparar simulaciones de carga. Es especialmente útil en los casos límite donde fallan los limitadores escritos a mano: un cubo ya lleno, una recarga parcial y una ráfaga mayor que el techo. Un error común es olvidar el tope, lo que deja crecer el saldo sin límite tras una pausa larga y permite ráfagas mucho mayores de lo previsto. Otro es tratar una ráfaga mayor que la capacidad como si solo necesitara paciencia: ninguna espera la hará caber, y la calculadora lo dice.
Preguntas frecuentes
¿Cuántos tokens hay disponibles después de una pausa?
Sume a los tokens actuales los segundos transcurridos multiplicados por la tasa de recarga y limite el resultado a la capacidad. Con 5 tokens, una tasa de 2 por segundo y 1,5 segundos transcurridos, tiene 8, siempre que la capacidad llegue a esa cifra.
¿Cuánto hay que esperar cuando se deniega una ráfaga?
La calculadora divide el déficit, es decir, los tokens que faltan, entre la tasa de recarga. El resultado son los segundos que debe esperar hasta que la ráfaga quepa en el cubo.
¿Cuándo no se puede permitir nunca una ráfaga?
Cuando cuesta más tokens de los que el cubo puede contener, o cuando la tasa de recarga es cero y el cubo no tiene ya suficientes. En ambos casos la calculadora lo indica claramente en lugar de dar un tiempo de espera.
¿Qué significan en la práctica la capacidad y la tasa de recarga?
La capacidad es la ráfaga más grande que el cubo admite de una vez, su techo. La tasa de recarga, en tokens por segundo, es el ritmo constante que puede sostener con el tiempo una vez gastada esa ráfaga.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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)Ejemplo de solicitud
{
"capacity": 10,
"refill_rate": 2,
"tokens": 5,
"elapsed": 1.5,
"request_count": 3
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.token_bucket",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
El limitador de tasa token bucket es el modelo habitual detrás del throttling de API, las cuotas de puerta de enlace y la contrapresión en el cliente. El mismo módulo puro y determinista alimenta la herramienta gratuita del navegador y la ruta de la API, de modo que revisiones de diseño, scripts de prueba de carga y simuladores de producción no discrepan en casos límite como un cubo lleno, una recarga parcial o una petición mayor que el techo de ráfaga.
Cómo el algoritmo token bucket decide permitir o denegar
El token bucket almacena un saldo de tokens no negativo que nunca supera la capacidad. El tiempo transcurrido lo aporta quien llama para que la matemática sea determinista—no se lee el reloj del sistema—, de modo que las mismas entradas producen siempre la misma decisión, el mismo saldo restante y los mismos segundos de espera en runtimes y goldens. Entre comprobaciones, los tokens se acumulan a refill_rate tokens por segundo durante el intervalo elapsed y luego el saldo se acota con min(capacity, tokens + elapsed por refill_rate). Ese valor acotado es tokens_available: lo que puede gastar ahora mismo. Una ráfaga que cuesta request_count tokens se permite cuando tokens_available es al menos request_count; al permitir, tokens_remaining pasa a ser tokens_available menos request_count y tokens_consumed iguala request_count. Al denegar no se gastan tokens: tokens_remaining se mantiene en tokens_available, tokens_consumed es cero y deficit es request_count menos tokens_available. El tiempo de espera es deficit dividido entre refill_rate cuando la recarga es positiva y la petición no supera la capacidad; en caso contrario la petición tampoco podrá satisfacerse más adelante (can_satisfy es false), lo que cubre tanto un coste por encima del techo de ráfaga como un cubo congelado con recarga cero. La capacidad es el margen de ráfaga: un cubo lleno de diez con recarga lenta aún deja pasar un pico de diez tokens, por eso las puertas de enlace eligen capacity para picos y refill_rate para el tráfico medio sostenido.
Contrato de entrada, campos de respuesta y errores de validación
Envíe un cuerpo JSON con cinco números finitos obligatorios. capacity debe ser mayor que cero y es el máximo de tokens que el cubo puede retener tras la recarga. refill_rate debe ser mayor o igual que cero y se mide en tokens por segundo; cero significa que el cubo no se recupera una vez vacío. tokens es el saldo antes de aplicar este intervalo elapsed y debe ser no negativo; se aceptan valores por encima de capacity y se acotan al calcular tokens_available tras la recarga. elapsed son los segundos desde la última actualización y debe ser no negativo. request_count es cuántos tokens necesita esta ráfaga y debe ser mayor que cero. Campos ausentes, cadenas no numéricas, NaN, Infinity y signos fuera de rango fallan con invalid_input nombrando el campo y no se facturan. En caso de éxito el cuerpo repite las cinco entradas y devuelve tokens_available tras la recarga, allowed como booleano, tokens_remaining tras la decisión de gasto, tokens_consumed, deficit, wait_seconds (cero si se permite o si la petición nunca puede pasar), can_satisfy y una cadena formula breve que reescribe la regla de actualización. Ejemplo: capacity diez, refill_rate dos por segundo, tokens cinco, elapsed uno y medio, request_count tres produce tokens_available ocho (cinco más tres de recarga, aún bajo capacidad), allowed true, tokens_remaining cinco y wait_seconds cero. Una segunda llamada que pide nueve tokens con los mismos ocho disponibles se deniega con deficit uno y wait_seconds de medio segundo a dos tokens por segundo.
Dónde una calculadora token bucket aporta valor real
Autores de edge y de puerta de enlace usan la calculadora como oráculo al implementar cubos en Redis o en memoria, comparando su máquina de estados local con este resultado de forma cerrada para entradas idénticas. Educadores y entrevistas SRE la emplean para mostrar que token bucket no es lo mismo que un leaky bucket puro: se permiten ráfagas hasta capacity y luego la recarga suave restablece margen. La validación fallida no consume saldo. Los equipos de producto de API dimensionan capacity y recarga antes de publicar una cuota: prueban cifras candidatas y tamaños de ráfaga de muestra para ver si los picos legítimos pasan mientras las inundaciones abusivas esperan. Los arneses de prueba de carga y los scripts de caos llaman al mismo endpoint puro para afirmar que un cliente sintético que respeta wait_seconds nunca gasta de más respecto al límite documentado. Como la implementación es parse pura de nivel A, cada llamada exitosa cuesta el precio base publicado $0.002 sin tokens de modelo ni red saliente. Mantenga las peticiones pequeñas, fije en las pruebas los campos numéricos redondeados y obtendrá respuestas reproducibles de permitir y esperar para documentos de diseño, ejemplos de SDK y ensayos en producción sin montar un servicio completo de límite de tasa.
Casos de integración
Dimensionado de cuota API y de ráfaga
Ajuste capacity y refill_rate frente a ráfagas realistas de request_count para que los límites de producto admitan picos legítimos y sigan acotando el tráfico sostenido.
Oráculos de prueba de carga y back-off del cliente
Impulse clientes sintéticos con el wait_seconds devuelto y compruebe que nunca superan el contrato token-bucket documentado en escenarios concurrentes.
Comprobaciones cruzadas de implementación en la puerta de enlace
Compare máquinas de estados de cubo en Redis o en proceso con esta calculadora determinista para las mismas entradas de capacity, recarga, tokens, elapsed y coste.
Preguntas técnicas
¿Cómo funciona la calculadora de límite de tasa token bucket?
Calcula tokens_available = min(capacity, tokens + elapsed × refill_rate), permite la ráfaga cuando ese valor es al menos request_count, resta al permitir y, en caso contrario, devuelve deficit y wait_seconds = deficit / refill_rate cuando la recarga puede cubrir el coste con el tiempo.
¿Qué unidades debo usar para refill_rate y elapsed?
Use la misma unidad de tiempo en ambos: refill_rate es tokens por segundo y elapsed son segundos. Escalar ambos a milisegundos solo funciona si se mantienen coherentes; la API no convierte unidades por usted.
¿Qué ocurre si request_count es mayor que capacity?
La ráfaga se deniega con can_satisfy false y wait_seconds cero. Una sola petición que necesita más tokens de los que el cubo puede retener jamás pasará, aunque se rellene por completo.
¿Puede tokens ser mayor que capacity en la entrada?
Sí. La calculadora acepta un valor de tokens no negativo por encima de capacity y solo acota tras aplicar la recarga por elapsed, alineada con implementaciones habituales que guardan un contador sin tope hasta la siguiente actualización.
¿Cuánto cuesta la calculadora token bucket?
La herramienta del navegador es gratuita. Las peticiones a la API usan saldo prepago KIT a $0.002 por llamada exitosa; la entrada inválida no se factura.