Limitación de velocidad

Implementación de IA en producción con FastAPI

Matt Eckerle

Software and Data Engineering Leader

Introducción a la limitación de velocidad

un semáforo

 

  • Propósito: Controla la frecuencia de las solicitudes a la API.
  • Respuesta: Devuelve HTTP 429 («Too Many Requests») cuando se supera el límite.
Implementación de IA en producción con FastAPI

Cómo funciona la limitación de velocidad

Parte 1 del diagrama de flujo que explica la limitación de velocidad

Implementación de IA en producción con FastAPI

Autenticación de credenciales entrantes

Parte 2 del diagrama de flujo que explica la limitación de velocidad

Implementación de IA en producción con FastAPI

Comprobación de límite de velocidad

Parte 3 del diagrama de flujo que explica la limitación de velocidad

Implementación de IA en producción con FastAPI

Configurar nuestra API

from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import APIKeyHeader
from pydantic import BaseModel

app = FastAPI()
model = SentimentAnalyzer(pkl_file_path)

API_KEY_HEADER = APIKeyHeader(name="X-API-Key")
API_KEY = "your-secret-key"
Implementación de IA en producción con FastAPI

La lógica del limitador de velocidad

from datetime import datetime, timedelta

class RateLimiter:
    def __init__(self, requests_per_min: int = 10):
        self.requests_per_min = requests_per_min
        self.requests = defaultdict(list)

def is_rate_limited( self, api_key: str ) -> tuple[bool, int]:

Parte 1 del diagrama de flujo de la lógica para implementar la limitación de velocidad

Implementación de IA en producción con FastAPI

Eliminar solicitudes antiguas

from datetime import datetime, timedelta

class RateLimiter:
    def __init__(self, requests_per_min: int = 10):
        self.requests_per_min = requests_per_min
        self.requests = defaultdict(list)

def is_rate_limited( self, api_key: str ) -> tuple[bool, int]:
now = datetime.now() minute_ago = now - timedelta(minutes=1) self.requests[api_key] = [ req_time for req_time in self.requests[api_key] if req_time > minute_ago ]

Parte 2 del diagrama de flujo que explica la limitación de velocidad

Implementación de IA en producción con FastAPI

Comprobar el número de solicitudes

    def is_rate_limited(self, api_key: str) -> 
  tuple[bool, int]:
        now = datetime.now()
        minute_ago = now - timedelta(minutes=1)

self.requests[api_key] = [ req_time for req_time in self.requests[api_key] if req_time > minute_ago ]
recent_requests = len(self.requests[api_key]) if recent_requests >= self.requests_per_min: return True, 0 self.requests[api_key].append(now) return False

Un diagrama que representa la comprobación del número de solicitudes hechas a la API: si el recuento es mayor o igual que el límite, devuelve true; si no, devuelve false.

Implementación de IA en producción con FastAPI

Añadir comprobación de límite de velocidad

rate_limiter = RateLimiter(requests_per_minute=10)

def test_api_key(api_key: str = Depends(API_KEY_HEADER)): if api_key != API_KEY: raise HTTPException( status_code=403, detail="Invalid API key" ) is_limited, _ = rate_limiter.is_rate_limited(api_key) if is_limited: raise HTTPException( status_code=429, detail="Rate limit exceeded. Please try again later." ) return api_key
Implementación de IA en producción con FastAPI

Aplicar límite de velocidad al endpoint

@app.post("/predict")
def predict_sentiment(
    request: SentimentRequest,
    api_key: str = Depends(test_api_key)
):
    result = sentiment_model(request.text)

    _, requests_remaining = 
           rate_limiter.is_rate_limited(api_key)

    return {
        "text": request.text,
        "sentiment": result[0]["label"].lower(),
        "confidence": result[0]["score"],
        "requests_remaining": requests_remaining
    }

Envía la solicitud 11 veces:

curl -X POST "http://localhost:8000/predict" \
     -H "Content-Type: application/json" \
     -H "X-API-Key: your-secret-key" \
     -d '{"text": "I love this product"}'

Salida:

{"detail":"Rate limit exceeded. 
           Please try again later."}
Implementación de IA en producción con FastAPI

¡Vamos a practicar!

Implementación de IA en producción con FastAPI

Preparing Video For Download...