Capítulo 1: Escalabilidade de Aplicações RAG
Desafios de Escalabilidade
| Desafio | Impacto | Solução |
|---|---|---|
| Milhões de docs | Indexação lenta | Processamento em lote |
| Alto QPS | Timeout | Balanceamento de carga |
| Vetores grandes | Limites de memória | Sharding |
Bancos de Dados Vetoriais Distribuídos
# Configuração de cluster Milvus
from pymilvus import connections, Collection
# Conectar ao cluster distribuído
connections.connect(
alias="default",
host="milvus-cluster",
port="19530"
)
# Dados distribuídos automaticamente entre os nós
Processamento Assíncrono
import asyncio
from langchain.embeddings import OpenAIEmbeddings
async def batch_embed_async(texts, batch_size=100):
"""Embed texts in async batches"""
embeddings = OpenAIEmbeddings()
async def embed_batch(batch):
return await asyncio.to_thread(
embeddings.embed_documents, batch
)
tasks = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
tasks.append(embed_batch(batch))
results = await asyncio.gather(*tasks)
return [e for batch in results for e in batch]
Indexação Baseada em Fila
# Produtor: Adiciona à fila
import redis
r = redis.Redis()
r.lpush("index_queue", document_json)
# Consumidor: Processa a fila
while True:
doc = r.brpop("index_queue")
process_and_index(doc)
Recomendações de Escala
| Documentos | Arquitetura |
|---|---|
| <100K | Instância única |
| 100K-1M | Banco de dados replicado |
| 1M-10M | Cluster com sharding |
| >10M | Sistema distribuído |