Grundlegende Konzepte verteilter Systeme

Dozent:

Prof. Dr. Michael Eichberg

Kontakt:

michael.eichberg@dhbw-mannheim.de

Version:

2024-05-09

Folien:

https://delors.github.io/ds-grundlegende-konzepte/folien.rst.html

https://delors.github.io/ds-grundlegende-konzepte/folien.rst.html.pdf

Fehler auf Folien melden:

https://github.com/Delors/delors.github.io/issues

Die folgenden Konzepte sind für die Entwicklung verteilter Systeme von zentraler Bedeutung und sind in vielen aktuellen Middlewareprodukten umgesetzt.

Zeit in verteilten Systemen

Von der Bedeutung der Zeit in verteilten Systemen

Unterscheidung von realer und logischer Zeit.

Die logische Zeit ermöglicht es uns, eine wohldefinierte Reihenfolge zwischen Ereignissen (vgl. happened before Relation) zu bestimmen.

Reale Zeit

Sonnensekunde:

bezieht sich auf die Zeitspanne zwischen aufeinanderfolgenden Sonnenhöchstständen.

Atomzeitsekunde:

Bezugspunkt ist die Schwingungsdauer eines Cäsium-133-Atoms.

TAI (Temps Atomique International): Durchschnittszeit der Atomuhren von über 60 Instituten weltweit (z. B. Braunschweig), ermittelt vom BIH (Bureau International de l’Heure) in Paris

UTC (Universal Coordinated Time):

Basiert auf TAI; aktuell ist noch das Einfügen gelegentlicher Schaltsekunden zur Anpassung an den Sonnentag erforderlich. Ab 2035 wird die Schaltsekunde voraussichtlich abgeschafft.

Computeruhrzeit

Uhrensynchronisation nach Christian

(Probabilistic Clock Synchronisation, 1989)

Network Time Protocol (NTP, RFC 5905)

Aktualisierung der Zeit eines NTP Servers erfolgt aber nur wenn der anfragende Server einen höheren Stratumwert hat (d. h. potentiell unpräziser ist) als der angefragte Server. Der anfragende Server erhält danach den Stratumwert des abgefragten Servers \(+1\).

Zeit: Berechung der Round-Trip-Time und der Zeitdifferenz/des Gangunterschieds

Origin \(T_1\)

Systemzeit des Clients beim Absenden der Anfrage

Receive \(T_2\)

Systemzeit des Servers beim Empfang der Anfrage

Transmit \(T_3\)

Systemzeit des Servers beim Absenden der Antwort

Destination \(T_4\)

Systemzeit des Clients beim Empfang der Antwort

\begin{equation*} RTT: r = (T_4 - T_1) - (T_3 - T_2) \end{equation*}
\begin{equation*} Gangunterschied: x = \frac{(T_2 - T_1) - (T_4 - T_3)}{2} \end{equation*}

Es wird die Annahme getroffen, dass die Zeit auf beiden Rechnern quasi gleichschnell vergeht. Die Zeitdifferenz zwischen den beiden Rechnern ist also konstant.

\((T3 - T2)\) ist die Zeit, die der Server zum Bearbeiten benötigt.

Die Round-Trip-Time (RTT) ist die Zeit, die ein Signal benötigt, um von einem Rechner zum anderen und zurückzugelangen.

Der Gangunterschied ist die Differenz zwischen der Zeit auf dem Server und der Zeit auf dem Client.

Probleme bei der Uhrensynchronisation entstehen aufgrund ungewisser Latenzen:

Aufgrund der Probleme ist ein konsistenter, realistischer globaler Schnappschuss nicht realisierbar.

Beispiel zur Berechnung des Gangunterschieds

Sei die Latenz 5 ms und die Bearbeitungszeit 2 ms.

Weiterhin sei \(T_1 = 110\) und \(T_2 = 100\). D. h. der Client geht vor.

Da die Bearbeitungszeit des Servers 2 ms beträgt, gilt für \(T_3\) und \(T_4\):

\(T_3 = 102\) und

\(T_4 = 110+(2 \times 5) +2 = 122\).

Somit ergibt sich der Gangunterschied zu:

