Webtechnologien Wintersemester 2024

Verteilte Systeme

Einzelarbeit vs. Gruppenarbeit

Viele Apskete verteilter Systeme finden sich ähnlich in sozialen Systemen, z.B. Gruppenarbeit. Im Kurs wurden folgende Apskete erarbeitet.

Einzelarbeit

Vorteile

  • Scheduling einfacher
  • performant / keine Transaktionskosten/Overhead (kein Reden, keine Abstimmung, kein Warten)
  • vollständiges Wissen
  • Single Point of Truth
  • Eigenverantwortung
  • sicher (kein Abhören, keine Abhängigkeit)

Gruppenarbeit – Vorteile

  • Arbeitsteilung / Entlastung
  • Parallelität
  • performanter durch Spezialisierung
  • Resilienz - Risikoverteilung
  • Fehlererkennung
  • Skalierbarkeit (ab 2 ist 3,4,5 leicht)
  • Robustheit / Fehlertoleranz / Austauschbarkeit
  • gemeinsame Nutzung von Ressourcen (Drucker, Papier, Räume)
  • einige Aufgaben von Natur aus verteilt, z.B. geographische Trennung

Gruppenarbeit – Nachteile

  • erhöhte Komplexität durch Notwendigkeit von Kommunikation
  • Fehleranfälligkeit und neue Fehlerklassen
    • Übertragungsfehler / Missverständnisse
    • Timeout / Halteproblem
    • Mehrarbeit wenn unsynchronisiert
  • Kompatibilität
  • Unsicherheit
  • Debugging / Fehlerfindung / unklare Schuldfrage (verschiedene kommunizierende Prozesse sind schwer kontrollierbar und teilweise auch schwer verständlich)

Theoretische Kommunikations-grundlagen

Elemente eines Kommunikationssystems

Elemente

  1. Generierung, Darstellung / Beschreibung
    • Die Quelle erzeugt die zu übertragenden Daten.
  2. Kodierung
    • Der Sender transformiert/kodiert Daten und übergibt an ein Übertragungssystem
  3. Übertragung / Übermittlung
    • Das Übertragungssystem/Kanal sogt für eine einwandfreie Weitergabe der Daten.
  4. Dekodierung
    • Der Empfänger nimmt die Daten an, dekodiert sie und übergibt sie an das Datennutzer.
  5. Zusammensetzung
    • Das Ziel/Nutzer nimmt die eingehenden Daten entgegen und verwertet sie
  • Shannons Kommunikationsmodell (1949):
    • Zwei Formen von Information: Meldung und Signal
    • Zwei zentrale Aktivitäten:
      • Codierung der Meldung in ein Signal
      • Decodierung des Signals, um die Meldung wieder herzustellen
    • Gemeinsamer Code-Vorrat nötig auf Sender- und Empfängerseite

Kommunikationsarten

Richtung

  • simplex / unidirektional
  • (halbduplex)
  • duplex / bidirektional

Übertragung

  • Unicast (1 zu 1)
  • Multicasting (1 an einige)
  • Bradocasting (1 an alle)
  • simplex: eine straße, eine richtung
  • halbduplex: eine straße, zwei richtungen (mit warten)
  • duplex: zwei straßen, zwei richtungen

  • später:
    • verbindungsorientiert / datenorientiert (TCP, UPD)
    • sync / async

Kommunikationsformen

  • Textkommunikation
  • Datenkommunikation
  • Sprachkommunikation (audio)
  • Bild- und Videokommunikation
  • Unterscheidung nach der Form der zu übermittelnden Information

  • Textkommunikation
    • Austausch von Informationen (Symbole einer Sprache)
    • Für das menschliche Verständnis bestimmt und verfügbar auf Papier oder Display
  • Datenkommunikation:
    • Austausch binärcodierter Informationen
    • Komm.-Partner: Geräte zum Senden/Empfangen binärcodierter Daten
    • Anwendungen, z.B. Teledienste, Büroanwendungen
  • Sprachkommunikation (audio)
    • Austausch auditiver Medien (Sprache, Musik, Geräusche)
    • Analoge / digitale Übertragung
  • Bild- und Videokommunikation
    • Austausch visueller Medien
    • Anwendungen, z.B Videokonferenz

