> [time=Sun, Jul 1, 2023][name=Lucas Colaço][name=Lukas Bühler][color=#db4eae] # 1. Liste aller System und Dienste, die wir gebraucht habt Wir haben folgende Systeme und Dienste verwendet: 1. **Mosquitto (MQTT Broker)**: Ein Open Source Message Broker, der das MQTT-Protokoll verwendet. Er ermöglicht die Kommunikation zwischen den Sensoren und den Verbrauchern. 2. **Docker**: Eine Plattform, die den Prozess der Anwendungsbereitstellung durch die Verwendung von Containern vereinfacht. 3. **Apache Paho**: Eine Java-Bibliothek, die MQTT-Protokoll-Implementierungen zur Verfügung stellt. Wir haben sie verwendet, um ein Java-Programm zu erstellen, das MQTT-Nachrichten publiziert und abonniert. 4. **Grafana**: Ein Open-Source-Tool zur Visualisierung und Analyse von Metriken. Wir haben es verwendet, um die Daten, die von unseren Sensoren generiert wurden, grafisch darzustellen. 5. **Prometheus**: Ein Open-Source-System zur Überwachung und Alarmierung. Es wurde verwendet, um Metriken von unseren verschiedenen Servern zu sammeln. 6. **Node Exporter**: Ein Prometheus Exporter für Hardware- und OS-Metriken mit pluggable Metriksammlern. 7. **Nginx (Load Balancer)**: Ein Open Source Reverse Proxy Server für HTTP, HTTPS, SMTP, POP3 und IMAP Protokolle, sowie ein Load Balancer, HTTP Cache und Webserver. # 2. Wie hängen diese Systeme zusammen? Unser Gesamtsystem besteht aus mehreren Komponenten, die zusammenarbeiten, um Daten zu sammeln, zu übertragen und zu visualisieren. ## 2.1 **Komponentendiagramm:** ```graphviz digraph hierarchy { node [fontname=Monospace, fontsize=9, shape=box] edge [fontname=Monospace, fontsize=7] node [color=Red,fontname=Courier,shape=box] edge [color=Blue, style=dashed] nodesep=0.4 docker [label="Docker"] mosquitto [label="Mosquitto\nBroker(MQTT)"] sensor2 [label="Sensor 2\n(Java)"] sensor1 [label="Sensor 1\n(Java)"] grafana [label="Grafana"] prometheus [label="Prometheus"] node_exporter [label="Node\nExporter"] nginx [label="Nginx"] docker -> mosquitto [label="Compose \nStack"] docker -> nginx [label="Compose \nStack"] docker -> sensor1 [label="Compose \nStack"] docker -> sensor2 [label="Compose \nStack"] docker -> node_exporter [label="Compose \nStack"] docker -> prometheus [label="Dockerfile"] nginx -> sensor1 [label="Load Balance"] nginx -> sensor2 [label=""] node_exporter -> prometheus [label="Usage Data"] sensor1 -> mosquitto [label="Publish\n(MQTT msg)"] sensor2 -> mosquitto [label=""] mosquitto -> grafana [label="Data\n(MQTT msg)"] mosquitto -> prometheus [label="Data\n(MQTT msg)"] } ``` ## 2.2 **Deployment Diagramm:** Es gibt zwei docker-compose files. Eines für das Deployment auf mehreren Servern und ein weitere compose File für das Monitoring. ```graphviz digraph D { subgraph cluster_Docker { label = "Docker";color=blue subgraph cluster_Dockercompose { label = "Compose Stack (Server)";color=red node_exporter; subgraph cluster_gc2 { label = "Load balancer"; nginx; "Sensor 2"; "Sensor 1"; mosquitto; } } subgraph cluster_Monitoring { label = "Compose Stack (Monitoring)";color=orange prometheus; Grafana; } } } } ``` # 3. Detailbeschreibung der Interaktionen Die Java-Anwendung simuliert Sensoren, indem sie Sinuswerte berechnet und diese als MQTT-Nachrichten an den Mosquitto Broker sendet. Der Broker verteilt diese Nachrichten an alle abonnierten Entitäten, in diesem Fall Grafana zur Visualisierung und Prometheus zur Überwachung. ```mermaid sequenceDiagram participant User participant Grafana participant Prometheus participant Broker Sensor->>Broker: Publish sinusoidal values Broker->>Grafana: Send sinusoidal values Broker->>Prometheus: Send sinusoidal values Grafana->>User: Display visualized data Prometheus->>User: Display monitored data ``` # 4. Beispiel eines Ablaufs der Interaktion (End-2-End) - Die Java-Anwendung berechnet einen Sinuswert und publiziert diesen an den Mosquitto-Broker. - Der Mosquitto-Broker leitet diese Nachricht an alle Abonnenten weiter, in diesem Fall Grafana und Prometheus. - Grafana empfängt die Nachricht, aktualisiert das Dashboard und zeigt den neuen Sinuswert an. - Prometheus empfängt die Nachricht und aktualisiert seine eigenen Metriken entsprechend. Zusätzlich überwacht es den Status und die Auslastung der Server. - Der Benutzer kann nun die aktualisierten Sinuswerte in Grafana sehen. In Prometheus können zusätzlich die überwachten Daten von mehreren Server eingesehen werden, wie z.B. Auslastung und Betriebszustand.
{"title":"Modul 321: Verteilte Systeme programmieren - Dokumentation","description":"sequenceDiagramparticipant REST-Clientparticipant GraphQLparticipant MQTTREST-Client->>GraphQL: DatenanfrageGraphQL–>>MQTT: DatenanfrageMQTT->>GraphQL: DatenantwortGraphQL->>REST-Client: Datenantwort","contributors":"[{\"id\":\"70364ad2-9375-4c87-85cc-9b4bdacb21ad\",\"add\":10041,\"del\":5336}]"}
    174 views
   Owned this note