\(x = \frac{(100-110) - (122-102)}{2} = \frac{(-10 - 20)}{2} = -15\) ms.

Logische Zeit

Für die konsistente Sicht von Ereignissen in einem verteilten System ist die reale Zeit in vielen Fällen nicht wichtig!

Wir benötigen nur eine global eindeutige Reihenfolge der Ereignisse; d. h. wir benötigten Zeitstempel.

Jedoch beeinflussen sich nicht alle Ereignisse untereinander; d. h. sind kausal unabhängig.

Es ist wichtig zu wissen, was vorher und was nachher passiert ist, aber es ist nicht wichtig, dass wir wissen wann genau (Uhrzeit) etwas passiert ist.

Lamport-Uhren (logical clocks)

Vorgehensweise

Ereignis receive ist zeitlich immer nach send.

Ereignisse werden eingeordnet nach der happened-before Relation:

a → b

(a happened-before b)

Resultat: es ergibt sich eine partielle Ordnung (partial ordering) der Ereignisse.

Ein konsistenter Schnappschuss enthält zu jedem Empfangs- das entsprechende Sendeereignis.

Lamport Uhren sind eine Möglichkeit, um Totally-ordered Multicast zu unterstützen, was insbesondere im Zusammenhang mit Replication von Nöten ist.

Übung

Lamport-Uhren

Gegeben sei die nachfolgend dargestellte Situation mit drei Prozessen in einem verteilten System. Die Zeitstempel der Ereignisse werden mittels der Lamport'schen Uhren vergeben.

(Die Werte c ganz links geben den Stand der jeweiligen Uhren zu Beginn an.)

  1. Versehen Sie alle Ereignisse mit den korrekten Zeitstempeln.

  2. Geben Sie einen konsistenten Sicherungspunkt an, der Ereignis r enthält.

images/lamport-exercise/task.svg
MTAwMDAw:JRIqLSBGYRMDxsha23gKZ3Cu2O8utcGj2PhBdTNCJHM=:zS/3i2DFzmGcQamN:ri9h1UlVxMulAPTiVR38qFpC7AYvGsHuUeuZRsRbbsw0WhwYmZEPqbmZilEgwIlEIH4NFljIQHAciGPMtTorsvZuxRv24RsO5/TlM53xQESAtuSY5wr5lOep/iylP9BDXvzBOeueiuKR6dPfhcScCLhwDhM0C4hjouatI37VTkeSldX77ZFyw80fkfvWc2kx2oMn6tn1JaYpGjoBwfmXeFGjBPvu63J8NPyuM37X3mIqXlLrrEYiXiO34AXpARtAipgerIuMasSoWMfNu1pPORt0GA8d6NRZSMRxA+08rGbRc3iwclKZ+QGqez2O7hcnSvzfphPs7I92CqOqHLENUaujnpNjvf7tMAn5V4pCr83lDSrWjTqkQM/ePu+R1JgVCpKkaIWGxMY9qx7nz0ED5rMKXyZtxepmDnsZ5JKbtf+YbzFNLILs5r05Lm+ppHAsv7LdXkvnJBMiP+F1CV04adpMT2VUtJ3BzR6ADcI+qv422Gl8LgcRWcQYoGY25OtvCI3QAHq+9p4Jf4XgZSmRO/E/dDk37Rwh+C8bKaGRmyE2iiy79jqV/7qNWvCTWlN/y1kz7UGyi9IWXhlx60P2kNRgVCBBd9WslJNR

Verteilte Transaktionen

Atomic Commit Protocol

Wir brauchen ein Atomic Commit Protocol.

Wiederholung Transaktionen

Eine Transaktion stellt die zuverlässige Bearbeitung persistenter Daten sicher – auch in Fehlersituationen. Zentrales Merkmal ist die Garantie der ACID-Eigenschaften (Atomicity, Consistency, Isolation, Durability).

Am Ende einer Transaktion findet entweder ein commit oder abort / rollback statt.

Nach einem commit sind alle Änderungen dauerhaft.

Fehlertoleranz

Das Ziel ist es zu ermöglichen, ein zuverlässiges System aus unzuverlässigen Komponenten aufzubauen.