Spezielles Kommunikationsmodell für Computer – Anpassungen

  1. Meldungen liegen in digitaler Form vor
  2. Es existiert ein zweiter Kommunikationskanal für Rückmeldungen
  3. Definition eines Protokolles, das festlegt, was für Meldungen in welcher Reihenfolge ausgetauscht werden
  4. Rekursive Struktur ein protokoll-erweiterter Kanal kann selbst als (virtueller) Kanal verwendet werden
  • Damit können Abstraktionsebenen für Computerkommunikation gebildet werden
  • z.B. elektrisches Signal -> bit -> Zeichen -> Datenblock -> Dokument
  • Jede Ebene hat ihr eigenes Protokoll (Codierung etc)

Verteiltes System

Ein verteiltes System ist ein System,

  • in dem sich Hardware und Softwarekomponenten auf vernetzten Computern befinden und
  • nur über den Austausch von Nachrichten kommunizieren und ihre Aktionen koordinieren.
  • Ein DS ist eine Sammlung von unabhängigen Computern das für seine Nutzer wie ein einziges, kohärentes System wirkt.

Bekanntestes Beispiel: Das Internet

  • Größtes zusammenhängendes verteiltes System
  • Riesiger Zusammenschluss von heterogenen Computernetzwerken
  • „Kleber sind die standardisierten Internetprotokolle
    • IP (Schicht 3 Protokoll) mit IP Adressen
    • TCP / UDP (Schicht 4 Protokoll)
  • Nutzer können die verschiedenen Dienste / Anwendungen nutzen, unabhängig davon wo sie sich gerade befinden
  • Strukturierung durch Teilnetzwerke (Intranets) und Backbones

Verteilte Anwendung

Eine verteilte Anwendung ist eine Anwendung,

  • die ein verteiltes System zur Lösung eines Anwendungsproblems nutzt und
  • aus verschiedenen Komponenten besteht, die mit den Komponenten des verteilten Systems sowie mit den Anwendern kommunizieren.

Beispiele:

  • Einfache Internetanwendungen wie FTP, Telnet, Web
  • Verteilte Informationssysteme wie
    • Flugbuchungssysteme
    • Internetshops
  • Verteilte eingebettete Systeme wie
    • Steuerungssoftware Automobile
  • Verteilte mobile Anwendungen wie
    • verteilter Kalender im Handheld

Architekturmodelle

Ein Architekturmodell beschreibt

  • die Rollen einer Anwendungskomponente innerhalb der verteilten Anwendung
  • die Beziehungen zwischen den Anwendungskomponenten
  • Beispiele:
    • Client / Server
    • Peer-to-Peer

Client / Server

Client-Prozess

  • Kurzlebiger Prozess
  • Lebt genau für die Dauer der Nutzung durch einen Anwender
  • Agiert als Initiator einer IPC

Server-Prozess

  • Langlebiger Prozess
  • Lebt unbegrenzt
  • Agiert als Diensterbringer einer IPC
  • Der Klassiker
  • e.g. Bestellung in Restaurant (Kellner/in ist auch danach noch da)

Client / Server – Varianten

Mobiler Code

  • Servercode wandert auf Anfrage (in Form) zum Client.
  • Die Ausführung des Codes erfolgt am Client
  • Bekanntes Beispiel dieser Client / Server Variante sind Java Applets.
    • Applets als serverseitige Anwendungskomponenten wandern auf Anfrage zum Client.
    • Der Browser als Client macht Aufrufe lokal auf dem Applet.
    • Bei Bedarf reicht das Applet die Anfragen an den Server weiter.

Client / Server – Varianten

