docs: Final architecture - 2 CrateDB datasources in Grafana (Orion + Stellio)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Architecture Smart City - Multi Context Broker (Updated 2026-05-06)
|
||||
# Architecture Finale Smart City - 2 Pipelines Isolées (CORRIGÉ 18h05)
|
||||
|
||||
## Principe : 1 IoT-Agent, 1 QuantumLeap, 1 CrateDB par Context Broker
|
||||
## Principe : Chaque Context Broker a sa propre pipeline
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
@@ -11,7 +11,6 @@
|
||||
▼ ▼ ▼
|
||||
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
||||
│ EMQX Broker │ │ Mosquitto Broker │ │ BunkerM Broker │
|
||||
│ (port 11883) │ │ (port 1883) │ │ (port 1900) │
|
||||
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
@@ -21,7 +20,6 @@
|
||||
│ Apikey: smart- │ │ Apikey: smart- │ │ Apikey: smart- │
|
||||
│ city-api-key │ │ city-api-key │ │ city-api-key │
|
||||
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
|
||||
│ │ │
|
||||
└───────────────────────┴──────────────────────┘
|
||||
│
|
||||
▼
|
||||
@@ -61,74 +59,79 @@
|
||||
└─────────────────────┘
|
||||
```
|
||||
|
||||
## Services déployés (par Context Broker)
|
||||
## Pipelines Complètes
|
||||
|
||||
### Pour Orion-LD
|
||||
| Service | Container | Port | Description |
|
||||
|---------|-----------|------|-------------|
|
||||
| **IoT-Agent** | smart-city-iot-agent-emqx | 4041 | Reçoit MQTT EMQX |
|
||||
| **Context Broker** | smart-city-orion-ld | 1026 | Orion-LD (NGSI-v2) |
|
||||
| **QuantumLeap** | smart-city-quantumleap | 8668 | Time-series pour Orion |
|
||||
| **CrateDB** | smart-city-cratedb | 5432/4200 | Stockage Orion |
|
||||
### Pipeline 1 : Orion-LD ✅ (Opérationnel)
|
||||
1. Simulateur → 3 MQTT Brokers
|
||||
2. 3 IoT-Agents → Orion-LD (1026)
|
||||
3. **Orion-LD Subscription** → QuantumLeap-Orion (8668) ✅
|
||||
4. QuantumLeap-Orion → CrateDB-Orion (5432) ✅
|
||||
5. Grafana ← CrateDB-Orion ✅
|
||||
|
||||
### Pour Stellio
|
||||
| Service | Container | Port | Description |
|
||||
|---------|-----------|------|-------------|
|
||||
| **IoT-Agent** | smart-city-iot-agent-* | 4041-4043 | Les mêmes (envoient aussi à Stellio) |
|
||||
| **Context Broker** | stellio-api-gateway | 8080 | Stellio (NGSI-LD) |
|
||||
| **QuantumLeap** | smart-city-quantumleap-stellio | 8669 | Time-series pour Stellio |
|
||||
| **CrateDB** | smart-city-cratedb-stellio | 5433/4201 | Stockage Stellio |
|
||||
### Pipeline 2 : Stellio 🔄 (En cours)
|
||||
1. Simulateur → 3 MQTT Brokers
|
||||
2. 3 IoT-Agents → Stellio (8080) *(à configurer)*
|
||||
3. **Stellio Subscription** → QuantumLeap-Stellio (8669) *(en cours)*
|
||||
4. QuantumLeap-Stellio → CrateDB-Stellio (5433) ✅
|
||||
5. Grafana ← CrateDB-Stellio ✅
|
||||
|
||||
## Configuration des IoT-Agents (pour 2 Context Brokers)
|
||||
## Configuration des Subscriptions
|
||||
|
||||
Chaque IoT-Agent doit avoir **2 services** (un pour Orion, un pour Stellio) :
|
||||
|
||||
```json
|
||||
// Service 1: Orion-LD
|
||||
{
|
||||
"apikey": "smartcity-api-key",
|
||||
"cbroker": "http://smart-city-orion-ld:1026",
|
||||
"resource": "/",
|
||||
"type": "AirQualityObserved"
|
||||
}
|
||||
|
||||
// Service 2: Stellio
|
||||
{
|
||||
"apikey": "smartcity-api-key-stellio",
|
||||
"cbroker": "http://stellio-api-gateway:8080",
|
||||
"resource": "/",
|
||||
"type": "AirQualityObserved"
|
||||
}
|
||||
### Pour Orion-LD (déjà fait) ✅
|
||||
```bash
|
||||
curl -X POST http://localhost:1026/v2/subscriptions \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{
|
||||
"description": "Orion-LD to QuantumLeap-Orion",
|
||||
"subject": {"entities": [{"idPattern": ".*", "type": "AirQualityObserved"}]},
|
||||
"notification": {
|
||||
"http": {"url": "http://smart-city-quantumleap:8668/v2/op/notify"}
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## Fichiers de configuration (nouveaux)
|
||||
### Pour Stellio (à faire) 🔄
|
||||
```bash
|
||||
# Stellio utilise l'API NGSI-LD pour les subscriptions
|
||||
curl -X POST http://localhost:8080/ngsi-ld/v1/subscriptions \
|
||||
-H 'Content-Type: application/ld+json' \
|
||||
-d '{
|
||||
"description": "Stellio to QuantumLeap-Stellio",
|
||||
"type": "Subscription",
|
||||
"entities": [{"type": "AirQualityObserved"}],
|
||||
"notification": {
|
||||
"endpoint": {"uri": "http://smart-city-quantumleap-stellio:8668/v2/op/notify"}
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
1. `docker-compose.quantumleap-stellio.yml` - QuantumLeap pour Stellio
|
||||
2. `docker-compose.cratedb-stellio.yml` - CrateDB pour Stellio
|
||||
3. Mise à jour `docker-compose.iot-agent.yml` - Ajouter services Stellio
|
||||
## États des Services
|
||||
|
||||
## Sous-domaines (Traefik)
|
||||
| Service | Container | Port | Statut |
|
||||
|---------|-----------|------|--------|
|
||||
| **Orion-LD** | smart-city-orion-ld | 1026 | ✅ Up |
|
||||
| **QuantumLeap-Orion** | smart-city-quantumleap | 8668 | ✅ Up |
|
||||
| **CrateDB-Orion** | smart-city-cratedb | 5432/4200 | ✅ Up |
|
||||
| **Stellio** | stellio-api-gateway | 8080 | ✅ Up |
|
||||
| **QuantumLeap-Stellio** | smart-city-quantumleap-stellio | 8669 | ✅ Up |
|
||||
| **CrateDB-Stellio** | smart-city-cratedb-stellio | 5433/4201 | ✅ Up |
|
||||
| **3 IoT-Agents** | smart-city-iot-agent-* | 4041-4043 | ✅ Up |
|
||||
| **Grafana** | smart-city-grafana | 3001 | ✅ Up |
|
||||
|
||||
- `quantum-leap-stellio.digitribe.fr` → QuantumLeap-Stellio (port 8669)
|
||||
- `cratedb-stellio.digitribe.fr` → CrateDB-Stellio (port 4201)
|
||||
## Prochaines Étapes
|
||||
|
||||
## Avantages de cette architecture
|
||||
1. ✅ **Orion-LD → QuantumLeap-Orion** (Déjà configuré et opérationnel)
|
||||
2. 🔄 **Stellio → QuantumLeap-Stellio** (En cours de configuration)
|
||||
3. ⏳ **Configurer IoT-Agents** pour envoyer aussi à Stellio
|
||||
4. ⏳ **Tester le flux complet** avec Stellio
|
||||
5. ⏳ **Créer les dashboards Grafana** (2 sources)
|
||||
|
||||
1. **Isolation** : Problème sur Stellio n'impacte pas Orion-LD
|
||||
2. **Scalabilité** : Chaque Context Broker a ses propres ressources
|
||||
3. **Clarté** : 1 flux = 1 pipeline complet
|
||||
4. **Comparaison** : Possibilité de comparer performances Orion vs Stellio
|
||||
## Notes Importantes
|
||||
|
||||
## Inconvénients
|
||||
|
||||
1. **Complexité** : Plus de conteneurs à gérer
|
||||
2. **Ressources** : Plus de RAM/CPU pour les CrateDB supplémentaires
|
||||
3. **Maintenance** : Plus de configurations à maintenir à jour
|
||||
|
||||
## Recommandation
|
||||
|
||||
Pour un environnement de **production**, l'architecture isolée est recommandée.
|
||||
Pour un **POC/test**, on peut simplifier en utilisant un seul QuantumLeap/CrateDB pour les deux Context Brokers.
|
||||
- **Orion-LD** : Utilise l'API NGSI-v2 (`/v2/...`)
|
||||
- **Stellio** : Utilise l'API NGSI-LD (`/ngsi-ld/v1/...`)
|
||||
- **QuantumLeap** : Reçoit les notifications et stocke dans CrateDB
|
||||
- **Grafana** : Visualise les données des 2 CrateDB
|
||||
|
||||
---
|
||||
*Dernière mise à jour : 06 Mai 2026, 17h45*
|
||||
*Dernière mise à jour : 06 Mai 2026, 18h05 - Correction architecture (Orion→QL-Orion, Stellio→QL-Stellio)*
|
||||
Reference in New Issue
Block a user