321

Programmierung · Verteilte Systeme

Verteilte Systeme programmieren

Du lernst, Programme zu bauen, die auf mehrere Prozesse und Server verteilt laufen und trotzdem zuverlässig zusammenarbeiten, auch wenn das Netzwerk nicht mitspielt.

Anspruchsvoll Anspruchsvoll ca. 35 Std. SelbststudiumApplikationsentwicklung: 4. Lehrjahr · Berufsfachschule
#Verteilte Systeme#REST#Messaging#Microservices#Asynchronität#Idempotenz#Resilienz#Docker Compose#Observability

Überblick

Worum geht es?

Sobald eine Anwendung aus mehreren Diensten besteht, die über ein Netzwerk kommunizieren, gelten neue Regeln: Aufrufe können langsam sein, verloren gehen oder doppelt ankommen. Du lernst, wann synchrone Kommunikation über HTTP passt und wann Nachrichten über einen Broker besser sind. Du baust Dienste, die Fehler abfedern, Daten trotz Verteilung konsistent halten und sich im Betrieb nachvollziehen lassen. Am Ende setzt du ein kleines System aus mehreren Diensten mit Docker Compose um und kannst deine Architekturentscheide begründen.

Wofür brauchst du das?

Moderne Applikationen sind selten ein einzelnes Programm. Ein Webshop spricht mit Zahlungsanbieter, Lager und Versand, eine Spital-App mit dem Klinikinformationssystem. Wer versteht, was zwischen den Diensten schiefgehen kann, baut Systeme, die nachts nicht ausfallen, und findet Fehler schneller. Das Modul verbindet Backend (295), Container (347), Cloud (346) und DevOps (324).

Das solltest du schon können

  • Ein REST-Backend mit Endpunkten, Validierung und Datenbankzugriff umsetzen (Modul 295)
  • Dienste in Containern starten und mit Docker Compose verbinden (Modul 347)
  • Objektorientiert programmieren und Interfaces einsetzen (Modul 320)
  • Grundlagen von HTTP, JSON und Statuscodes kennen

Typische Tools & Technologien

Java / Spring BootC# / ASP.NET CoreNode.jsRabbitMQApache KafkaDocker ComposePostman / BrunoOpenTelemetry / Grafana

Lernziele

Was musst du können?