Kooperierende Server

  • Ein Verbund von Servern bearbeitet transparent einen Aufruf.
  • Verwendung findet dieses Modell beispielsweise im Internet bei Domain-Name-Servern (DNS).
  • DNS verwalten Abbildungstabellen von auf IP Adressen.
  • Liegt lokal keine Abbildung vor, wird der Aufruf transparent an den DNS-Server weitergeleitet.
  • Koop: Server arbeitet als Client

Client / Server – Varianten

Replizierte Server

  • Es werden Replikate von Serverprozesse zur Verfügung gestellt.
  • Beispiele:
    • Transparente Replikate in Clustern zur Verbesserung der Performance und zur Ausfallsicherheit.
    • öffentliche Replikate zur Lastverteilung (z.B. Mirror Server)

Client / Server – Varianten

Proxy Modell

  • Ein Proxy dient als Zwischenspeicher für Aufrufergebnisse vom Server.
  • Ziel ist die Verbesserung der Performance
  • Beispiel: Proxy zum Zwischenspeichern von Webseiten

Das Tier-Modell

  • Tier: Prozessraum in einer verteilten Anwendung
  • n-Tier-Architektur legt fest, wie viele unterschiedliche Client- und Server es innerhalb einer verteilten Anwendung gibt.
  • Ein Prozessraum kann einem physikalischen Rechner entsprechen.
  • Die Verwendung von n-Tier Architekturen ergibt vor allem für Informationssysteme Sinn:
    • Verteilung der Software zur Reduktion der
    • Interaktive Mensch-Maschine Schnittstelle
    • Datenzentriertes Vorgehen
  • Die Tier dient als Grundlage der n-Tier Architekturen.
  • n-Tier-Architekturen sind eine Erweiterung / Verfeinerung des Client- Server Architekturmodells.
  • Das n gibt an wie viele beteiligt sind.
  • kann: muss jedoch nicht!
  • Mehrere Tiers können auf einem Rechner sein, aber später leichter, aufzuteilen
  • Beispiele: {2,3,4}-Tier Architekturen

Das Tier-Modell

  • Typischen Aufgabenstellungen in einem Informationssystem:
    • Präsentation – Schnittstelle zum Anwender
    • Anwendungslogik – Bearbeitung der Anfragen
    • Datenhaltung – Speicherung der Daten in einer Datenbank
  • Im Tier-Modell wird jede dieser Aufgaben der Anwendungskomponente einer einzelnen Tiers zugeordnet.
  • Die Art der Zuordnung macht den entscheidenden Unterschied der verschiedenen n-Tier Architekturen.

2-Tier-Architektur

2 Tier

  • Das Modell unterstützt 2 Tiers: Client- und Server-Tier
  • Zuordnung von Aufgaben zu Tiers:
    • Präsentation – Client-Tier
    • Anwendungslogik – Client-Tier und/oder Server-Tier
    • Datenhaltung – Server-Tier
  • Die Verteilung der Anwendungslogik auf Client- und Server-Tier kann variieren.

Thin- vs Fat-Client-Architekturen

  • sind Verfeinerungsmodelle für die Zuordnung der Anwendungslogik
  • Ultra-Thin-Client: Die auf der Client-Tier sich auf reine Anzeige von Dialogen. der Anwendung ist ein Browser.
  • Thin-Client: Die auf der Client-Tier sich auf Anzeige von Dialogen und die Aufbereitung der Daten zur Anzeige.
  • Fat-Client: Teile der Anwendungslogik liegen zusammen mit der auf der Client-Tier.
  • Ultra-Thin-Client-Architekturen sind ausschließlich bei 3- und mehr-Tier Architekturen möglich.
  • Thin- und Fat-Client Architekturen sind bei allen n-Tier Architekturmodellen möglich.
  • In der Regel sind 2-Tier-Architekturen Fat-Client-Architekturen.

  • Pro Thin: Administration, Wartung, Support, Sicherheit (Virenschutz, Backup, Datendiebstahl), Ausfallsicherheit
  • Pro Fat: Netzwerkunabhängigkeit, gegebenenfalls Performance

