Pular para o conteúdo principal

Capítulo 1: Escalabilidade de Aplicações RAG

Desafios de Escalabilidade​

DesafioImpactoSolução
Milhões de docsIndexação lentaProcessamento em lote
Alto QPSTimeoutBalanceamento de carga
Vetores grandesLimites de memóriaSharding

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​

DocumentosArquitetura
<100KInstância única
100K-1MBanco de dados replicado
1M-10MCluster com sharding
>10MSistema distribuído