Das sind die Fähigkeiten, die am Ende des Moduls sitzen sollten. Jedes Ziel mit einem Beispiel aus dem Lehrbetrieb.

  1. 1

    Ein System sinnvoll in Dienste aufteilen

    Kompetenz A

    Du entscheidest, welche Teile einer Anwendung als eigener Dienst laufen sollen und welche besser zusammenbleiben. Massgebend sind fachliche Grenzen, unabhängige Skalierung und eigene Daten, nicht die Lust auf möglichst viele Microservices.

    Situation

    Ein regionaler Velokurier in Bern möchte seine monolithische Auftragsverwaltung modernisieren. Die Tourenplanung bremst bei Hochbetrieb alles andere aus.

    Deine Aufgabe

    Schlage eine Aufteilung vor und begründe sie.

    Gutes Ergebnis

    Drei Dienste: Aufträge, Tourenplanung und Benachrichtigungen. Die Tourenplanung skaliert separat, hat ihre eigene Datenbank und bekommt Aufträge über Ereignisse. Die Rechnungsstellung bleibt bewusst im Auftragsdienst, weil sie eng mit den Aufträgen verbunden ist.

    Monolith vs. MicroservicesBounded Contextlose KopplungDatabase per Service
  2. 2

    Synchrone und asynchrone Kommunikation gezielt einsetzen

    Kompetenz B

    Du weisst, wann ein Dienst eine Antwort sofort braucht (REST, gRPC) und wann es reicht, eine Nachricht abzuschicken und weiterzuarbeiten (Queue, Topic). Du kennst die Folgen für Wartezeiten, Kopplung und Fehlerverhalten.

    Situation

    Im Onlineshop eines Sportartikelhändlers in Luzern wartet der Kunde nach dem Kauf 8 Sekunden, weil Bestellbestätigung, Lagerbuchung und Rechnung nacheinander per HTTP aufgerufen werden.

    Deine Aufgabe

    Gestalte den Ablauf so um, dass der Kunde sofort eine Rückmeldung bekommt.

    Gutes Ergebnis

    Nur die Zahlungsprüfung bleibt synchron. Danach publiziert der Bestelldienst ein Ereignis 'BestellungAufgegeben' auf RabbitMQ. Lager, Rechnung und Mailversand reagieren unabhängig. Die Antwortzeit sinkt auf unter 1 Sekunde.

    Request/ResponseMessage BrokerQueue vs. TopicEvent-drivengRPC
  3. 3

    Dienste gegen Netzwerkfehler und Ausfälle absichern

    Kompetenz C

    Du gehst davon aus, dass ein anderer Dienst langsam oder weg sein kann. Mit Timeouts, Retries mit wachsenden Wartezeiten, Circuit Breakern und sinnvollen Fallbacks verhinderst du, dass ein einzelner Ausfall das ganze System mitreisst.

    Situation

    Ein Ticketportal für Konzerte im Hallenstadion ruft für jede Seite einen externen Sitzplan-Dienst auf. Fällt dieser aus, hängen alle Threads und die ganze Seite ist offline.

    Deine Aufgabe

    Sorge dafür, dass die Seite bei einem Ausfall weiter funktioniert.

    Gutes Ergebnis

    Timeout von 2 Sekunden, drei Retries mit Backoff, danach öffnet ein Circuit Breaker für 30 Sekunden. Als Fallback zeigt die Seite 'Sitzplan momentan nicht verfügbar' und lässt den Kauf nach Kategorie zu.

    TimeoutRetry mit BackoffCircuit BreakerFallbackKaskadierender Ausfall
  4. 4

    Daten über mehrere Dienste hinweg konsistent halten

    Kompetenz D

    Ohne gemeinsame Datenbank gibt es keine einfache Transaktion über alles. Du baust Abläufe deshalb so, dass sie Schritt für Schritt abgeschlossen oder mit Gegenbuchungen rückgängig gemacht werden, und akzeptierst bewusst, dass Daten kurz unterschiedlich sein können.

    Situation

    Bei einem Reisebüro in Basel werden Flug und Hotel in zwei Diensten gebucht. Schlägt die Hotelbuchung fehl, bleibt der Flug trotzdem reserviert.

    Deine Aufgabe

    Gestalte den Buchungsablauf so, dass keine halben Buchungen entstehen.

    Gutes Ergebnis

    Eine Saga mit Zustandsautomat: Flug reservieren, Hotel reservieren, beide bestätigen. Scheitert ein Schritt, wird eine Stornierung für die bereits erledigten Schritte ausgelöst. Der Kunde sieht den Status 'in Bearbeitung', bis alles abgeschlossen ist.

    Eventual ConsistencySagaKompensationCAP-TheoremOutbox-Pattern
  5. 5

    Doppelte Nachrichten und Aufrufe gefahrlos verarbeiten

    Kompetenz D

    In verteilten Systemen kommt eine Nachricht im Zweifel lieber zweimal an als gar nicht. Du baust Empfänger so, dass eine zweite Verarbeitung keinen Schaden anrichtet, z.B. mit eindeutigen IDs und Prüfung, ob etwas schon erledigt ist.

    Situation

    Eine Krankenkasse in Winterthur bekommt Rückerstattungen über eine Queue. Nach einem Neustart des Dienstes wurden einzelne Rückerstattungen doppelt ausbezahlt, total CHF 4'300.

    Deine Aufgabe

    Verhindere doppelte Auszahlungen, ohne Nachrichten zu verlieren.

    Gutes Ergebnis

    Jede Nachricht trägt eine eindeutige Beleg-ID. Der Dienst speichert verarbeitete IDs in einer Tabelle mit Unique-Constraint, in derselben Transaktion wie die Buchung. Eine Wiederholung wird erkannt und nur bestätigt.

    IdempotenzAt-least-once DeliveryDeduplizierungIdempotency Key
  6. 6

    Abläufe über Dienstgrenzen hinweg nachvollziehbar machen

    Kompetenz E

    Wenn ein Fehler über vier Dienste wandert, reicht ein einzelnes Logfile nicht. Du sorgst für strukturierte Logs, eine Korrelations-ID pro Anfrage, Health-Checks und einfache Metriken, damit du Probleme im Betrieb schnell eingrenzen kannst.

    Situation

    Beim Velokurier melden Fahrer, dass manche Aufträge nie in der App erscheinen. Jeder Dienst schreibt eigene Logs ohne Zusammenhang.

    Deine Aufgabe

    Mach den Weg eines Auftrags durch alle Dienste sichtbar.

    Gutes Ergebnis

    Eine Korrelations-ID wird beim Eingang erzeugt und in HTTP-Headern und Nachrichten weitergegeben. Die Logs landen als JSON in Grafana Loki. Eine Suche nach der ID zeigt, dass Nachrichten mit fehlender PLZ in der Dead-Letter-Queue landen.

    Korrelations-IDstrukturiertes LoggingDistributed TracingHealth-CheckDead-Letter-Queue