3-Tier-Architektur

3 Tier

  • so war es Anfang der 2000er (und keiner sagt mehr Business Tier)
  • konkrete Technologien z.B.:
    • Presentation: JSP
    • Business: Java Server
    • Data: Oracle Database
  • Mid 2000 kam dann mit Rails viel MVC
  • heute Rich Client im Browser (Alternativen nennen)

Peer-to-Peer (P2P)

  • Gleichberechtigte Prozesse interagieren miteinander.
  • Jeder Prozess kann sowohl als Client- als auch als Serverprozess auftreten.
  • Peer Prozess
    • Kurzlebiger Prozess
    • Lebt für die Dauer der Nutzung durch einen Anwender
    • Agiert als Initiator und als Diensterbringer.
  • Ziel: von einem zentralen Server.
  • Einsatz beispielsweise bei Tauschbörsen.
  • Zwischen den Teilnehmern eines Netzwerks wertet ein peer-to-peer (P2P) (Computer)- Netzwerk unterschiedliche Verbindungen sowie die kumulativen Bandbreite aus; mehr als es konventionelle zentralisierte Ressourcen tun, in denen eine geringe Anzahl von Servern den Dienst oder die Applikation im Kern anbieten
  • Ein reines P2P-Netzwerk nutzt gleichwertige Knoten, die parallel Server- und Client- für andere Netzwerkknoten bieten.

Vergleich Client/Server und P2P

  • Server werden zentral betrieben und administriert
  • Ein Client besitzt geringere Ressourcen als der Server
  • Die Ressourcen eines Peer sind zu denen anderer Teilnehmer
  • P2P – Peers kommunizieren direkt mit anderen Peers und teilen Ressourcen

Eigenschaften P2P

  • Skalierbarkeit – Teilen von Ressourcen
  • Keine Notwendigkeit zur Einrichtung und Skalierung von Servern
  • Jeder Nutzer bring eigene Ressourcen ein
  • Zum Beispiel resistent gegen spikes (eine Menge von Nutzern, die alle zur gleichen Zeit eintreffen)
  • Preiswert – Keine Infrastruktur erforderlich
  • Hohe Verfügbarkeit – Inhalt nahezu permanent verfügbar
  • Jeder kann seinen eigenen Inhalt einbringen (kostenfrei)
  • Selbstgemachter (home-made) Inhalt
  • Illegaler Inhalt (P2P = Pirate-to-Pirate)
  • 1999: Napster
  • 2002: eMule, BitTorrent
  • 2003: Skype (nach Microsoft-Übernahme Wechsel zu Client-Server)
  • bis 2014: Spotify
  • heute verschwunden bzw. eher im Hintergrund, z.B. Cassandra (Datenbank)

Technische Kommunikations-grundlagen

ISO OSI-Referenzmodell

ISO OSI

  1. Schicht / Anwendung: Funktionen für Anwendungen sowie die Dateneingabe und -ausgabe.
  2. Schicht / Darstellung: Umwandlung der systemabhängigen Daten in ein unabhängiges Format.
  3. Schicht / Sitzung: Steuerung der Verbindungen und des Datenaustauschs.
  4. Schicht / Transport: Zuordnung der Datenpakete zu einer Anwendung.
  5. Schicht / Vermittlung: Routing der Datenpakete zum nächsten Knoten.
  6. Schicht / Sicherung: Segmentierung der Pakete in Frames und Hinzufügen von Prüfsummen.
  7. Schicht / Bitübertragung: Umwandlung der Bits in ein zum Medium passendes Signal und physikalische Übertragung.
  • 7/6/5: HTTP (Daten)
  • 4: TCP (Segmente), UDP (Datagramme) (Port)
  • 3: IP (Pakete) (IP-Adresse)
  • 2: Ethernet (Frames)

  • pro Schicht eigene Meta-Infos / Header / Overhead

  • viel Fehlerpotential, darum wird häufig eine Abstraktionseben eingezogen…

