Skip to Content
ArchitekturSemantische Architektur

Semantische Architektur

Diese Seite beschreibt das Datenmodell von IronFlock: die Kernelemente und ihre Beziehungen zueinander. Während die Architekturübersicht die physischen Schichten des Systems (Edge, Cloud, Message Broker) behandelt, liegt der Fokus hier auf der logischen Struktur — den Beziehungen zwischen Projekten, Geräten, Apps und Daten.

Entitätsübersicht

Account ├─ App │ └─ Release └─ Projekt ├─ Gerät ───────────┐ │ └─ App-Edge-Komponente ├─ Gruppe ──────────┘ ├─ Release-Installation ├─ Fleet-Datenbank │ └─ Datentabellen ├─ Dashboard └─ Alarm

Kernelemente

Account

Ein Account ist die oberste Identität — eine Person oder Organisation, die bei IronFlock angemeldet ist. Ein Account besitzt Projekte und Apps. Apps und Projekte sind direkte Kinder eines Accounts, existieren aber unabhängig voneinander.

App

Eine App ist ein deploybares Softwarepaket. Apps gehören zu einem Account, nicht zu einem Projekt — eine einzelne App kann in vielen verschiedenen Projekten installiert werden. Eine App läuft nicht eigenständig; sie dient als Katalogeintrag, dessen Releases auf Geräten installiert werden können.

Release

Ein Release ist ein unveränderlicher, versionierter Build einer App. Nur Releases im Status READY können auf Geräten installiert werden. Releases sind unveränderlich — um das Verhalten einer App zu ändern, wird ein neuer Release veröffentlicht.

Projekt

Ein Projekt ist die primäre Isolationsgrenze. Alles innerhalb eines Projekts — Geräte, Gruppen, Installationen, Daten, Dashboards, Alarme — ist für andere Projekte unsichtbar. Jedes Projekt hat seinen eigenen WAMP-Realm auf dem Message Broker, eine dedizierte Fleet-Datenbank und eigene Geräte, Gruppen, Installationen, Dashboards und Alarme.

Gerät

Ein Gerät ist eine physische oder virtuelle Linux-Maschine, auf der der IronFlock-Agent läuft. Jedes Gerät gehört zu genau einem Projekt. Ein Gerät hostet die Edge-Komponenten installierter Releases — die Container, die lokal auf der Hardware laufen. Ein Gerät kann Edge-Komponenten mehrerer Releases gleichzeitig hosten und Mitglied mehrerer Gruppen sein.

Gruppe

Eine Gruppe ist eine logische Sammlung von Geräten innerhalb eines Projekts für Massenoperationen. Ein Gerät kann mehreren Gruppen angehören (N:N-Beziehung). Wenn ein Release auf einer Gruppe installiert wird, erhält jedes Mitgliedsgerät eine Installation, die entweder die Konfiguration der Gruppe erben oder lokal überschreiben kann.

Release-Installation

Eine Release-Installation ist die laufende Instanz eines bestimmten Releases auf einem bestimmten Gerät. Sie ist die Verbindung zwischen einem Gerät und einem Release innerhalb eines Projekts. Bei Installation über eine Gruppe kann jede Geräteinstallation die Gruppenkonfiguration erben oder überschreiben — flottenweite Standards mit gerätespezifischen Ausnahmen.

Gruppen-Installation ├─ Gerät A → erbt von Gruppe ├─ Gerät B → erbt von Gruppe └─ Gerät C → überschreibt mit eigener Konfiguration

Fleet-Datenbank

Jedes Projekt hat eine dedizierte Fleet-Datenbank — eine PostgreSQL-Datenbank mit der TimescaleDB-Erweiterung für Zeitreihendaten. Edge-Komponenten auf Geräten veröffentlichen Telemetriedaten über WAMP, der FleetDB-Dienst schreibt sie in die Projektdatenbank, und die Daten können von Dashboards, dem KI-Abfragedienst und externen Tools abgefragt werden.

Dashboard

Ein Dashboard visualisiert Daten aus der Fleet-Datenbank des Projekts. Dashboards gehören zu einem Projekt und können Daten aus mehreren Apps und Geräten in einer einzigen Ansicht kombinieren.

Alarm

Ein Alarm ist eine schwellenwertbasierte Alarmregel innerhalb eines Projekts. Alarme überwachen Daten in der Fleet-Datenbank und lösen Benachrichtigungen aus, wenn Bedingungen erfüllt sind.

Entitätsbeziehungsdiagramm

┌──────────┐ │ Account │ └──┬───┬───┘ │ │ │ │ besitzt 1:N │ ▼ │ ┌─────────────────────┐ │ │ App │ │ └────────┬────────────┘ │ │ enthält 1:N │ ▼ │ ┌─────────────────────┐ │ │ Release │ │ └─────────────────────┘ │ ▲ │ │ referenziert │ besitzt │ │ 1:N │ ▼ │ ┌──────────────────────────────────────────────────────────────────┐ │ Projekt │ │ │ │ ┌──────────┐ N:N ┌──────────┐ │ │ │ Gerät │◆──────────◆│ Gruppe │ │ │ └────┬─────┘ └────┬─────┘ │ │ │ hostet │ installiert auf │ │ │ Edge-Komponenten │ Mitgliedsgeräten │ │ │ 1:N │ │ │ │ ▼ │ │ │ ┌──────────────┐ │ │ └──────────────►│ Release- │ (erbt oder │ │ │ Installation│ überschreibt Gruppe) │ │ └──────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Fleet-Datenbank │ │ │ │ (TimescaleDB) │ │ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │Tbl. │ │Tbl. │ ... │ │ │ │ └─────┘ └─────┘ │ │ │ └───────────────────────┘ │ │ ▲ │ │ │ abgefragt von │ │ ┌───────────┴───────────┐ │ │ │ Dashboard │ │ │ └───────────────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Alarm │ │ │ │ (überwacht FleetDB) │ │ │ └───────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘

Beziehungsübersicht

BeziehungTypBeschreibung
Account → Projekt1:NEin Account besitzt mehrere Projekte
Account → App1:NEin Account besitzt mehrere Apps (unabhängig von Projekten)
App → Release1:NEine App enthält mehrere versionierte Releases
Projekt → Gerät1:NJedes Gerät gehört zu genau einem Projekt
Projekt → Gruppe1:NGruppen sind einem Projekt zugeordnet
Gerät ↔ GruppeN:NEin Gerät kann in mehreren Gruppen sein; eine Gruppe enthält mehrere Geräte
Projekt → Fleet-Datenbank1:1Jedes Projekt hat eine eigene dedizierte Datenbank
Projekt → Dashboard1:NDashboards gehören zu einem Projekt und fragen dessen Fleet-Datenbank ab
Projekt → Alarm1:NAlarme sind einem Projekt zugeordnet und überwachen dessen Fleet-Datenbank
Gerät → Release-Installation1:NEin Gerät hostet Edge-Komponenten mehrerer Release-Installationen
Release-Installation → ReleaseN:1Jede Installation referenziert eine bestimmte Release-Version
Last updated on