Einführung in verteilte Systeme

Ein weitgefasster Überblick über verteilte Systeme.

Dozent:

Prof. Dr. Michael Eichberg

Kontakt:

michael.eichberg@dhbw-mannheim.de, Raum 149B

Version:

2024-05-14

Folien:

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

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

Fehler auf Folien melden:

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

Einführung in verteilte Systeme

Kerninhalte gem. MHB

Verteilte Systeme - Middleware Lösungen

  1. Apache Kafka

  2. Apache Zookeeper

  3. (Scala) Akka

  4. Rabbit MQ

  5. (Twitter/X) Finagle

  6. Apache Hive

  7. Apache Cassandra

  8. Apache Spark

  9. Apache Pulsar

  1. Hadoop HDFS

  2. Hadoop Yarn/MapReduce

  3. Apache Mahout

  4. Apache Camel

  5. NATS

  6. Spring Framework

  7. Eclipse Glassfish und Jakarta EE

  8. Tokio

  9. Google Spanner

Terminologie verteilter Systeme

images/modern_software_architecture-tag_cloud.png

Empfohlene Literatur

screenshots/distributed-systems.net.png

Ergänzend bzw. für interessierte Studierende:

screenshots/microservices.jpg

Empfohlener Podcast: SE-Radio

screenshots/se-radio.net.png

Empfohlener Podcast: Thoughtworks Technology Podcast

screenshots/thoughtworks-technology-podcast.png

Verteilte Systeme - Beschreibung und Eigenschaften

Verteilt vs. Dezentralisiert

images/distributed-vs-decentralized.svg

Distributed vs Decentralized

Häufige Missverständnisse bzgl. zentralisierter Systeme

  1. Zentralisierte Lösungen lassen sich nicht skalieren

    Es gilt zwischen logischer und physischer Zentralisierung zu unterscheiden. Zum Beispiel ist das Domain Name System:

    • logisch zentralisiert

    • physisch (massiv) verteilt

    • dezentralisiert über mehrere Organisationen

  2. Zentralisierte Lösungen haben einen Single Point of Failure

    Im Allgemeinen nicht zutreffend (z. B. DNS).

    Ein einzelne mögliche Fehlerquelle ist weiterhin oft:

    • leichter zu verwalten

    • einfacher robuster zu machen

Sichtweisen auf verteilte Systeme

Verteilte Systeme sind komplex.

Entwurfsziele verteilter Systeme

Gemeinsame Nutzung von Ressourcen

Gemeinsame Nutzung von Ressourcen

Kanonische Beispiele:

Verteilungstransparenz

(Distribution Transparency)

Definition von Verteilungstransparenz

Die Verteilungstransparenz wird durch viele verschiedene Techniken von der so genannten Middleware realisiert - einer Schicht zwischen Anwendungen und Betriebssystemen.

Aspekte der Verteilungstransparenz

Datenzugriff

Verbergen von Unterschieden in der Datendarstellung und der Art des Zugriffs auf ein lokales bzw. entferntes Objekt

Ort der Datenhaltung

Verbergen, wo sich ein Objekt befindet

Verschieben

Verbergen, dass ein Objekt während der Verwendung an einen anderen Ort verschoben werden kann

Migration

Verbergen, dass ein Objekt an einen anderen Ort verschoben werden kann

Replikation

Verbergen, dass ein Objekt repliziert wird

Nebenläufigkeit

Verbergen, dass ein Objekt von mehreren unabhängigen Benutzern gemeinsam genutzt werden kann

Fehlertransparenz

Verbergen des Ausfalls und der Wiederherstellung eines Objekts

Datendarstellung: Big-Endian vs. Little-Endian; ASCII vs. Iso-Latin 8859-1 vs. UTF-8

Grad der erreichbaren Verteilungstransparenz

Eine vollständige Verteilungstransparenz ist nicht erreichbar.

Jedoch kann auch eine sehr hohe Verteilungstransparenz bereits hohe Kosten nach sich ziehen.

Die Verteilung offen zu legen, kann Vorteile bringen

Verteilungstransparenz ist ein hehres Ziel, aber oft schwer zu erreichen, und häufig auch nicht erstrebenswert.

Offene verteilte Systeme

Offene verteilte Systeme

Offene verteilte Systeme müssen in der Lage sein, mit Diensten anderer (offener) Systeme zu interagieren, unabhängig von der zugrunde liegenden Umgebung:

