- Documented decision for Peer-to-Peer (P2P) model with mDNS discovery, WebSocket transport, and shared security keys. - Addressed data isolation with namespacing by turnierId. - Updated roadmap to reflect progress in Phase 6: Vernetzung & Inter-App Kommunikation. Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
3.4 KiB
3.4 KiB
| type | status | owner |
|---|---|---|
| ADR | ACCEPTED | Lead Architect |
ADR-0020: Lokale Netzwerk-Kommunikation und Daten-Isolierung
Status
Akzeptiert (März 2026)
Kontext
Die Desktop-Anwendung ("Meldestelle-Biest") muss in einer lokalen Netzwerkumgebung (LAN) auf Reitturnieren funktionieren, oft ohne zuverlässige Internetverbindung. Dabei müssen verschiedene Instanzen der App (z.B. " Meldestelle-Desk-App" und "Richter-Desk-App") in Echtzeit miteinander kommunizieren.
Herausforderungen:
- Wie finden sich die Geräte automatisch im LAN?
- Wie wird die Sicherheit der Datenübertragung ohne zentrale Cloud-Infrastruktur gewährleistet?
- Wie können Daten zwischen verschiedenen Turnieren innerhalb einer Veranstaltung sauber isoliert werden, während ein veranstaltungsweiter Austausch (z.B. Chat) möglich bleibt?
Entscheidung
Wir implementieren ein Peer-to-Peer (P2P) Kommunikationsmodell basierend auf folgenden Säulen:
- Discovery (Geräte finden): Einsatz von
mDNS(Multicast DNS / ZeroConf), damit sich Instanzen im lokalen Netzwerk ohne manuelle IP-Konfiguration finden können. - Transport & Echtzeit: Nutzung von verschlüsselten WebSockets für die bidirektionale Datenübertragung in Echtzeit.
- Sicherheit: Verwendung eines Shared Security Keys (Sicherheitsschlüssel), der pro Veranstaltung vergeben wird. Dieser dient als Basis für die Verschlüsselung und Authentifizierung der Peers.
- Daten-Isolierung (Namespacing):
- Alle fachlichen Datenpakete (Nennungen, Ergebnisse) müssen zwingend eine
turnierIdim Header führen. - Clients abonnieren spezifische Turnier-Streams. Daten anderer Turniere werden auf Protokollebene verworfen.
- Veranstaltungsweiter Chat:
- Einführung eines globalen Kanals basierend auf der
veranstaltungId. - Nachrichten in diesem Kanal haben keine Turnier-Bindung und sind für alle Geräte der Veranstaltung sichtbar.
- Implementierung eines lokalen Nachrichtenspeichers (Buffering), um Offline-Phasen zu überbrücken.
Konsequenzen
Positiv
- Offline-First: Volle Funktionalität im LAN ohne Internetzwang.
- Benutzerfreundlichkeit: Automatische Geräteerkennung spart Zeit beim Setup vor Ort.
- Datenintegrität: Strikte Trennung der Turniere verhindert Fehlbuchungen.
- Flexibilität: Richter und Meldestelle können nahtlos zusammenarbeiten.
Negativ/Herausforderungen
- Netzwerk-Komplexität: Handhabung von Firewall-Regeln und MDNS-Einschränkungen in manchen Router-Konfigurationen.
- Synchronisation: Konfliktauflösung bei gleichzeitigen Änderungen (Eventual Consistency) muss implementiert werden.
- Ressourcen: Laufende WebSocket-Verbindungen und MDNS-Services benötigen (geringe) zusätzliche Systemressourcen.
Betrachtete Alternativen
- Zentraler lokaler Server: Erfordert ein dediziertes "Server-Gerät" und erhöht die Komplexität des Deployments. ( Verworfen zugunsten von P2P/Master-Client Hybrid).
- HTTP Polling: Zu langsam für Echtzeit-Richter-Eingaben und verursacht unnötigen Overhead. (Verworfen zugunsten von WebSockets).
- Manuelle IP-Eingabe: Zu fehleranfällig für Endanwender unter Zeitdruck. (Verworfen zugunsten von mDNS).
Referenzen
- Vision_03: Desktop-App Architektur
- ADR-0004: Event-driven Communication
- ADR-0008: Multiplatform Client Applications