Verteilte_Systeme/README.md

46 lines
2.9 KiB
Markdown

# PU 1: "Praktikum Service-Discovery"
Dieses Projekt wurde von der **Gruppe D** entwickelt:
**Antoniadis Dimitrios, Dexheimer Fynn, Corina Schmitt**
Dieses Projekt implementiert einen Syslog-Server auf Basis von UDP gemäß dem RFC 5424 Standard. Es beinhaltet eine automatische Service-Discovery via Broadcast.
> **Hinweis:** Um den Server zu testen, wird ein entsprechender Client benötigt. Das System setzt die installierten Technologien **Java** und **Maven** voraus. Die Nutzung von **Just** ist optional und dient lediglich der vereinfachten Ausführung der Befehle.
## Projektstruktur & Klassen
* **`pom.xml`**: Maven-Konfigurationsdatei für Abhängigkeiten und Build-Prozess.
* **`justfile`**: Automatisierungsskript für einfache Ausführung (`just server`).
* **`vs.SyslogServer`**: Der Hauptdienst. Er startet zwei parallele Threads:
* **Syslog-Service**: Empfängt Log-Nachrichten auf Port 514, validiert die Länge und trennt Metadaten optisch vom Nachrichteninhalt.
* **Discovery-Service**: Antwortet auf Broadcast-Anfragen auf Port 8888, um Clients die Server-IP mitzuteilen.
* **`vs.SyslogMessage`**: Kernklasse zur Erzeugung/Repräsentation standardkonformer Nachrichten (inkl. Header, Zeitstempel und Structured Data).
* **`vs.AsciiChars` / `vs.StructuredData`**: Hilfsklassen zur Einhaltung der RFC-Spezifikationen.
## Funktionsablauf (Service Discovery & Logging)
1. **Broadcast**: Ein Client sendet ein UDP-Paket an die Broadcast-Adresse `255.255.255.255:8888`.
2. **Antwort**: Der Server empfängt den Suchruf und sendet ein Bestätigungs-Paket an den Client zurück.
3. **Identifikation**: Der Client extrahiert die IP-Adresse des Servers aus dem Antwort-Paket.
4. **Logging**: Der Client formatiert die Nachricht nach RFC 5424 und sendet sie direkt an den Server (Port 514).
5. **Verarbeitung**: Der Server empfängt das Datenpaket, validiert die Länge, entfernt das Byte Order Mark (BOM) und trennt die RFC-Metadaten optisch vom eigentlichen Nachrichteninhalt für eine strukturierte Konsolenausgabe.
## Ausführung
Stellen Sie sicher, dass **Java** und **Maven** auf Ihrem System installiert sind. Die Installation von **Just** wird empfohlen, ist jedoch optional.
### 1. Konfiguration für Linux/macOS
Da das `justfile` standardmäßig für die PowerShell optimiert ist, passen Sie bei der Nutzung von Unix-basierten Systemen bitte die erste Zeile im `justfile` an:
* Ändern Sie `set shell := ["powershell.exe", "-c"]` zu `set shell := ["sh", "-c"]`.
### 2. Wichtige Befehle
Nutzen Sie `just`, um die folgenden Aufgaben automatisiert auszuführen:
* **Kompilieren**: `just compile`
* **Server starten**: `just server`
* **Projekt aufräumen**: `just clean`
**Hinweise:**
* Weitere Befehle (z. B. für Tests oder Javadoc) finden Sie direkt im `justfile`.
* Falls Sie **Just** nicht verwenden möchten, können die entsprechenden Maven-Befehle (z. B. `mvn compile` oder `mvn exec:java...`) direkt genutzt werden.