Ein Beispiel sind Authentifizierungsdienste, die von vielen verschiedenen Anwendungen genutzt werden können.

Vorgaben/Richtlinien vs. Umsetzungen

(Policies vs. Mechanisms)

Richtlinien für die Umsetzung von Offenheit

Mechanismen bzgl. der Umsetzung von Offenheit

Die harte Kodierung von Richtlinien vereinfacht oft die Verwaltung und reduziert die Komplexität des Systems. Hat jedoch den Preis geringerer Flexibilität.

Sicherheit in verteilten Systemen - Schutzziele

Ein verteiltes System, das nicht sicher ist, ist nicht verlässlich.

Grundlegende Schutzziele:

Vertraulichkeit:

Informationen werden nur an autorisierte Parteien weitergegeben.

Integrität:

Änderungen an den Werten eines Systems dürfen nur auf autorisierte Weise vorgenommen werden können.

Zusammen mit dem dritten Schutzziel: Verfügbarkeit, bilden diese drei Schutzziele die CIA-Triade der Informationssicherheit (Confidentiality, Integrity, and Availability).

Sicherheit in verteilten Systemen - Autorisierung, Authentifizierung, Vertrauen

Authentifizierung Authentication:

Prozess zur Überprüfung der Korrektheit einer behaupteten Identität.

Autorisierung Authorization:

Verfügt eine identifizierte Einheit über die richtigen Zugriffsrechte?

Vertrauen Trust:

Eine Komponente kann sich sicher sein, dass eine andere Komponente bestimmte Handlungen gemäß den Erwartungen ausführt.

Sicherheit - Verschlüsselung und Signaturen

Es geht im Wesentlichen um das Ver- und Entschlüsseln von Daten (\(X\)) mit Hilfe von Schlüsseln.

\(E(K,X)\) bedeutet, dass wir die Nachricht X mit dem Schlüssel \(K\) verschlüsseln (encryption).

\(D(K,X)\) bezeichnet die Umkehrfunktion, die die Daten wieder entschlüsselt (decryption).

Symmetrische Verschlüsselung

Der Schlüssel zur Verschlüsselung ist identisch mit dem Schlüssel zur Entschlüsselung (decryption (\(D\))).

\begin{equation*} X = D(K,E(K,X)) \end{equation*}

Asymmetrische Verschlüsselung

Wir unterscheiden zwischen privaten (\(PR\)) und öffentlichen Schlüsseln (\(PU\)) (\(PU\) \(\neq\) \(PR\)). Ein privater und ein öffentlicher Schlüssel bilden immer ein Paar. Der private Schlüssel ist immer geheim zu halten.

Verschlüsselung von Nachrichten

Alice sendet eine Nachricht an Bob mit Hilfe des öffentlichen Schlüssels von Bob.

\begin{align*} Y = E(PU_{Bob},X) \\ X = D(PR_{Bob},Y) \end{align*}

Signierung von Nachrichten

Alice signiert (\(S\)) eine Nachricht mit ihrem privaten Schlüssel.

\begin{align*} Y = E(PR_{Alice},X) \\ X = D(PU_{Alice},Y) \end{align*}

Sicherheit - Sicheres Hashing

Eine sichere Hash-Funktion \(Digest(X)\) gibt eine Zeichenkette fester Länge (\(H\)) zurück.

Signieren von Nachrichten

Alice signiert eine Nachricht \(X\) mit ihrem privaten Schlüssel.

\begin{align*} Alice: [E(PR_{Alice},H=Digest(X)),X] \\ \end{align*}

Bob prüft die Nachricht \(X\) auf Authentizität:

\begin{equation*} Bob: D(PU_{Alice},H) \stackrel{?}{=} Digest(X) \end{equation*}

Sicheres Hashing ≘ Secure Hashing

Zwischenfrage

Verschlüsselung mit Public-Private-Key Verfahren

Wenn Alice eine mit Bobs öffentlichen Schlüssel verschlüsselte Nachricht an Ihn schickt, welches Sicherheitsproblem kann dann aufkommen?

MTAwMDAw:raM54fogY7ke4MBbDUWKcum7Ux/Uf5cJY9tgeAfrgaY=:9ZOXIFEH4tLMbYYe:Rt3Cd+rnN1SJuQA8Fs+8Ipf4vXfJU1zZ+zc3uvFdIvQBNboUEPbHIo95fbIDBDew4SqZaFo6+OKOJ8Wt+6PCSvKvrxA5okk93ZctZI+KC+kVoNw97PkHLWsYDKb5PIBRHvJyhmZOJur1YvMQYJmghOvbn3YRgF8m7SDNlF0eqZ/mOX8hLUvQUBqKbkKd2OCbcBQ0+Bq84cUWyrYQOylARfLRUgtl3xMRp242d+Z8EOdzdlFvavGgPldC3gfpZQhXe7Lj9vA3vE+H6vFao1BEqkQOmQ==