Selbsteinschätzung

Wo stehst du?

Die Kompetenzmatrix zerlegt das Modul in Themenstränge und drei Stufen. Für den Kompetenznachweis solltest du überall mindestens Stufe 2 erreichen. Dein Stand bleibt in diesem Browser gespeichert und färbt Lernweg und Übungen ein.

Tippe auf eine Aussage, um deinen Stand zu setzen: offen unsicher sitzt
A

Dienste schneiden

Ziel 1

Grundlagen

Fortgeschritten

Erweitert

B

Kommunikation wählen

Ziel 2

Grundlagen

Fortgeschritten

Erweitert

C

Ausfälle abfedern

Ziel 3

Grundlagen

Fortgeschritten

Erweitert

D

Konsistenz und Idempotenz

Ziel 4Ziel 5

Grundlagen

Fortgeschritten

Erweitert

E

Beobachtbarkeit

Ziel 6

Grundlagen

Fortgeschritten

Erweitert

Praxisfall

Die Sendungsverfolgung der Rheintal Logistik

Elena ist im 4. Lehrjahr als Informatikerin Applikationsentwicklung bei der Rheintal Logistik AG in Buchs SG, einem Transportunternehmen mit 220 Mitarbeitenden. Die Sendungsverfolgung ist ein einziger grosser Monolith, der in der Weihnachtszeit regelmässig in die Knie geht und dabei auch die Disposition lahmlegt. Ihr Teamleiter gibt ihr den Auftrag, einen Prototyp für eine Aufteilung in Dienste zu bauen.

  1. Kapitel 1

    Wo sind die Nähte?

    Elena analysiert den Monolithen und findet drei fachliche Bereiche: Scan-Erfassung in den Depots, Sendungsstatus und Kundenbenachrichtigung. Ihr erster Entwurf hat sieben Dienste, doch im Review merkt sie, dass Adresse und Sendung fast immer gemeinsam geändert werden. Sie fasst zusammen und landet bei drei Diensten mit je eigener Datenbank. Die Skizze in draw.io zeigt jetzt auch, welche Daten wem gehören.

    Ziel 1

  2. Kapitel 2

    Anrufen oder Bescheid geben?

    In der Spitzenzeit treffen 40 Scans pro Sekunde ein. Im ersten Prototyp ruft die Scan-Erfassung den Benachrichtigungsdienst per REST auf, und sobald das SMS-Gateway langsam wird, stauen sich die Handscanner im Depot. Elena stellt auf ein Ereignis SendungGescannt über RabbitMQ um, das die Benachrichtigung in ihrem eigenen Tempo abarbeitet. Die Statusabfrage der Kundenwebsite bleibt bewusst ein synchroner REST-Aufruf, weil dort sofort eine Antwort nötig ist.

    Ziel 2

  3. Kapitel 3

    Das SMS-Gateway fällt aus

    Im Lasttest mit Docker Compose stoppt Elena den SMS-Dienst für zehn Minuten. Nach dem Neustart erhalten Testkunden für denselben Scan drei SMS, weil die Wiederholungen ungebremst nachgeschoben werden. Sie konfiguriert Retry mit exponentiellem Backoff und höchstens fünf Versuchen, danach landet die Nachricht in einer Dead-Letter-Queue. Zusätzlich speichert der Empfänger jede Ereignis-ID und verwirft Duplikate stillschweigend.

    Ziel 3Ziel 5

  4. Kapitel 4

    Zugestellt, aber nicht verrechnet

    Bei Nachnahme-Sendungen muss die Zustellung den Status setzen und den Betrag an die Buchhaltung melden. Stürzt der Dienst genau zwischen Datenbank-Commit und Publizieren ab, fehlt die Buchung, das zeigt ein gezielter Kill im Test. Elena schreibt das Ereignis deshalb in eine Outbox-Tabelle in derselben Transaktion und lässt einen Relay-Prozess publizieren. Lehnt die Buchhaltung eine Buchung ab, setzt ein Ausgleichsschritt den Status auf "Zustellung fehlgeschlagen" zurück.

    Ziel 4Ziel 5

  5. Kapitel 5

    Welcher Scan war es?

    Ein Testkunde meldet, seine Sendung bleibe auf "unterwegs" hängen. Ohne gemeinsame ID sucht Elena eine Stunde lang in drei Logdateien. Sie baut eine Middleware für Korrelations-IDs ein und schickt die Traces mit OpenTelemetry an Grafana, wo sie sofort sieht, dass ein Consumer Nachrichten mit Umlauten im Ortsnamen verwirft. Nach der Korrektur ergänzt sie einen Alarm, sobald mehr als 10 Nachrichten pro Stunde in der Dead-Letter-Queue landen, und präsentiert den Prototyp dem Team.

    Ziel 6

