Skip to Content
ArchitetturaArchitettura Semantica

Architettura Semantica

Questa pagina descrive il modello dati di IronFlock: le risorse principali e come si relazionano tra loro. Mentre la Panoramica dell’architettura copre i livelli fisici del sistema (edge, cloud, message broker), questa pagina si concentra sulla struttura logica — le relazioni tra progetti, dispositivi, app e dati.

Panoramica delle entità

Account ├─ App │ └─ Release └─ Project ├─ Device ──────────┐ │ └─ App Edge Component ├─ Group ───────────┘ ├─ Release Installation ├─ Fleet Database │ └─ Data Tables ├─ Dashboard └─ Alarm

Risorse principali

Account

Un account è l’identità di livello superiore — una persona o un’organizzazione che ha effettuato l’accesso a IronFlock. Un account possiede progetti e app. App e progetti sono entrambi figli diretti di un account ma esistono indipendentemente l’uno dall’altro.

App

Un’app è un pacchetto software distribuibile. Le app appartengono a un account, non a un progetto — una singola app può essere installata su molti progetti diversi. Un’app non viene eseguita autonomamente; funge da voce del catalogo le cui release possono essere installate sui dispositivi.

Release

Una release è una build immutabile e con versione di un’app. Solo le release nello stato READY possono essere installate sui dispositivi. Le release sono immutabili — per modificare il comportamento di un’app, viene pubblicata una nuova release.

Progetto

Un progetto è il confine primario di isolamento. Tutto ciò che si trova all’interno di un progetto — dispositivi, gruppi, installazioni, dati, dashboard, allarmi — è invisibile agli altri progetti. Ogni progetto ha il proprio realm WAMP sul message broker, un Fleet Database dedicato e il proprio insieme di dispositivi, gruppi, installazioni, dashboard e allarmi.

Dispositivo

Un dispositivo è una macchina Linux fisica o virtuale che esegue l’agente IronFlock. Ogni dispositivo appartiene esattamente a un progetto. Un dispositivo ospita i componenti edge delle release installate — i container eseguiti localmente sull’hardware. Un dispositivo può ospitare contemporaneamente componenti edge di più release e può essere membro di più gruppi.

Gruppo

Un gruppo è una raccolta logica di dispositivi all’interno di un progetto, utilizzata per operazioni in blocco. Un dispositivo può appartenere a più gruppi (molti-a-molti). Quando una release viene installata su un gruppo, ogni dispositivo membro riceve un’installazione che può ereditare la configurazione del gruppo o sovrascriverla localmente.

Installazione di release

Un’installazione di release è l’istanza in esecuzione di una release specifica su un dispositivo specifico. È il collegamento tra un dispositivo e una release all’interno di un progetto. Quando viene installata tramite un gruppo, l’installazione di ogni dispositivo può ereditare o sovrascrivere la configurazione del gruppo, fornendo valori predefiniti a livello di flotta con eccezioni per singolo dispositivo.

Group Installation ├─ Device A → eredita dal gruppo ├─ Device B → eredita dal gruppo └─ Device C → sovrascrive con configurazione personalizzata

Fleet Database

Ogni progetto dispone di un Fleet Database dedicato — un database PostgreSQL con l’estensione TimescaleDB per i dati di serie temporali. I componenti edge sui dispositivi pubblicano la telemetria via WAMP, il servizio FleetDB la scrive nel database del progetto, e i dati sono interrogabili da dashboard, dal servizio di query AI e da strumenti esterni.

Dashboard

Una dashboard visualizza i dati del Fleet Database del progetto. Le dashboard appartengono a un progetto e possono combinare dati di più app e dispositivi in un’unica vista.

Allarme

Un allarme è una regola di avviso basata su soglie all’interno di un progetto. Gli allarmi monitorano i dati nel Fleet Database e attivano notifiche quando le condizioni vengono soddisfatte.

Diagramma delle relazioni tra entità

┌──────────┐ │ Account │ └──┬───┬───┘ │ │ │ │ owns 1:N │ ▼ │ ┌─────────────────────┐ │ │ App │ │ └────────┬────────────┘ │ │ contains 1:N │ ▼ │ ┌─────────────────────┐ │ │ Release │ │ └─────────────────────┘ │ ▲ │ │ references │ owns 1:N │ ▼ │ ┌──────────────────────────────────────────────────────────────────┐ │ Project │ │ │ │ ┌──────────┐ N:N ┌──────────┐ │ │ │ Device │◆──────────◆│ Group │ │ │ └────┬─────┘ └────┬─────┘ │ │ │ hosts │ installs on │ │ │ edge components │ member devices │ │ │ 1:N │ │ │ │ ▼ │ │ │ ┌──────────────┐ │ │ └──────────────►│ Release │ (inherits or │ │ │ Installation│ overrides group) │ │ └──────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Fleet Database │ │ │ │ (TimescaleDB) │ │ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │Table│ │Table│ ... │ │ │ │ └─────┘ └─────┘ │ │ │ └───────────────────────┘ │ │ ▲ │ │ │ queried by │ │ ┌───────────┴───────────┐ │ │ │ Dashboard │ │ │ └───────────────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Alarm │ │ │ │ (monitors FleetDB) │ │ │ └───────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘

Riepilogo delle relazioni

RelazioneTipoDescrizione
Account → Progetto1:NUn account possiede più progetti
Account → App1:NUn account possiede più app (indipendenti dai progetti)
App → Release1:NUn’app contiene più release con versioni
Progetto → Dispositivo1:NOgni dispositivo appartiene esattamente a un progetto
Progetto → Gruppo1:NI gruppi sono limitati a un progetto
Dispositivo ↔ GruppoN:NUn dispositivo può essere in più gruppi; un gruppo contiene più dispositivi
Progetto → Fleet Database1:1Ogni progetto ha il proprio database dedicato
Progetto → Dashboard1:NLe dashboard appartengono a un progetto e interrogano il suo Fleet Database
Progetto → Allarme1:NGli allarmi sono limitati a un progetto e monitorano il suo Fleet Database
Dispositivo → Installazione di release1:NUn dispositivo ospita componenti edge di più installazioni di release
Installazione di release → ReleaseN:1Ogni installazione fa riferimento a una versione specifica della release
Last updated on