Skalierbarkeit

Skalierbarkeit in verteilten Systemen

Wir können mind. drei Arten von Skalierbarkeit unterscheiden:

Ursachen für Skalierbarkeitsprobleme bei zentralisierten Lösungen:

Die Skalierbarkeit bzgl. der Größe kann oft durch den Einsatz von mehr und leistungsstärkeren Servern, die parallel betrieben werden, erreicht werden.

Die geografische und administrative Skalierbarkeit ist häufig eine größere Herausforderung.

Formale Analyse der Skalierbarkeit zentralisierter Systeme

Ein zentralisierter Dienst kann als einfaches Warteschlangensystem modelliert werden:

images/queuing-system.svg

Annahmen:

Die Warteschlange hat eine unendliche Kapazität; d. h.die Ankunftsrate der Anfragen wird nicht durch die aktuelle Länge der Warteschlange oder durch das, was gerade bearbeitet wird, beeinflusst.

Formale Analyse der Skalierbarkeit zentralisierter Systeme

  • Ankunftsrate der Anfragen:

    \(\lambda\) (Anfragen pro Sekunde)

  • Verarbeitungskapazität des Services:

    \(\mu\) (Anfragen pro Sekunde)

Anteil der Zeit mit \(x\) Anfragen im System:

\begin{equation*} p_x = \bigl(1 - \frac{\lambda}{\mu}\bigr)\bigl(\frac{\lambda}{\mu}\bigr)^x \end{equation*}
images/number_of_requests_in_system.svg

# Anfragen in Bearbeitung und Warteschlange

Z. B. ist der Anteil der Zeit in der der Rechner idle ist (\(p_0\); d. h.es gibt keine bzw. 0 Anfragen): 90 %, 60 % und 30 %.

Anschaulich kann man die Formel: \(p_x = \bigl(1 - \frac{\lambda}{\mu}\bigr)\bigl(\frac{\lambda}{\mu}\bigr)^x\) so verstehen, dass die Wahrscheinlichkeit, dass sich \(x\) Anfragen im System befinden, mit der Anzahl der Anfragen im System abnimmt. Deswegen gilt \(\bigl(\frac{\lambda}{\mu}\bigr)^x\) weiterhin müssen wir modellieren, dass es nur zwei Anfragen gibt (d. h. das System ist sonst idle). Deswegen müssen wir noch mit \(p_0 = 1 - \frac{\lambda}{\mu}\) multiplizieren.

Formale Analyse der Skalierbarkeit zentralisierter Systeme

Hinweis

\(x\) = # Anfragen im Sys.

\begin{equation*} p_x = \bigl(1 - \frac{\lambda}{\mu}\bigr)\bigl(\frac{\lambda}{\mu}\bigr)^x \end{equation*}

\(U\) ist der Anteil der Zeit, in der ein Dienst ausgelastet ist:

\begin{equation*} U = \sum_{x > 0} p_x = 1 - p_0 = \frac{\lambda}{\mu} \Rightarrow p_x = (1-U) U^x \end{equation*}

Durchschnittliche Anzahl der Anfragen:

\begin{equation*} \bar{N} = \sum_{x\geq 0} x \cdot p_x = \sum_{x \geq 0} x \cdot (1-U)U^x = (1-U)\sum_{x\geq 0} x\cdot U^x = \frac{(1-U)U}{(1-U)^2} = \frac{U}{1-U} \end{equation*}

Durchschnittlicher Durchsatz:

\begin{equation*} X = \underbrace{U \cdot \mu}_{\mbox{ausgelastet}} + \underbrace{(1-U) \cdot 0}_{\mbox{ungenutzt}} = \frac{\lambda}{\mu} \cdot \mu = \lambda \end{equation*}

Für eine unendliche geometrische Reihe mit dem Quotienten \(U\) gilt:

\begin{equation*} \sum_{k\geq 0} k\cdot U^k = \frac{U}{(1-U)^2} \end{equation*}

Darstellung der durchschnittlichen Anzahl an Anfragen im System in Abhängigkeit von der Auslastung \(U\):