Lernweg

Wie lernst du das?

  1. 1

    Was im Netz alles schiefgeht

    ca. 4 Std.

    Du verstehst, warum verteilte Systeme anders funktionieren als ein einzelnes Programm, und wann sich die Aufteilung lohnt.

    • Die typischen Irrtümer über Netzwerke (z.B. 'Latenz ist null') an eigenen Beispielen erklären
    • Einen bestehenden Monolithen aus dem Unterricht skizzieren und mögliche Dienstgrenzen einzeichnen
    • Für zwei Varianten der Aufteilung Vor- und Nachteile in einer Tabelle gegenüberstellen

    Trainiert Kompetenz A1A2

    Lernziel1

  2. 2

    Dienste sprechen miteinander

    ca. 7 Std.

    Du verbindest zwei Dienste zuerst synchron über REST und danach asynchron über einen Message Broker.

    • Zwei Spring-Boot- oder ASP.NET-Dienste per REST verbinden und mit Postman testen
    • RabbitMQ in Docker Compose starten und ein Ereignis publizieren und konsumieren
    • Die Antwortzeiten beider Varianten unter Last messen und vergleichen

    Trainiert Kompetenz B1B2

    Lernziel2

  3. 3

    Ausfälle provozieren und abfedern

    ca. 7 Std.

    Du baust Fehler absichtlich ein und machst deine Dienste robust dagegen.

    • Einen Zieldienst mit künstlicher Verzögerung oder Absturz ausstatten
    • Timeout, Retry und Circuit Breaker mit Resilience4j oder Polly konfigurieren
    • Nachrichten absichtlich doppelt senden und den Empfänger idempotent machen

    Trainiert Kompetenz C1C2D1

    Lernziel35

  4. 4

    Konsistenz ohne gemeinsame Datenbank

    ca. 7 Std.

    Du setzt einen Geschäftsablauf über mehrere Dienste mit einer Saga und Kompensationen um.

    • Einen Buchungsablauf als Zustandsdiagramm mit allen Fehlerpfaden zeichnen
    • Die Saga umsetzen und jeden Fehlerpfad gezielt auslösen
    • Das Outbox-Pattern an einem Beispiel nachbauen

    Trainiert Kompetenz D2D3

    Lernziel45

  5. 5

    Sichtbar machen

    ca. 5 Std.

    Du rüstest dein System mit Logs, Korrelations-IDs und Health-Checks aus, sodass du Fehler im Betrieb findest.

    • Korrelations-ID als Middleware einbauen und durch HTTP und Nachrichten weiterreichen
    • Logs zentral sammeln und eine Fehlersuche anhand einer ID durchspielen
    • Health-Endpunkte für Docker Compose einrichten

    Trainiert Kompetenz E1E2

    Lernziel6

  6. 6

    Abschlussprojekt: kleines verteiltes System

    ca. 5 Std.

    Du baust ein System mit drei Diensten, einem Broker und einer Datenbank pro Dienst und dokumentierst deine Entscheide.

    • Architekturskizze mit Kommunikationswegen und Begründung erstellen
    • Alles mit einem einzigen 'docker compose up' startbar machen
    • Einen Ausfall vorführen und zeigen, wie das System reagiert

    Trainiert Kompetenz A3B3C3E3

    Lernziel1236