Drei grundsätzliche Schritte:

  1. Erkennung von Fehlern: Erkennen des Vorhandenseins eines Fehlers in einem Datenwert oder einem Steuersignal

  2. Fehlereingrenzung: Begrenzung der Fehlerausbreitung

  3. Maskierung von Fehlern: Entwicklung von Mechanismen, die sicherstellen, dass ein System trotz eines Fehlers korrekt funktioniert (und möglicherweise einen Fehler korrigiert)

Two-Phase Commit Protocol - 2PC

Teilnehmer sind (1) die Partizipanten (\(P_i\)), welche die verteilten Daten verwalten, und (2) ein Koordinator, (\(K\)) der die Steuerung des Protokolls übernimmt. (\(K\) darf selbst einer der \(P_i\) sein)

  1. Abstimmungsphase:

    • K sendet eine PREPARE-Nachricht an alle \(P_i\).

    • Jeder \(P_i\) prüft für sich, ob die Transaktion lokal korrekt abgeschlossen werden kann.

    • Falls ja, sendet er READY, anderenfalls ABORT an \(K\)

  2. Entscheidungsphase:

    • Falls alle \(P_i\) mit READY geantwortet haben, sendet \(K\) COMMIT an alle \(P_i\); anderenfalls sendet \(K\) eine ABORT-Nachricht an alle \(P_i\)

    • Falls die Entscheidung COMMIT war, machen alle \(P_i\) die Transaktion stabil

    • Falls die Entscheidung ABORT war, setzen alle \(P_i\) die Transaktion zurück.

    • Alle \(P_i\) senden schließlich eine OK-Nachricht an \(K\)

Das 2-PC Protokoll ist nicht Fehlerresistent. d. h. es kann Fehler erkennen, aber nicht zwangsläufig korrigieren. Um einige Fehlerszenarien zu behandeln, müssen Ergebnisse (insbesondere READY und COMMIT) in einem persistenten write-ahead Log-File festgehalten werden.

Übung

Two-Phase-Commit

Analysieren Sie, wie das Two-Phase-Commit-Protokoll mit Fehlersituationen umgeht.

Welche Fehler können zu welchen Zeitpunkten auftreten und welche kann das Protokoll beheben?