images/average_number_of_requests_in_system.svg

Formale Analyse der Skalierbarkeit zentralisierter Systeme

Die Antwortszeit (response time) ist die Gesamtzeit für die Bearbeitung einer Anfrage

\begin{equation*} R = \frac{\bar{N}}{X} = \frac{S}{1-U} \Rightarrow \frac{R}{S} = \frac{1}{1-U} \end{equation*}

mit \(S = \frac{1}{\mu}\) für die durchschnittliche Servicezeit.

images/response_time.svg

Probleme der geografischen Skalierbarkeit

Probleme der administrativen Skalierbarkeit

Widersprüchliche Richtlinien in Bezug auf Nutzung (und damit Bezahlung), Verwaltung und Sicherheit

Beispiele

Ausnahme

Verschiedene Peer-to-Peer-Netze [1] bei denen Endnutzer zusammenarbeiten und nicht Verwaltungseinheiten:

Ansätze, um Skalierung zu erreichen

Verbergen von Kommunikationslatenzen durch:

Dieses Modell ist jedoch nicht immer anwendbar.

Partitionierung von Daten und Berechnungen über mehrere Rechner.

Verlagerung von Berechnungen auf Clients

images/moving-computations.svg

Ansätze, um Skalierung zu erreichen

Einsatz von Replikation und Caching, um Kopien von Daten auf verschiedenen Rechnern verfügbar zu machen.

Herausforderungen bei der Replikation

Inwieweit Inkonsistenzen toleriert werden können, ist anwendungsspezifisch. Können diese jedoch toleriert werden, dann kann der Bedarf an globaler Synchronisation verringert werden.

Paralleles Rechnen (Parallel Computing)

Multiprozessor

images/multiprocessor-vs-multicomputer/multiprocessor.svg

Multicomputer

images/multiprocessor-vs-multicomputer/multicomputer.svg

Das verteilte Hochleistungsrechnen begann mit dem parallelen Rechnen.

Verteilte Systeme mit gemeinsamem Speicher (Multicomputer with shared memory) als alternative Architektur haben die Erwartungen nicht erfüllt und sind daher nicht mehr relevant.

Amdahls Gesetz - Grenzen der Skalierbarkeit

Legende

\(C\) = Anzahl CPUs

\(P\) = Parallelisierungsgrad in Prozent

\(S\) = Speedup

Amdahls Gesetz visualisiert - Grenzen der Skalierbarkeit

images/amdahl.svg

Gustafsons Gesetz - Grenzen der Skalierbarkeit

Legende

\(C\) = Anzahl CPUs

\(P\) = Parallelisierungsgrad in Abhängigkeit von der Problemgröße n

\(S\) = Speedup

Beschleunigung (Speedup) eines parallelisierten Programms relativ zu der nicht-parallelisierten Variante: \(S(C) = 1 + P(n) \cdot (C-1)\)

Übung

Speedup berechnen

Sie sind Pentester und versuchen in ein System einzudringen indem Sie die Passwörter der Administratoren angreifen. Momentan setzen Sie dazu 2 Grafikkarten mit je 2048 Compute Units ein. Der serielle Anteil des Angriffs beträgt 10 %. Wie hoch ist der Speedup, den Sie erwarten können, wenn Sie zwei weitere vergleichbare Grafikkarten mit weiteren 2048 Compute Units je GPU hinzufügen?

Hintergrund: Die Angriffe sind hochgradig parallelisierbar und hängen effektiv von der Anzahl an CUs ab. Die Grafikkarten sind in der Lage, die Angriffe effektiv zu beschleunigen.