Üben

Übungen aus der Praxis

Messwerte von Wetterstationen sammeln

Einstieg Einstieg

Eine Gemeinde im Berner Oberland betreibt fünf Wetterstationen, die alle 10 Minuten Temperatur und Niederschlag senden. Ein zentraler Dienst soll die Werte speichern und eine Übersicht anbieten.

Weist nach A1B1

  1. Einen Empfangsdienst mit REST-Endpunkt für Messwerte bauen
  2. Einen Simulator schreiben, der fünf Stationen nachahmt
  3. Beide Dienste mit Docker Compose starten und die Übersicht abrufen
Tipp anzeigen

Starte mit einem einzigen Endpunkt 'POST /messwerte' und einem 'GET /stationen/{id}/aktuell'. Alles andere kommt später.

Lösungsskizze anzeigen

Empfangsdienst mit Validierung (Stations-ID, Zeitstempel, Wertebereich) und Speicherung in PostgreSQL. Simulator als eigener Container mit Schleife und Zufallswerten. Docker Compose verbindet beide über ein internes Netzwerk und startet die DB zuerst.

Bestellprozess mit Ereignissen

Fortgeschritten Fortgeschritten

Eine Weinhandlung in Lavaux verkauft online. Nach jeder Bestellung müssen Lager, Rechnung und Versandetikette erstellt werden. Heute passiert das in einem einzigen, langsamen Aufruf.

Weist nach B2C2D2

  1. Das Ereignis 'BestellungAufgegeben' mit allen nötigen Feldern definieren
  2. Lager- und Rechnungsdienst als Konsumenten über RabbitMQ anbinden
  3. Den Lagerdienst kurz stoppen und prüfen, dass nach dem Neustart keine Bestellung fehlt
  4. Doppelte Zustellung simulieren und Doppelbuchungen verhindern
Tipp anzeigen

Achte auf 'durable' Queues und manuelle Bestätigung (Ack) erst nach erfolgreicher Verarbeitung.

Lösungsskizze anzeigen

Bestelldienst publiziert auf einen Exchange, jede Empfängerseite hat ihre eigene dauerhafte Queue. Ack erst nach Commit in der eigenen DB. Eine Tabelle mit verarbeiteten Bestell-IDs und Unique-Constraint verhindert Doppelbuchungen. Fehlerhafte Nachrichten landen nach drei Versuchen in einer Dead-Letter-Queue.