MTAwMDAw:ZUSV3nq058xy9hBO9XpT+ORqlxLeTNA7SCUDh+bVAoI=:L4cQwC0eop451PLh:rQVZelUJ5Gg0uky8QFLNqN5bhSj0jsRK2tLpkhJyf8WDci61q7bCkCbN5doTttP4yt2c0+yV4QOUCVH1le+7nfqc01DAj0Tc0VaWCLVk1xaNpq8/kFgUJH5C+ldiitvKHOK/kprCtwKZ5kpQJEaIBJ5GgidqUoJsxDxxiTi5nA/egkHz3GFvzaON0FAe+qeCQ+y8KpCL4UZ0Lo5a/88cTxmW7o4pdnlOqnz/xksVMpwtaMTrFfNzA7Wha09m9/7EJBENXV5mCxQRqcMYnoRh+1m5A00bTyEJLO11cFZKJMYx5S6pSbSP7yZARc9oTpE2lvNiq+Ph/EO3qbZEbIrg1Sz0AhnIgSospUv1KM1nLRxSYCDPEJYd7P9q87K2W9kflmtrq8Sxc1g7xsdeW5+1/gwQPozSPdJ1CPSQQXjVVDWV5fpTY2GtKFSq7eOm8pcCeGbA+WNzG2CT6xHBa0visM3W7KEGnLyqoDWkvqNwELWE2RkcTZ6PKlL7Ku0MMgmdlv4vne+iH4SDlkIcWsb5ol5JByRKKP//2vpRONyKBlat+iTo068g5hsFIkv7daOdk6/pBEIOhx1nn/9ayJFoIG0bY1aeYeVjrGxCkc9/CRM5mmAeKAl9BYrH5wEZAkvSjc5VMRdaAk+XhCf3YKhbvow9O712gJ1U5/RvZN5tXaiyb3zXc9u4JjmZHUaTOVWVXPvuBjgPK4xP+11EkrEL1LXiNNzbXwAKxzNdQeEgQmJ82ay9fUwBs/2NBFSLTXwEzlQXGEbyh3sDwHM6blc4VhNcWyf1hzbhK/5OqZrkGmxgomSeuJ2fkOJXbh4eEDiU+Ts5hk3aIWBDFXDeq1vcbA+fxaV1TSvZzF8yutOgPTo41dJFVFb2j/n7UV1l0mBo7VFwOqNzl26lek7vkMrV97Hn2HQjjtMwnQPvIkZ2k7xeYocu8vPwMU7tkvuMgbPlqZRUQSBWN+MR4rxYHRTwh93JEsIeP2CEAFPEXLDvgjxJMIIhvrGSYoe2lEn4t28DK4eJ8NDK9HD/O5qU7yA/nGfs3kxzdceynDCezs9wt731UTzN0CSt9FiyoQNqYlng9JW/7FegMdjyVijRf6MSPtnGDj4Le2qMaMzE8rcGWR9RgfJ5VZIelaCV9nSP7JIOY3VAQmH6p536i4RP1VMu4SkVMMGE8ahP20Zqr+QlpRHKW3jAxXDErlruu/FKnzA8sYJI3M4VV1QP6aYS0ZfoCaLXP+xBNyJ0u4nEBEy2kKUwei8DVLviV+pcvc0IlEUFpF1T/F94Wruo0hOH6iCUCmm06fo/8dXT9abBmEPhGI5opY9pnalW4lBaaXW4MO7oHQ5WN4C7Ks+d+AWj0pVUkTJvdc20XSCZ83p4fXt9B6RnowATRLsqkoQNfPgjx10hEJwk8vjUfzGRFlMC0UeTBosHLWX11/cN+/HM1ZHJOFmLI0H/lKrx0NWWj+GN3ERH03YCWjqXwNHUJ9vACpCsqIel/Fv+3L/HkwRLFYuYxiwWgHqR8CjXYDh1HR/tpvp9oqlzy45DgAA/NJyh/D8XutDnXVdNxpbMZiK1VIh5T8o2abd68JBLnajU/KWuvgkjCnLk0Oz7wsZ2KYIqscscAP1Nk/N5fzzo4aeLsDs4nLgrhRnsYjR+IZzyoA7VQc957zOafS3XRNp3tbRrnmtcJHtU1brglluqMC9jWK0g/CdaiyPBgzX1qvSilLahJfnOiZvsVx0TdD16dUEOf6Dt3970kRoqak68EVXzhQ6ncIu2Ckhmn/i+vNiUXPzTUde0WbDJeYiitShHgrQoDFrjfBY2xCMyUFuQzdQiBYBhPKbdrc4xIC9VDBm0n6LDNuPG2Z2zSV9exbiimrzE18O95UXFVZjcr0NUiG48WF5Vj4DxfNeuEEbqdyyjlWWBGnQ74Barwf8FGB6T5D7X0W2KYn2tXtgniHAi3Hg/oe1gqi6UaeuLd7FyovfAI0s37diOMG06tbDZ6dMXw6maRf9wcCVuEA+IIvwgs5nNuw48bpknT1nI28a/ltsrPTCEaVKRiWEKCXg7Ie/x8wj5kOLAnaCoAmE34ni9PSlis5Gkp4goxyiyEiVSlC2odn2XYqJgJpTXh4L6Qcusfb8NwXm0YAiuANUNx3i77E1u09VWJSfakum2VeUSzS+5ADvMXQYtYSLxKXoeAtRCRedxRJuhtv8LYiS6544OQPxXaeJJxxCNiTSwjqhpIJbCkC5Fsz6LRhW64ut7DTk31zEX2NEwwLaLaVE6lUKiX4B9exvwfdzpCt9raT9hk2NoIg3STzTS/XUgnfZIAi2Q0Y6RYFSYefVmDre5Nv/K8qygyfp90tqMHztfgbfMveG9lXNyOHwLLu35vUA56WaGNVbTW5bgUAeebldEk4cXhoNUyNq1dELI7OSgv1EOgYRJVs7NmYDKTUDMb/0JessFFHOD+jWJ9/4C8/9x