Módulo 7: Production Patterns
Scaling Patterns
Horizontal Scaling
# Multiple workers procesando en paralelo
# - Worker 1: Procesa batch 1-1000
# - Worker 2: Procesa batch 1001-2000
# - Worker 3: Procesa batch 2001-3000
Message Queue (Celery + Redis)
from celery import Celery
app = Celery('embeddings', broker='redis://localhost:6379')
@app.task
def generate_embedding_async(text):
"""Task asíncrona"""
embedding = get_embedding(text)
save_to_db(embedding)
return embedding
# Enqueue
result = generate_embedding_async.delay("Python is great")
# Check status
if result.ready():
embedding = result.get()
Batch Processing
def process_batch(texts, batch_size=100):
"""Batch processing eficiente"""
for i in range(0, len(texts), batch_size):
batch = texts[i:i+batch_size]
# API call (batch)
embeddings = client.embeddings.create(
model="text-embedding-3-small",
input=batch
).data
# Save
save_embeddings_bulk(embeddings)
# Rate limit
time.sleep(0.1)
Load Balancing
# Multiple API keys (round-robin)
api_keys = [key1, key2, key3]
current_key_idx = 0
def get_client():
global current_key_idx
client = OpenAI(api_key=api_keys[current_key_idx])
current_key_idx = (current_key_idx + 1) % len(api_keys)
return client
Resumen
- ✅ Horizontal: Multiple workers
- ✅ Queue: Celery + Redis
- ✅ Batch: Process 100-1000 at once
- ✅ Load balancing: Round-robin API keys
Módulo 7 - Cápsula 05