Kursbuchung mit Saga und Tracing

Anspruchsvoll Anspruchsvoll

Eine Weiterbildungsschule in Zürich bucht für Kurse gleichzeitig Raum, Lehrperson und Zahlung. Die drei Bereiche laufen als getrennte Dienste mit eigenen Datenbanken. Halbe Buchungen sorgen regelmässig für Ärger.

Weist nach C3D3E3

  1. Ablauf und alle Fehlerfälle als Zustandsdiagramm modellieren
  2. Die Saga mit Kompensationen umsetzen (z.B. Raum freigeben, wenn Zahlung scheitert)
  3. Timeouts und Retries für alle Aufrufe festlegen und begründen
  4. Eine Korrelations-ID durch alle Dienste reichen und einen Fehlerfall in den Logs nachvollziehen
Tipp anzeigen

Überlege dir zuerst, wer den Ablauf koordiniert: ein zentraler Orchestrator ist hier leichter zu verstehen und zu debuggen als reine Choreografie.

Lösungsskizze anzeigen

Ein Orchestrator-Dienst speichert den Saga-Zustand pro Buchung. Er ruft nacheinander Raum, Lehrperson und Zahlung auf und löst bei einem Fehler Kompensationen in umgekehrter Reihenfolge aus. Alle Schritte sind idempotent. Logs enthalten Buchungs- und Korrelations-ID, sodass ein abgebrochener Ablauf in Grafana vollständig sichtbar ist.

Selbstcheck

Kannst du das beantworten?

Wann ist asynchrone Kommunikation über einen Broker besser als ein REST-Aufruf?

Wenn der Aufrufer keine sofortige Antwort braucht, mehrere Empfänger reagieren sollen oder der Empfänger zeitweise nicht erreichbar sein darf.

Was bedeutet idempotent?

Eine Operation mehrfach auszuführen hat dieselbe Wirkung wie sie einmal auszuführen.

Wozu dient ein Circuit Breaker?

Er stoppt Aufrufe an einen ausgefallenen Dienst für eine gewisse Zeit, damit der Aufrufer nicht blockiert und der Zieldienst sich erholen kann.

Warum sind Retries ohne Backoff gefährlich?

Viele Clients wiederholen gleichzeitig und überlasten einen ohnehin angeschlagenen Dienst zusätzlich.

Was ist eine Saga?

Eine Folge lokaler Transaktionen in mehreren Diensten, bei der bereits erledigte Schritte bei einem Fehler durch Kompensationen fachlich ausgeglichen werden.

Was besagt das CAP-Theorem in einem Satz?

Bei einer Netzwerktrennung muss ein verteiltes System zwischen Konsistenz und Verfügbarkeit wählen.

Wofür braucht man eine Korrelations-ID?

Um alle Log-Einträge einer Anfrage über mehrere Dienste hinweg zusammenzuführen und so den Weg einer Anfrage nachzuvollziehen.

Was landet in einer Dead-Letter-Queue?

Nachrichten, die nach mehreren Versuchen nicht verarbeitet werden konnten. Sie werden dort zur Analyse aufbewahrt, statt verloren zu gehen oder die Queue zu blockieren.

Prüfung

Stolpersteine & Prüfungstipps

Typische Stolpersteine

  • Einen Monolithen in zehn Microservices zerlegen, die alle dieselbe Datenbank nutzen. Das ist ein verteilter Monolith mit allen Nachteilen beider Welten.
  • HTTP-Aufrufe ohne Timeout absetzen. Ein hängender Zieldienst blockiert dann alle Threads.
  • Nachrichten bestätigen, bevor sie fertig verarbeitet sind. Bei einem Absturz sind sie verloren.
  • Davon ausgehen, dass Nachrichten genau einmal und in der richtigen Reihenfolge ankommen.
  • Logs ohne gemeinsame ID schreiben und im Fehlerfall stundenlang Zeitstempel vergleichen.