MTAwMDAw:Tk5FzWkUH4XzcsW0rK2Gj8YWD998Q9V3Jslmb/NSbts=:JHDoiOuBwxNNUIFV:vjrHpFNOYDgPbF3cCFaqjFJmGtit5IZMJEuZgHzobHViwnSJMUikG2tl5OGMrERR8QaArjaozVXe2WJSNg9KDFBwERD6O3Sw4KABEn2LHyjA9M+Y6uuurdb+vsT2YXolQx971h02aN1OeewI7ASp7cVBVJLqTx3LWQXBhcIQct66B5WnPtYm7HwpCGBhVmrgvLR2bx2Ana7OsUmx6IrjZtGsFEEN4C1pvptA9Zalina+f37wJE3xHpKI1P0MFnOV+xtsDPwdtk5EmyRmxV/3944E6rXR+9rm7JBRuejER3dH6uN5dJDTsMg8WRZdfBBbBaWeQV5llgfDsUtYmmo7LbS3NLr8/wLHDWc+39sa10zxy9yhAE68pje9Lrh9si5ZWNPCwbMO6JZdy0z/og6UfS/1IeSmotman6ON90NpITYESiwAFK5MwxNiHJBWf0igAeNq/GcS90Ss5h0mG/DSo3PsEMfJS+dMW9FBiWyQxNDBQLEnpj2c3IfTHZWOvK7KHJPedvaFklt5XaBl9HLiWLf+bvdmnZ/uH9QT/9RfN2v8Gi9zJ5SeXN0W2XWBUqNsBc6eM2fuWoiW3lfFbUHpOwcDdPLyG02BBJwp6nYN7gWip8SjD8bc9WfFg4fVdIxZ+KE8fmzcosoHedZEVk0Y0v5QKVXtmllNvWBejmLhObaVgxjth/wuoQLDeSxApj7Vcxy07Y4cRmukD7avf2ijRFw+6qakM4icTkTIKdPwy1UtAhsbyhg49InV2XSZKuWvEWfJzMUHjw6DyGBi+iJRkRIn7VOGTXCiI9zFtk0WV0ZaPxkwOD1//VEeWPMZnb4stlublB+ZV4Io4WkDDfNIujr1YjZaxNoZEyl97ueBni6HmLtrLFKzuPFvCmA5F8E/xfIVwkbmlhLh0rcQ8TYqxpmkoq0YxfeT6eV29DlSD97PtoRQNAUeTSpRH9L/oIQ5vGTkzRVBXLYs3jJXebBrQv4/EcXhRjsoJWzwco3s0AXouiyFkp3ecccdAQ6jEnd0nqtDMXRjB6mDaB/U+ni/0JYYfWCZhZZkmTaxCxwQAdk0CKTlCTgYqnAOUFxIXDBmpm4S8Qj5EqmZ+K4yOTRJr3ll/krXa1Gk2Phfc9THi6NyAHrnIAP57GTdJYEDS1m3iAel84mWiQvKoCV1kse9bdKY

Anforderungen an verteilter Systeme

Verlässlichkeit verteilter Systeme

(Dependability)

Anforderungen an die Verlässlichkeit verteilter Systeme

Anforderung

Beschreibung

Verfügbarkeit

Das System ist nutzbar.

Zuverlässigkeit

Kontinuität der korrekten Leistungserbringung.

Sicherheit (Safety[3])

Niedrige Wahrscheinlichkeit für ein katastrophales Ereignis

Wartbarkeit

Wie leicht kann ein fehlgeschlagenes System wiederhergestellt werden?

Zuverlässigkeit (Reliability) vs. Verfügbarkeit (Availability) in verteilten Systemen

Verlässlichkeit \(R(t)\) der Komponente \(C\)

Bedingte Wahrscheinlichkeit, dass \(C\) während \([0,t)\) korrekt funktioniert hat, wenn \(C\) zum Zeitpunkt \(T = 0\) korrekt funktionierte.

Traditionelle Metriken

MTBF vs. MTTR

Wenn die MTTF einer Komponente 100 Stunden beträgt und die MTTR 10 Stunden beträgt, dann ist die MTBF \(= MTTF + MTTR = 100 + 10 = 110\) Stunden.

MapReduce - Programmiermodell und Middleware für paralleles Rechnen

MapReduce - Visualisierung und Beispiel

images/map-reduce.png

Beispiel: Berechnung der Häufigkeit von Wörtern in einem sehr großen Datensatz.

K1:

URLs

V1:

HTML Dokumente

K2:

Wörter in einem HTML Dokument

V2:

Anzahl pro gefundenem Wort

V3:

Häufigkeit des Wortes

Ein weiteres Beispiel ist die Berechnung eines invertierten Indexes.

Übung: Verfügbarkeit und Ausfallwahrscheinlichkeit

Ausfallwahrscheinlichkeit

