Outils

DispyCluster

2026 loupix57 Actif
DispyCluster

Cluster de calcul distribue Raspberry Pi - scraping, monitoring, API, Dispy

Technologies

PythonRaspberry PiDispy

Documentation du projet

DispyCluster

Cluster de calcul distribué basé sur Dispy pour Raspberry Pi avec services avancés de scraping et monitoring.

Vue d'ensemble

DispyCluster est un système complet pour orchestrer des tâches de scraping sur un cluster de Raspberry Pi. Il combine la puissance de Dispy avec des services modernes de contrôle, monitoring et planification.

Fonctionnalités principales

  • Cluster distribué : Orchestration de tâches sur plusieurs Raspberry Pi
  • Scraping intelligent : Distribution automatique des tâches de scraping
  • Monitoring en temps réel : Surveillance des performances et santé du cluster
  • Planification avancée : Tâches récurrentes et workflows complexes
  • API unifiée : Interface REST pour tous les services
  • Tableau de bord : Visualisation des métriques et statuts

Architecture


┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐

│ API Gateway │ │ Cluster Control │ │ Monitoring │

│ (Port 8084) │◄──►│ (Port 8081) │◄──►│ (Port 8082) │

└─────────────────┘ └─────────────────┘ └─────────────────┘

│ │ │

│ │ │

▼ ▼ ▼

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐

│ Scheduler │ │ Dispy Master │ │ Prometheus │

│ (Port 8083) │ │ (Port 51347) │ │ (Port 9090) │

└─────────────────┘ └─────────────────┘ └─────────────────┘

│ │ │

│ │ │

▼ ▼ ▼

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐

│ Workers │ │ Workers │ │ Grafana │

│ (node6-14.lan) │ │ (node6-14.lan) │ │ (Port 3000) │

└─────────────────┘ └─────────────────┘ └─────────────────┘

Installation rapide

Prérequis

  • Raspberry Pi OS récent sur chaque nœud
  • Accès SSH depuis le maître vers chaque worker
  • Docker et Docker Compose sur le maître

