Motor de búsqueda distribuido inspirado en la arquitectura interna de Google (simplificado), diseñado para demostrar el manejo de sistemas distribuidos, procesamiento asíncrono y algoritmos de recuperación de información.
- Arquitectura de Microservicios: Componentes desacoplados (API, Workers, Indexador, Redis) para escalabilidad horizontal.
- Procesamiento Distribuido: Sistema de cola de tareas robusto utilizando Redis como buffer entre la API y los workers.
- Crawler Inteligente Asíncrono: Workers construidos con
asyncioyhttpxque simulan navegadores reales (User-Agent) y manejan redirecciones. - Motor de Indexación Propio: Implementación de un Índice Invertido desde cero con persistencia en disco.
- Algoritmo de Ranking: Ranking de relevancia basado en TF-IDF (Term Frequency - Inverse Document Frequency).
- Interfaz Premium: Frontend moderno con glassmorphism, orbes animados y feedback en tiempo real.
- Dockerizado: Despliegue listo para producción mediante Docker Compose.
- Backend: Python 3.10+ (FastAPI).
- Data Store & Queue: Redis.
- Procesamiento: BeautifulSoup4, httpx (async).
- Frontend: Vanilla HTML/CSS/JS (Aesthetics prioritizadas).
- Infraestructura: Docker & Docker Compose.
- API Service: Recibe URLs (
/crawl) y gestiona búsquedas (/search). Actúa como el orquestador principal. - Redis Queue: Almacena las tareas de crawling pendientes, permitiendo que múltiples workers procesen URLs en paralelo.
- Workers: Consumen URLs de Redis, descargan el HTML, lo limpian y normalizan, capturando únicamente el contenido semántico.
- Indexer Service: Mantiene el índice invertido global. Cuando un worker termina, le envía el contenido para actualizar las frecuencias de términos.
- Search Engine: Módulo integrado en el indexador que procesa queries, calcula scores TF-IDF y devuelve resultados ordenados por relevancia.
- Docker y Docker Compose
- Python 3.x (opcional, para scripts de prueba)
Levanta todo el ecosistema con un solo comando:
docker-compose up --build- Interfaz de Usuario: http://localhost:8000
- Documentación API (Swagger): http://localhost:8000/docs
- Documentación API (ReDoc): http://localhost:8000/redoc
He incluido un script que demuestra todo el sistema indexando contenido real de Wikipedia y realizando búsquedas complejas:
pip install requests
python tests/demo_system.pydocker-compose up -d --scale worker=5Para despliegues de grado empresarial, el proyecto ya incluye soporte para Kubernetes. Todos los manifiestos necesarios se encuentran en la carpeta k8s/.
- Un cluster de Kubernetes (Minikube, Kind o Cloud Provider).
- Imágenes registradas en un registry local o remoto (ej.
google-api:latest).
- Infraestructura Base (Redis + Persistence):
kubectl apply -f k8s/redis.yaml kubectl apply -f k8s/indexer.yaml # Define PVC e Indexer - Capa lógica (API + Workers):
kubectl apply -f k8s/api.yaml kubectl apply -f k8s/worker.yaml
- Escalado Dinámico:
# Escalar a 10 workers instantáneamente: kubectl scale deployment/worker --replicas=10
- Self-healing: Reinicio automático de pods en caso de fallo.
- Persistencia: El índice sobrevive a reinicios gracias a
PersistentVolumeClaims. - Descubrimiento de Servicios: Comunicación interna simplificada mediante DNS de K8s.
api/: Gateway de entrada y servicios frontend.workers/: Lógica del crawler distribuído.indexer/: El corazón del motor: índice invertido y ranking.utils/: Componentes compartidos (Redis Client, Logic Parser).tests/: Scripts de demostración y validación.storage/: Persistencia del índice en formato JSON.
Este proyecto fue desarrollado como parte de un sistema de búsqueda distribuida escalable.