Gegeben sei ein größeres verteiltes System bestehend aus 500 unabhängigen Rechnern, die auch unabhängig voneinander ausfallen. Im Mittel ist jeder Rechner innerhalb von zwei Tagen zwölf Stunden lang nicht erreichbar.

  1. Bestimmen Sie die Intaktwahrscheinlichkeit eines einzelnen Rechners.

  2. Ein Datensatz ist aus Gründen der Fehlertoleranz auf drei Rechnern identisch repliziert gespeichert. Wie hoch ist seine mittlere Zugriffsverfügbarkeit beim Lesen?

  3. Auf wie vielen Rechnern müssen Sie identische Kopien dieses Datensatzes speichern, damit die mittlere Zugriffsverfügbarkeit beim Lesen bei 99,999 % liegt

  4. Für wie viele Minuten im Jahr (mit 365 Tagen) ist im Mittel bei einer Verfügbarkeit von 99,999 % kein Lesen des Datensatzes möglich?

MTAwMDAw:4NJXOkpB/UK+2ppiKvwMmyC/3+0YkIP3utIsOGOyEBA=:H9UnqoVVHEnRuvzM:94vy5fCT4kd8EDv51DuG60HbL+5jBLKK9VkyqLIL+B0D+0HWvkdIt6MRyQunIJ7Xjv6IJiDVk/hIT8fTtTQ6DNVEccSPCgYGoTlFQMjz0CoefcCJg7KcCtEvnczvPhKVdwuWszElS3tg/LMCmIsGO5k5iIrMnrfdFYcRhu4BDRUNhrHrqM1HMcKc/PhfOCkHW+zYZKaK4nTaqTQfT4eOVtIHHzvZM/kr8bOiUyvjnrLkT6VBUoGRS6bl3l65nGUCuZDSR/VESTYLffHaiYUaWNcMagE+4p1MNiqYYyRNsG1j72cJvy4VkE6nXva+OOFGNNRDdcHLSDQgp0hum3JqXBos+4qq/SFfIofyZETpfUwv7SvdE9iT5hlcGqc6VtsKZQH3cs15tct616+7hv3tTN2ovCWYMTflNpZP1UWFRAGQWbUjjKHq9VaIC0p/EkmwXM/oCdnU6rtIek3dONcTW8WCe4+nIg+MrU5Lj8kFLWDdtGHHa0TxY33KNzta00EEWGQhklM4CR0oyEQwAMaEIgMGwsfd5kol9i9XumqL1GDD8uq77pAlwrwI8cqfjOWhOA7IE7fNqE9vRod2VERIMYdIuMxxUCIvaMKQIi2BlGRuYF8Q3jeV0AsJBeBbninfY5qVmR/JdwPfc6babtGyi9LxNPea58n7w5dru+ttTKrzDeyoSp7Qp3J7mWy4eFoCGRxeYVRj5zP41v7aP3KuvvLDSvrd4Bax9tyse7SaayETqNBqSsv8QYYsTFr3qs+SByURxEdVrYzEOCev+Cl6qZxV90E0E8wRnXvWESTUx18tkCDgwicOjiuINiQQuq8wGmpWBm8fEpYbYK8xJlPUeVMWYyM01UUPaWYHcxZeS6X4Rj9LU2tbO69aawOIleqOuZwfjOc85Vj+tGyulY05ZoByX+d+FfIxmPvOE6QHNoRLq2d9W+8oVMXZqu9OBLHb1r4vt/ucRKEQWBS7aKQme+QJFYuBpPS/+E8YXfI2WxhuosKInEIuQalHEv9XRxcxxs22vpAwyTEz7Hi20qFZSSk8hzbcD1KodF2OiT3d1rRqa5Mn9L1hy3enVU0eYW1XDZXIYC3mhbFH0a1JXkndwUDAZf2MUKI0gd4WQ5hm8ACt4eXSYEU4sEjuT3aXs+0YAleJDLGZc8AYhL4F40yuB5yOubABh4aswX88LIVAl0NWsKHhB82qKGv6jYvtY9rjdYI9+cC22JyWx7EnhGPGwFmHTEvMoq/D2CY+xWUqLYvZAwWISmu+XZkpKHiMN17lmdTXKlfjzneBg3WNT9SWBCYtgL18qIrbHc4c5u8s/xaN2nOoMpWQkiV/pWYBsIKsOkwszzb13TDFopDu5tJmt40YLqB65NG2YDO7jvGu+6y0KcJEBqh2sO+7zL7K3dGBIAJxsidtYuJ1wnh3zYoozL016GyaEEyES8CUIg==

Klassifikation Verteilte Systeme

Cluster Computing

Eine Gruppe von High-End-Systemen, die über ein LAN verbunden sind.

images/cluster-computing.svg