Installation du cluster de base

  • Configurer l'inventaire :
  • 
    

    Éditer la liste des nœuds

    nano inventory/nodes.yaml

  • Installer les workers :
  • 
    

    Sur chaque Raspberry Pi worker

    sudo bash scripts/installnode.sh

  • Installer le maître :
  • 
    

    Sur le nœud maître

    sudo bash scripts/installmaster.sh

  • Installer les services avancés :
  • 
    

    Sur le nœud maître

    sudo bash scripts/installservices.sh

  • Démarrer le monitoring :
  • 
    cd monitoring
    

    docker compose up -d

    Services

    API Gateway (Port 8084)

    Point d'entrée unifié pour tous les services.

    Endpoints principaux :
    • GET / - Informations sur l'API
    • GET /health - Santé de tous les services
    • GET /overview - Vue d'ensemble du cluster
    • GET /dashboard - Données pour tableau de bord
    • POST /scrape - Scraping rapide
    • POST /scrape/batch - Scraping en lot

    Cluster Controller (Port 8081)

    Gestion centralisée du cluster et des jobs.

    Fonctionnalités :
    • Gestion des workers
    • File de jobs avec priorités
    • Distribution automatique des tâches
    • Surveillance des performances

    Monitoring Service (Port 8082)

    Surveillance en temps réel du cluster.

    Fonctionnalités :
    • Collecte automatique des métriques
    • Surveillance de la santé des nœuds
    • Détection d'alertes
    • Rapports de performance

    Scheduler Service (Port 8083)

    Planification et automatisation des tâches.

    Fonctionnalités :
    • Tâches planifiées (cron, intervalle, ponctuel)
    • Workflows complexes
    • Gestion des dépendances
    • Historique des exécutions

    Utilisation

    Scraping simple

    
    

    Scraping d'un site

    curl -X POST http://localhost:8084/scrape \

    -H "Content-Type: application/json" \

    -d '{"starturl": "https://example.com", "maxpages": 10}'

    Scraping en lot

    
    

    Scraping de plusieurs sites

    curl -X POST http://localhost:8084/scrape/batch \

    -H "Content-Type: application/json" \

    -d '{

    "urls": ["https://site1.com", "https://site2.com"],

    "maxpages": 5,

    "priority": 3

    }'

    Tâche planifiée

    
    

    Tâche quotidienne à 6h du matin

    curl -X POST http://localhost:8083/tasks \

    -H "Content-Type: application/json" \

    -d '{

    "name": "Scraping quotidien",

    "urls": ["https://news.com"],

    "scheduletype": "cron",

    "scheduleconfig": {"cron": "0 6 "}

    }'

    Workflow complexe

    
    import requests
    

    Créer un workflow avec étapes séquentielles

    workflowsteps = [

    {

    "stepid": "step1",

    "name": "Scraping initial",

    "action": "scrape",

    "config": {"urls": ["https://site1.com"], "maxpages": 5}

    },

    {

    "stepid": "step2",

    "name": "Attente",

    "action": "wait",

    "config": {"seconds": 60},

    "dependson": ["step1"]

    },

    {

    "stepid": "step3",

    "name": "Scraping final",

    "action": "scrape",

    "config": {"urls": ["https://site2.com"], "maxpages": 10},

    "dependson": ["step2"]

    }

    ]

    response = requests.post("http://localhost:8083/workflows", json={

    "name": "Workflow complexe",

    "steps": workflowsteps,

    "scheduletype": "interval",

    "scheduleconfig": {"seconds": 3600}

    })

    Monitoring

    Tableau de bord

    Accédez au tableau de bord via l'API Gateway :

    
    curl http://localhost:8084/dashboard | jq
    

    Métriques Prometheus

    • Prometheus : http://<ipmaitre>:9090
    • Grafana : http://<ipmaitre>:3000 (admin/admin)

    Surveillance des performances

    
    

    Rapport de performance sur 24h

    curl http://localhost:8082/performance?hours=24

    Alertes actives

    curl http://localhost:8082/alerts

    Santé du cluster

    curl http://localhost:8082/cluster/health

    Gestion des services

    Démarrage/arrêt

    
    

    Démarrer tous les services

    sudo /opt/dispycluster/startservices.sh

    Arrêter tous les services

    sudo /opt/dispycluster/stopservices.sh

    Vérifier le statut

    sudo /opt/dispycluster/checkservices.sh

    Logs

    
    

    Logs du contrôleur

    journalctl -u dispycluster-controller -f

    Logs du monitoring

    journalctl -u dispycluster-monitoring -f

    Logs du planificateur

    journalctl -u dispycluster-scheduler -f

    Logs de l'API Gateway

    journalctl -u dispycluster-gateway -f

    Tests

    
    

    Test complet des services

    sudo bash scripts/testservices.sh

    Exemples d'utilisation

    python3 examples/clusterusageexamples.py

    Configuration

    Fichiers de configuration

    • config/servicesconfig.py - Configuration centralisée
    • inventory/nodes.yaml - Liste des nœuds du cluster
    • monitoring/docker-compose.yml - Configuration Prometheus/Grafana

    Variables d'environnement

    
    

    Environnement (development, staging, production)

    export DISPYCLUSTERENV=development

    Configuration personnalisée

    export DISPYCLUSTERLOGLEVEL=INFO

    export DISPYCLUSTERMAXWORKERS=10

    Structure du projet

    
    DispyCluster/
    

    ├── docs/ # Documentation

    │ ├── READMEORIGINAL.md # README original

    │ ├── SERVICESREADME.md # Documentation des services

    │ └── ARCHITECTURE.md # Architecture du système

    ├── services/ # Services avancés

    │ ├── clustercontroller.py # Contrôleur du cluster

    │ ├── monitoringservice.py # Service de monitoring

    │ ├── schedulerservice.py # Planificateur

    │ ├── apigateway.py # API Gateway

    │ └── scraperservice.py # Service de scraping

    ├── config/ # Configuration

    │ └── servicesconfig.py # Configuration centralisée

    ├── scripts/ # Scripts d'installation

    │ ├── installservices.sh # Installation des services

    │ └── testservices.sh # Tests des services

    ├── examples/ # Exemples d'utilisation

    │ └── clusterusageexamples.py # Exemples complets

    ├── core/ # Cœur du cluster Dispy

    ├── workers/ # Workers d'exemple

    ├── monitoring/ # Configuration Prometheus/Grafana

    └── inventory/ # Inventaire des nœuds

    Dépannage

    Services non accessibles

  • Vérifier que les services sont démarrés :
  • 
    sudo systemctl status dispycluster-
    
  • Vérifier les ports :
  • 
    sudo netstat -tlnp | grep -E "808[0-4]"
    
  • Vérifier les logs :
  • 
    journalctl -u dispycluster-controller --since "1 hour ago"
    

    Workers non détectés

  • Vérifier la connectivité réseau :
  • 
    ping node6.lan
    
  • Vérifier les services sur les workers :
  • 
    curl http://node6.lan:8080/health
    
  • Ping via l'API :
  • 
    curl -X POST http://localhost:8081/workers/node6.lan/ping
    

    Documentation

    Toute la documentation a été regroupée dans docs/. Commence ici:

    • docs/README.md - Sommaire et liens rapides
    • docs/QUICKSTART.md - Démarrage rapide
    • docs/TROUBLESHOOTING.md - Dépannage
    • docs/ARCHITECTURE.md - Architecture
    • docs/SERVICESREADME.md - Services
    • docs/READMEORIGINAL.md - README original

    Support

    Pour signaler des problèmes ou proposer des améliorations, consultez les logs des services et utilisez les outils de diagnostic fournis.

    Les services sont conçus pour être modulaires et extensibles. Chaque service peut être modifié indépendamment sans affecter les autres.

    Code source

    Projet open source hébergé sur GitHub.

    • 0 étoiles
    • 0 forks
    • Python
    Voir le dépôt GitHub

    Projets suggeres