Concepto del token bucket
Limite las tasas de solicitudes
Concepto del token bucket es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Por qué limitar la tasa
La limitación de tasa establece un máximo para el número de operaciones que ocurren por unidad de tiempo. Protege las API frente al abuso, respeta las cuotas de terceros y mantiene la estabilidad de los sistemas bajo carga.
- Evita la sobrecarga
- Impone un uso equitativo
- Respeta los límites de los servicios ascendentes
El modelo del cubo de tokens
Imagine un cubo que contiene tokens. Cada solicitud debe tomar un token para poder continuar. Los tokens se reponen a un ritmo constante. Si el cubo está vacío, la solicitud espera o se rechaza.
Tasa y ráfaga
Dos parámetros definen un cubo de tokens: la tasa (tokens añadidos por segundo) y la ráfaga (capacidad del cubo). La ráfaga permite picos breves por encima de la tasa constante.
Reposición con el tiempo
Si la tasa es de 5 tokens por segundo, aparece aproximadamente un token cada 200 milisegundos. El cubo nunca contiene más tokens que su capacidad de ráfaga, por lo que la capacidad sin usar no se acumula indefinidamente.
Permitir ráfagas
Una ráfaga de 10 significa que pueden ejecutarse hasta 10 solicitudes al instante si el cubo está lleno. Después, las solicitudes se espacian según la tasa constante. Esto equilibra la capacidad de respuesta y el control.
Una comprobación sencilla basada en el tiempo
Puede aproximar la limitación de tasa con un ticker que libere permisos a intervalos fijos. Cada solicitud espera al siguiente tick.
ticker := time.NewTicker(200 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("request", i)
}Cubo de tokens frente a cubo con fugas
Un cubo con fugas se vacía a una tasa constante y suaviza completamente la salida, por lo que no permite ráfagas. Un cubo de tokens permite ráfagas hasta alcanzar su capacidad. El cubo de tokens es más habitual para limitar API.
Una simulación mínima de un cubo
Este ejemplo ejecutable simula un cubo de tokens con capacidad para 3 tokens que se repone cada 100 ms y muestra qué solicitudes se permiten.
package main
import (
"fmt"
"time"
)
func main() {
tokens := 3
last := time.Now()
rate := 100 * time.Millisecond
for i := 0; i < 6; i++ {
elapsed := time.Since(last)
refill := int(elapsed / rate)
if refill > 0 {
tokens += refill
if tokens > 3 {
tokens = 3
}
last = time.Now()
}
if tokens > 0 {
tokens--
fmt.Println("request", i, "allowed")
} else {
fmt.Println("request", i, "rejected")
}
time.Sleep(40 * time.Millisecond)
}
}Allow frente a Wait y Reserve
Los limitadores suelen ofrecer tres comportamientos: Allow devuelve inmediatamente true o false, Wait se bloquea hasta que haya un token disponible y Reserve indica cuánto tiempo se debe esperar. Elija uno según si puede bloquear la ejecución.
Dónde se aplican los límites
Los límites de tasa pueden ser por cliente, por endpoint o globales. Un mapa de limitadores indexado por la dirección IP del cliente aplica cuotas por cliente, mientras que un único limitador compartido limita el rendimiento total.
Elegir los parámetros
Adapte la tasa a la cuota del servicio descendente. Si una API permite 600 solicitudes por minuto, establezca la tasa en 10 por segundo. Establezca la ráfaga para absorber los picos previstos sin superar el promedio.
Comprobación rápida
Compruebe cuánto entiende del cubo de tokens.
Recapitulación
Ha aprendido el concepto del cubo de tokens:
- Los tokens se consumen por solicitud y se reponen a una determinada tasa
- La ráfaga es la capacidad del cubo para absorber picos
- El cubo de tokens permite ráfagas; el cubo con fugas no
- Allow, Wait y Reserve son las API habituales
Aprende Go con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Concepto del token bucket» es gratis?
Sí — el texto completo de «Concepto del token bucket» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Concepto del token bucket»?
Limite las tasas de solicitudes Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Concepto del token bucket»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Concepto del token bucket
- golang.org/x/time/rate
- Limitación de goroutines
- Retirada progresiva y reintento