Die einzelnen Rechner/Compute Nodes sind oft identisch (Hardware und Software) und werden von einem Verwaltungsknotenpunkt (management node) verwaltet.

Grid Computing

Weiterführung des Cluster Computing.

(Volunteer) Grid Computing - Beispiel:

https://scienceunited.org

https://einsteinathome.org

Grundlegende Architektur für Grid-Computing

images/architecture-for-grid-computing.svg
Fabric Layer:

Bietet Schnittstellen zu lokalen Ressourcen (zur Abfrage von Status und Fähigkeiten, Sperren usw.)

Konnektivitätsschicht:

Kommunikations- / Transaktions- /Authentifizierungsprotokolle, z. B. für die Übertragung von Daten zwischen Ressourcen.

Ressourcenschicht:

Verwaltet eine einzelne Ressource, z. B. das Erstellen von Prozessen oder das Lesen von Daten.

Collective Layer:

Verwaltet den Zugriff auf mehrere Ressourcen: Auffindung (Discovery), Einplanung (Scheduling) und Replikation.

Anwendungen:

Enthält tatsächliche Grid-Anwendungen in einer einzelnen Organisation.

Peer-to-Peer-Systeme

Vision:

Das Netzwerk ist der Computer. Es gibt einen Datenbestand, der immer weltweit erreichbar ist.

Idee:

Keine dedizierten Clients und Server, jeder Teilnehmer (Peer) ist gleichzeitig Anbieter und Kunde.

Selbstorganisierend, ohne zentrale Infrastruktur (Koordinator, Datenbestand, Teilnehmerverzeichnis).

Jeder Peer ist autonom und kann jederzeit offline sein, Netzwerkadressen können sich beliebig ändern.

Hauptanwendung:

File-Sharing-Systeme (insbesondere BitTorrent)

Die große Zeit der klassischen Peer-to-Peer-Systeme war in den 2000er Jahren.

Cloud-Computing

Weiterentwicklung des Grid-Computing. Ziel ist die Bereitstellung von Rechenleistung, Speicher und Anwendungen als Dienstleistung.

Varianten

Serverless Computing

Serverless Computing ermöglicht es Entwicklern Anwendungen schneller zu erstellen, da sie sich nicht mehr um die Verwaltung der Infrastruktur kümmern müssen.

Herausforderungen bei der Entwicklung verteilter Systeme

Integration von Anwendungen

Die Standardanwendungen in Unternehmen sind vernetzte Anwendungen und die Herstellung der Interoperabilität zwischen diesen Anwendungen ist eine große Herausforderung.

Grundlegender Ansatz

Clients kombinieren Anfragen für (verschiedene) Anwendungen, senden diese, sammeln die Antworten und präsentieren dem Benutzer ein kohärentes Ergebnis.

Weiterentwicklung

Die direkte Kommunikation zwischen den Anwendungen führt zur Integration von Unternehmensanwendungen (Enterprise Application Integration (EAI)).

Eine vernetzte Anwendung ist eine Anwendung, die auf einem Server läuft und ihre Dienste für entfernte Clients verfügbar macht.

Transaktionen auf Geschäftsprozessebene

images/transactions/transaction.svg

Alles oder nichts.

Primitiv

Beschreibung

BEGINN DER TRANSAKTION

Zeigt den Beginn einer Transaktion an.

ENDE DER TRANSAKTION

Beendigung der Transaktion mit dem Versuch eines COMMIT.

ABBRUCH DER TRANSAKTION

Beenden der Transaktion und Wiederherstellung des alten Zustands.

LESEN

Lesen von Daten aus (z. B.) einer Datei oder einer Tabelle.

SCHREIBEN

Schreiben von Daten (z. B.) in eine Datei oder eine Tabelle.

Atomar Atomic:

geschieht untrennbar (scheinbar)

Konsistent Consistent:

keine Verletzung von Systeminvarianten

Isoliert Isolated:

keine gegenseitige Beeinflussung

Dauerhaft Durable:

Nach einem Commit sind die Änderungen dauerhaft

ACID-Eigenschaften

Transaction Processing Monitor (TPM)

Die für eine Transaktion benötigten Daten, sind oft verteilt über mehrere Server.

images/transactions/tpm.svg

Ein TPM ist für die Koordination der Ausführung einer Transaktion verantwortlich.

Insbesondere im Zusammenhang mit Microservices ist der Einsatz von TPMs und 2PC zum Zwecke der Koordination von Geschäftsprozessen häufig nicht die 1. Wahl.