Middleware

Middleware

  • Zwischenanwendung
  • anwendungsneutrales Programm, das zwischen Anwendungen vermittelt, so dass die darunter liegende Komplexität verborgen wird (Transparenz)

Middleware

  • Ziel: Verbergen der Verteilungsaspekte vor der Anwendung
  • Anwendungsaufrufe gehen an Middleware, diese kümmert sich um Weiterreichung über das Netzwerk (meist TCP/IP)
  • Wir unterscheiden zwischen:
    • Kommunikationsorientierte Middleware
    • Anwendungsorientierte Middleware
    • Nachrichtenorientierte Middleware
  • die verschiedenen Arten schauen wir uns später genauer an

  • und was habe ich als EntwicklerIn nun davon? IPC!

Interprozesskommunikation (IPC)

  • Komponenten einer verteilten Anwendung laufen in unterschiedlichen Prozessen
  • Kommunikation basiert auf Nachrichtenaustausch in Form von Bitfolgen
  • IPC ist ein Mechanismus zum Nachrichtenaustausch zwischen Prozessen
  • Kommunikationsmodelle legen das Protokoll für den Ablauf der IPC fest
  • Unterscheidung zwischen synchroner und asynchroner Kommunikation
  • IPC bietet:
    • bietet Anwendungen sicheren Zugriff auf die Ressourcen des Rechners.
    • Prozesse laufen gegeneinander isoliert.
    • Damit zwei Prozesse Informationen austauschen können, müssen sie Interprozesskommunikation einsetzen.
    • verschiedene technische Umsetzungen, z.B. Dateien und Pipes (lokal) oder Sockets (lokal und entfernt)

Synchrone Kommunikation

Sync

  • Sender-Prozess blockiert während Anfrageverarbeitung
  • Eigenschaften:
    • Enge Kopplung zwischen Sender und Empfänger mit allen Vor- und Nachteilen
    • Hohe Abhängigkeit besonders im Fehlerfall
  • Voraussetzung:
    • sichere und schnelle Netzverbindungen
    • empfangender Prozess ist verfügbar

Asynchrone Kommunikation

Async

  • Sender ist nicht blockiert; Prozess kann nach dem Senden sofort weiterarbeiten
  • Antworten sind optional (push / pull)
  • Realisierung über Queues:
    • komplizierter zu implementieren, dafür effizienter
    • lose Koppelung von Prozessen
    • geringere Fehlerabhängigkeit
    • Empfänger muss nicht empfangsbereit sein
  • Push: Empfänger sendet Ergebnis
  • Pull: Sender holt sich Ergebnis
  • Queues = Warteschlangen

  • Beispiel: Bestellung in Restaurant
  • Vergleich: Sync = Telefon, Async = E-Mail

Kommunikationsorientierte Middleware

  • Schwerpunkt liegt in der Abstraktion von der Netzwerkprogrammierung
  • Dienst als Kommunikationsinfrastruktur
  • Konzentriert sich auf reine Kommunikationsaspekte
  • Beispiele sind RPC, RMI, Web Service

Anwendungsorientierte Middleware

  • Setzt auf der kommunikationsorientierten Middleware auf
  • Erweitert diese um Laufzeitumgebung + Dienste + Komponentenmodell
  • Beispiele: CORBA, J2EE, .Net

