Skip to content

Gerijacki/QuantumSearch

Repository files navigation

Quantum Search 🚀

Distributed Search Engine (Scraper + Indexador + Search Engine)

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

✨ Características Principales

  • 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 asyncio y httpx que 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.

🏗️ Stack Tecnológico

  • Backend: Python 3.10+ (FastAPI).
  • Data Store & Queue: Redis.
  • Procesamiento: BeautifulSoup4, httpx (async).
  • Frontend: Vanilla HTML/CSS/JS (Aesthetics prioritizadas).
  • Infraestructura: Docker & Docker Compose.

📋 Arquitectura Técnica

  1. API Service: Recibe URLs (/crawl) y gestiona búsquedas (/search). Actúa como el orquestador principal.
  2. Redis Queue: Almacena las tareas de crawling pendientes, permitiendo que múltiples workers procesen URLs en paralelo.
  3. Workers: Consumen URLs de Redis, descargan el HTML, lo limpian y normalizan, capturando únicamente el contenido semántico.
  4. Indexer Service: Mantiene el índice invertido global. Cuando un worker termina, le envía el contenido para actualizar las frecuencias de términos.
  5. Search Engine: Módulo integrado en el indexador que procesa queries, calcula scores TF-IDF y devuelve resultados ordenados por relevancia.

⚙️ Cómo empezar

Requisitos previos

  • Docker y Docker Compose
  • Python 3.x (opcional, para scripts de prueba)

Despliegue

Levanta todo el ecosistema con un solo comando:

docker-compose up --build

Acceso

🧪 Pruebas y Validación

Prueba Automatizada (Demo Full Pipeline)

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.py
docker-compose up -d --scale worker=5

☸️ Orquestación con Kubernetes

Para despliegues de grado empresarial, el proyecto ya incluye soporte para Kubernetes. Todos los manifiestos necesarios se encuentran en la carpeta k8s/.

Requisitos

  • Un cluster de Kubernetes (Minikube, Kind o Cloud Provider).
  • Imágenes registradas en un registry local o remoto (ej. google-api:latest).

Despliegue Paso a Paso

  1. Infraestructura Base (Redis + Persistence):
    kubectl apply -f k8s/redis.yaml
    kubectl apply -f k8s/indexer.yaml # Define PVC e Indexer
  2. Capa lógica (API + Workers):
    kubectl apply -f k8s/api.yaml
    kubectl apply -f k8s/worker.yaml
  3. Escalado Dinámico:
    # Escalar a 10 workers instantáneamente:
    kubectl scale deployment/worker --replicas=10

Beneficios de la versión K8s

  • 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.

📂 Estructura del Repositorio

  • 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.

About

Distributed Search Engine (Scraper + Indexador + Search Engine)

Resources

License

Stars

Watchers

Forks

Contributors