Nichtsdestotrotz sind verteilte Transaktionen ein wichtiger Bestandteil von verteilten Systemen und Google hat z. B. mit Spanner eine Lösung entwickelt, die Transaktionen im globalen Maßstab ermöglicht (Global Consistency). (https://cloud.google.com/spanner?hl=en und https://www.youtube.com/watch?v=iKQhPwbzzxU).

Middleware und Enterprise Application Integration (EAI)

Middleware ermöglicht Kommunikation zwischen den Anwendungen.

images/middleware.svg
Remote Procedure Call (RPC):

Anfragen werden über einen lokalen Prozeduraufruf gesendet, als Nachricht verpackt, verarbeitet, von einer Nachricht beantwortet und das Ergebnis ist dann der Rückgabewert des Prozeduraufrufs.

Nachrichtenorientierte Middleware Message Oriented Middleware (MOM):

Nachrichten werden an einen logischen Kontaktpunkt gesendet (d. h.veröffentlicht) und Anwendungen weitergeleitet, die diese Nachrichten abonnieren.

Wie kann die Anwendungsintegration erreicht werden?

Dateiübertragung:

Technisch einfach, aber nicht flexibel:

  • Dateiformat und Layout herausfinden

  • Dateiverwaltung regeln

  • Weitergabe von Aktualisierungen und Aktualisierungsbenachrichtigungen

Gemeinsame Datenbank:

Sehr viel flexibler, erfordert aber immer noch ein gemeinsames Datenschema neben dem Risiko eines Engpasses.

Entfernter Prozeduraufruf Remote Procedure Call (RPC):

Wirksam, wenn die Ausführung einer Reihe von Aktionen erforderlich ist.

Nachrichtenübermittlung Messaging:

Ermöglicht eine zeitliche und räumliche Entkopplung im Vergleich zu RPCs.

Moderne verteilte Systeme

Distributed Pervasive/Ubiquitous Systems

(verteilte, allgegenwärtige/alles durchdringende Systeme)

Moderne verteilte Systeme zeichnen sich dadurch aus, dass die Knoten klein, mobil und oft in ein größeres System eingebettet sind. Das System bettet sich auf natürliche Weise in die Umgebung des Benutzers ein. Die Vernetzung ist drahtlos.

Drei (sich überschneidende) Untertypen

Ubiquitous Computing:

allgegenwärtig und ständig präsent; d. h., es besteht eine ständige Interaktion zwischen System und Benutzer.

Mobile Computing:

allgegenwärtig; der Schwerpunkt liegt auf der Tatsache, dass Geräte von Natur aus mobil sind.

Sensor-/Actuator Networks:

allgegenwärtig; Schwerpunkt liegt auf der tatsächlichen (kollaborativen) Erfassung (sensing) und Betätigung (actuation).

Ubiquitous Systems - Kernbestandteile

  1. Distribution: Die Geräte sind vernetzt, verteilt und ohne Hürde zugänglich.

  2. Interaction: Die Interaktion zwischen Benutzern und Geräten ist in hohem Maße unaufdringlich.

  3. Context Awareness: Das System kennt den Kontext eines Benutzers, um die Interaktion zu optimieren.

  4. Autonomy: Die Geräte arbeiten autonom, ohne menschliches Eingreifen, und verwalten sich in hohem Maße eigenständig.

  5. Intelligence: Das System als Ganzes kann ein breites Spektrum dynamischer Aktionen und Interaktionen bewältigen.

Mobile Computing - Auszeichnende Merkmale

Aktueller Stand ist, dass mobile Geräte Verbindungen zu stationären Servern herstellen, wodurch diese im Prinzip Clients von Cloud-basierten Diensten sind.

Mobile Cloud Computing

images/mobile_computing/mobile_cloud_computing.svg

Mobile Edge Computing

images/mobile_computing/mobile_edge_computing.svg

Sensor Networks

Die Knoten, an denen Sensoren angebracht sind:

images/sensor_networks/operator_stores_and_processes_data.svg

Sensor Networks als verteilte Datenbanken

images/sensor_networks/nodes_store_and_process_data.svg

Das Cloud-Edge Continuum

images/cloud_edge_continuum.svg

Fallstricke bei der Entwicklung verteilter Systeme

Viele verteilte Systeme sind unnötig komplex aufgrund fehlerhafter Annahmen sowie von Architektur- und Designfehlern, die später nachgebessert werden müssen.

Falsche (und oft versteckte) Annahmen