Nachrichtenorientierte Middleware

  • englisch Message Oriented Middleware (MOM)
  • arbeitet nicht mit Methoden- oder Funktionsaufrufen, sondern über den Austausch von Nachrichten
  • verschiedene Kommunikationsprotokolle:
    • Message Passing
    • Message Queueing
    • Publish & Subscribe
  • Nachrichten häufig in XML (oder JSON)
  • Kommunikationsprotokolle:
    • Message Passing: Direkte Kommunikation zwischen Anwendungen
    • Message Queueing: Indirekte Kommunikation über eine Warteschlange
    • Publish & Subscribe: Herausgeber stellt dem Abonnenten Nachrichten zur Verfügung
  • Vorteile
    • Asynchrone/synchrone Kommunikation
    • Server/Dienst muss nicht sofort verfügbar sein
    • Message-Warteschlangen
    • Meist schnellere Ausführung als Funktionsaufruf-basierte Programme
    • Lose Kopplung von Server/Clients
    • Mehr Toleranz für Änderungen der bestehenden Funktionen
    • Verbesserte Verfügbarkeit der Systeme
    • Parallele Verarbeitung von Nachrichten möglich
  • Nachteile
    • Ausfall der MOM legt alle angeschlossenen Systeme lahm
    • Designen, Testen, Debuggen und Entwicklung der Bauteile sind für Synchron-Programmierer ungewohnt

Probleme

  • Heterogenität: Hardware, Betriebssysteme, Programmiersprachen, Protokolle, Darstellung von Datentypen, Zeichenkodierungen
  • Lösung
    • Installationen für verschiedenen Betriebssysteme
    • SDKs für verschiedene Programmiersprachen
    • Einigung auf einheitliche Datenformate

Datentransformation (Marshalling / Unmarshalling)

  • Unter Marshalling versteht man die Transformation von Daten in ein Übertragungsformat.
  • Unter Unmarshalling versteht man die Rücktransformation eines Zeichen- oder Bytestroms in Daten einer konkreten Programmiersprache.
  • Umwandeln von strukturierten oder elementaren Daten in ein Format, das die Übermittlung an andere Prozesse oder Programme ermöglicht
  • wir erinnern, Elemente eines Kommunikationssystems: Darstellung → Kodierung → Übertragung → Dekodierung → Zusammensetzung
  • Verantwortlich für die Aufgabe sind Stubs und Skeletons einer Middleware.

Technische Umsetzung

Sockets

  • vom Betriebssystem bereitgestelltes Objekt, das als Kommunikationsendpunkt dient
  • Ein Socket setzt sich aus IP und Port zusammen., z.B. 141.45.146.226:443 oder 127.0.0.1:3000
  • Über diese Programmier-Schnittstelle (API) können Applikationen verteilt über das Netz programmiert werden
  • OS verwaltet Sockets, Programm fragt Socket von OS an
  • 3 Phasen:
    • Initialisierungsphase: Verbindungsaufbau
    • Lese- und Schreibphase: Symmetrische Kommunikation
    • Aufräumphase: Freigabe von Ressourcen

Remote Procedure Call (RPC)

  • Technik zum Aufruf von Funktionen (mit Parametern) auf anderen Prozessen
  • Entkopplung von Client und Server durch Schnittstellendefinition
  • Einführung von Stub und Skeleton als Zugriffsschnittstelle auf Client- und Serverseite
    • werden aus der Schnittstellenspezifikation generiert
    • sind verantwortlich für Marshalling und Unmarshalling
    • ermöglichen die Zusicherung von Zugriffs- und Ortstransparenz
  • Fehleranfällig
  • Im Fehlerfall (z.B. Server-Crash) kann der Client nicht wissen, wann der Fehler auftrat
  • Wenn RPC über UDP, dann folgende Fehlersemantiken:
    • maybe: ¯_(ツ)_/¯
    • at-least-once: Wiederholung bei Fehler (nur gut wenn idempotent)
    • at-most-once: Höchstens einmal, Aufruf-Duplikate werden gefiltert, entweder klappt oder Fehler
    • exactly-once: Aufruf-Duplikate werden gefiltert

Remote Method Invocation (RMI)

  • Java-eigene Art des Remote Procedure Call
  • Aufruf von Methoden auf entferntem Objekt
  • entfernt = andere JVM