DispyCluster
Cluster de calcul distribue Raspberry Pi - scraping, monitoring, API, Dispy
Technologies
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
Éditer la liste des nœuds
nano inventory/nodes.yaml
Sur chaque Raspberry Pi worker
sudo bash scripts/installnode.sh
Sur le nœud maître
sudo bash scripts/installmaster.sh
Sur le nœud maître
sudo bash scripts/installservices.sh
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
sudo systemctl status dispycluster-
sudo netstat -tlnp | grep -E "808[0-4]"
journalctl -u dispycluster-controller --since "1 hour ago"
Workers non détectés
ping node6.lan
curl http://node6.lan:8080/health
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.
Projets suggeres
CvLetterAssistant
Demo lettre de motivation et tips CV avec LLM local (Ollama), Express
OutilsJobHunter
Systeme de scrapping intelligent d'offres d'emploi et d'interim (Indeed, HelloWork, LinkedIn, France Travail, Actual). A...
OutilsYoutubeDownloader
Plateforme telechargement videos YouTube, Dailymotion - Python AngularJS
OutilsDispyCluster
Système de clustering distribué pour le traitement de données.