Tipps für den Kompetenznachweis

  • Zeichne vor dem Programmieren ein Diagramm mit allen Diensten und Pfeilen, die synchron und asynchron unterscheiden.
  • Begründe jede Architekturentscheidung mit einem konkreten Vorteil und einem bewusst akzeptierten Nachteil.
  • Zeig in der Präsentation einen Fehlerfall live: Dienst stoppen, Reaktion zeigen, Dienst starten, Nachholen zeigen.
  • Halte das System mit einem einzigen Befehl startbar. Wenn der Prüfer nichts starten kann, sieht er nichts.

Glossar

Begriffe kurz erklärt

Verteiltes System
Mehrere eigenständige Programme auf verschiedenen Rechnern oder Containern, die über ein Netzwerk zusammenarbeiten.
Message Broker
Vermittler, der Nachrichten von Sendern entgegennimmt, zwischenspeichert und an Empfänger verteilt, z.B. RabbitMQ oder Kafka.
Idempotenz
Eigenschaft einer Operation, bei mehrfacher Ausführung dieselbe Wirkung (denselben Zustand) zu haben wie bei einmaliger.
Circuit Breaker
Schutzmechanismus, der Aufrufe an einen fehlerhaften Dienst vorübergehend unterbindet.
Eventual Consistency
Daten sind nach einer Änderung kurzzeitig unterschiedlich, gleichen sich aber nach einer gewissen Zeit an.
Saga
Muster für dienstübergreifende Abläufe aus lokalen Transaktionen mit Kompensationsschritten.
Outbox-Pattern
Ereignisse werden in derselben DB-Transaktion wie die Fachdaten gespeichert und danach zuverlässig versendet.
Distributed Tracing
Verfolgen einer Anfrage über alle beteiligten Dienste hinweg mit gemeinsamer Kennung.

Mit KI-Tutor

Jeder Kurs hat einen persönlichen KI-Tutor

  • Erklärt in deinem Tempo
  • Debuggt mit dir
  • Fachgespräch wie im QV
  • Unbegrenzt neue Übungen

Denkanstösse statt fertiger Lösungen. In der Gratis-Lektion zum Ausprobieren.

KI-Tutor · Modul 164Nur Tipps

Mein JOIN liefert plötzlich doppelte Zeilen. Was mache ich falsch?
Gute Frage! Schau dir die Spalte an, über die du verbindest: Ist sie in beiden Tabellen eindeutig? Was passiert mit einer Kundin, die zwei Bestellungen hat?
Ah, dann kommt sie zweimal vor …
Genau. Willst du die Bestellungen zählen oder nur die Kundinnen sehen? Je nachdem hilft dir GROUP BY oder DISTINCT.

Tutavio

So helfen wir dir bei Modul 321

  • Wir zeichnen mit dir die Architektur deines Projekts und besprechen, wo Dienstgrenzen und Kommunikationsarten sinnvoll sind.
  • Wir helfen dir, RabbitMQ oder Kafka mit Docker Compose lokal zum Laufen zu bringen, wenn Verbindungen oder Queues nicht wie erwartet funktionieren.
  • Wir provozieren mit dir gezielt Ausfälle und doppelte Nachrichten und prüfen, ob deine Dienste richtig reagieren.
  • Vor der Präsentation üben wir, wie du deine Architekturentscheide in wenigen Minuten verständlich begründest.

Unverbindlich anfragen. Wir melden uns innert 24 Stunden.

Tutor:in für Modul 321 finden

Passende Module

Diese Seite ist eine eigene Lernhilfe von Tutavio und keine offizielle Modulbeschreibung. Nummer, Titel und Einordnung stammen aus den öffentlichen Bildungsplänen. Die verbindliche Modulidentifikation findest du im Modulbaukasten von ICT-Berufsbildung Schweiz.

Gratis-LektionNachhilfe