Go Academy · Lección

Concepto del token bucket

Limite las tasas de solicitudes

Lección 1 de 413 pasos

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
Gratis para empezar

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

  1. Concepto del token bucket
  2. golang.org/x/time/rate
  3. Limitación de goroutines
  4. Retirada progresiva y reintento
← Volver a Go Academy