Inhaltsverzeichnis

Bevor wir loslegen und programmieren können, wollen wir an dieser Stelle erst einmal das Themengebiet unserer Vorlesung abstecken. Hier erhältst du daher einen umfassenden Überblick, was verteilte Systeme sind und welche Möglichkeiten es bei ihrer Entwicklung gibt.

Lernziele dieser Einheit

Nach Abschluss dieser Einheit kannst du …

🏁

Wichtige Begriffe

Bildnachweis: Pixabay: rawpixel

Definition des Begriffs „Verteiltes System”

Allgemeine Definition

Jeden Tag sprechen wir vom System:
📣 Das System hängt mal wieder.
📣 Dazu musst du dich am System anmelden.
📣 Das haben wir im System gespeichert.

Doch was um alles in der Welt ist überhaupt ein „System” ⁉️

Die klassische Definition eines verteilten Systems: Mehre voneinander unabhängige Computer (Prozessoren) mit jeweils eigenem Hauptspeicher tauschen über ein Netzwerk Daten miteinander Daten aus, um eine gemeinsame Aufgabe zu bearbeiten.

Skizze eines verteilten Systems mit mehreren Computern

Bildnachweise: Wikimedia Commons: Jolla Ltd., Pixabay: Elianos2, Pixabay: GAMEZONA, Pixabay: succo, Pixabay: OpenClipart-Vectors

Dies ist kein verteiltes System. Zwar haben wir hier auch mehrere, prinzipiell unabhängige Prozessoren. Jedoch teilen sie sich den Hauptspeicher und alle andere Peripherie des Systems, so dass man hier für alle praktischen Belange von einem einzelnen Computer ausgehen kann.

Schematisches Diagramm eines symetrischen Multiprozessorsystems

Bildnachweis: In Anlehnung an Wikipedia: Diagram of a symmetric multiprocessing system

Fallbeispiele

Das größte verteilte System überhaupt ist sicher das Internet. 1977 noch ARPANET genannt, konnte man alle beteiligten Rechner auf einer Seite darstellen. 😎

Karte des ARPANET von 1977

Bildnachweis: Wikimedia Commons

Hochleistungsrechner, wie sie in der Forschung und Wissenschaft oder von großen Internetkonzernen genutzt werden, bestehen aus einer riesigen Anzahl kleiner Computer mit eigenem Hauptspeicher und in der Regel auch eigenem Massenspeicher. Die Einzelcomputer werden dabei in Storage Nodes zur Speicherung von Daten und in Compute Nodes zur Bereitstellung von Rechenleistung unterschieden.
IBM Blue-Gene Supercomputer
Skizze eines Grid-Computers

Ein Fallbeispiel aus dem IoT-Umfeld könnte eine IP-basierte Videoüberwachungsanlage sein 📹. In diesem Fall beinhaltet jede Kamera ein eingebettetes Computersystem, das über ein IP-Netz mit einem Archivserver und den Arbeitsplatzcomputern des Sicherheitspersonals kommuniziert.

Skizee einer digitalen Videoüberwachungsanlage

Bildnachweise: Pixabay: OpenClipart-Vectors, PIxabay: JanBaby, Pixabay: GunetherDillingen

Definition des Begriffs „Verteilte Anwendung”

Die Komponente einer verteilten Anwendung laufen auf einem verteilten System
🌟 Weltweiter Informationsdienst auf Grundlage des Internets
🌟 Softwarekomponenten: Browser, Webserver, Datenbanken
🌟 Viele Implementierungen für jede Komponente verfügbar
🌟 HTTP als universelles Nachrichtenformat
🌟 Interessant: Das Web dient selbst als Plattform für verteilte Anwendungen

Skizze einer Webanwendung mit Browser, Server und Datenbank

Bildnachweise: Wikimedia Commons: Jolla Ltd., Pixabay: Elianos2, Wikipedia: Apache Software Foundation

  • E-Mail
  • Onlinekalender mit Zugriff via Desktop und mobiler App
  • Voice over IP und Videokonferenzen
  • Internet Relay Chat
  • XMPP (technische Grundlage für WhatsApp und Jabber)
  • Sammlung und Überwachung von IoT-Sensordaten
  • Computerspiele mit Mehrspielermodus
  • Onlinebuchung von Pauschalreisen und Flugtickets
  • Jedes ERP- oder CRM-System
  • Generell jede moderne Mehrbenutzeranwendung
  • Sowie jede Webanwendung mit Server-Backend

Wozu verteilte Systeme gebraucht werden

Parallelisierung rechenintensiver Aufgaben

Ein einzelner Handwerker Ein einzelner Computer würde viel zu lange brauchen!
Viele Handwerker gleichzeitig Wenn sich die Arbeit verteilt, geht es natürlich viel schneller.
Computergeneriertes Bild zweier Schrauben Zum Beispiel beim Raytracing, das zwar besonders realistische Bilder erzeugt, dafür aber auch sehr rechenintensiv ist.

Weitere Anwendungsfälle

  • Informations- und Wissensmanagement¹
  • Datenbankanwendungen mit mehreren Benutzern
  • Kollaboratives, gleichzeitiges Arbeiten an gemeinsamen Dokumenten
  • Statistische Auswertungen, Datenanalyse, Big Data
  • IoT-Anwendungen zum Sammeln und Auswerten von Sensordaten
  • Mobile Apps und browserbasierte Benutzeroberflächen
  • KI-Systeme und Expertensysteme
  • Computergestützte Fertigungsanlagen

¹ Hierfür wurde das gesamte Internet ursprünglich erfunden.

Allgemeine Anforderungen an verteilte Systeme

Optimale Ressourcennutzung

Das System muss effizient mit den Ressourcen umgehen und möglichst viele Ressourcen für die eigentliche Anwendung zur Verfügung stellen. Die Anwendung muss ebenfalls intelligent damit umgehen und sie gut nutzen.

Stabilität und Fehlertoleranz

Programmabstürze und unvorhersehbares Verhalten sind unbedingt zu vermeiden. Beim Programmieren muss man daher neben den fachlichen Fehlern auch die Fehler berücksichtigen, die sich aus der Verteilung ergeben.

Einfache Skalierbarkeit

Es muss einfach möglich sein, die Leistung des Systems zu erhöhen oder diese zu reduzieren, wenn sie nicht mehr benötigt wird. Dies kann je nach System automatisch oder manuell erfolgen.

Einfache Nutzung (Transparenz)

Zumindest für den Anwender sollte die inheränte Komplexität des Systems verborgen bleiben. Entwickler und Administratoren freuen sich aber auch, wenn sie sich nicht um jede Kleinigkeit kümmern müssen.

Einfache Erweiterbarkeit

Die Architektur muss flexibel genug sein, um einzelne Teile jederzeit austauschen oder verbessern zu können.

Sicherheit

Die Vertraulichkeit, Integrität und Authentizität des Systems und seiner Daten muss gewährleistet bleiben.

Fehler vermeiden

Zum Beispiel durch Eingabehilfen oder einen sauberen Programmierstil

Fehler erkennen

Zum Beispiel durch Checksummen, Plausiprüfungen oder Monitoring

Fehler maskieren

Zum Beispiel durch spätere Wiederholung des Vorgangs

Fehler tolerieren

Zum Beispiel durch Speichern beider Versionen bei Schreibkonflikten

Fehler beheben

Zum Beispiel durch automatisches Umschalten auf ein Hot-Standby

Authentizität

Die Anwendung kann die Identität des Benutzers überprüfen und verhindern, dass er sich für jemand anderes ausgibt. Der Benutzer kann umgekehrt die Identität der Gegenseite verifizieren. In der Regel werden von einer Zertifizierungsstelle ausgestellte SSL-Zertifikate hierfür genutzt.

Vertraulichkeit

Sensitive Informationen werden gegen Einsicht durch unbefugte Dritte geschützt. Die Anwendung muss daher mindestens eine Benutzer- und Rechteverwaltung besitzen. Zusätzlich sollten die Daten verschlüsselt werden.

Integrität

Es muss sichergestellt werden, dass keine Informationen unbemerkt verfälscht werden können. Dies trifft sowohl auf gespeicherte Daten als auch auf die Übertragung der Daten zu. Üblicherweise werden hierfür digitale Signaturen auf Basis asymmetrischer Verschlüsselung verwendet.

Die acht Arten der Transparenz

Transparenz in der Wirtschaft

Jedes Detail kann nachgelesen und muss beachtet werden.

Transparenz in der Informatik

Es läuft einfach, ich muss mich um nichts kümmern.

Zugriffstransparenz

Ermöglicht den Zugriff auf lokale und entfernte Ressourcen auf gleiche Art und Weise (mit identischen Operationen).

Replikationstransparenz

Ermöglicht die automatische Replikation von Daten. Die Repliken werden automatisch aktuell gehalten.

Positions- / Ortstransparenz

Ermöglicht den Zugriff auf eine Ressource ohne genau zu wissen, auf welchem Rechner oder an welchem Ort sie sich befindet.

Fehlertransparenz

Ermöglicht die automatische Behandlung bestimmter Fehler ohne Benutzereingriff, beispielsweise durch automatisch eingeleitete Korrekturmaßnahmen.

Mobilitätstransparenz

Ermöglicht es, die Ressourcen jederzeit (auf andere Rechner) zu verschieben, ohne dass die Anwendung oder das System hierfür angepasst werden müssen.

Leistungstransparenz

Ermöglicht es automatisch oder manuell die Leistung des Systems anzupassen, wenn die Anforderungen steigen oder abnehmen.

Nebenläufigkeitstransparenz

Ermöglicht es, viele nebenläufige Teilprozesse gleichzeitig laufen zu lassen, ohne dass es zu Race Conditions oder Deadlocks kommt.

Skalierbarkeitstransparenz

Ermöglicht es, das System zu skalieren, ohne tiefgreifende Anpassungen daran vornehmen zu müssen.

Das CAP-Theorem verteilter Anwendungen

Visualisierung des CAP-Theorems

Consistency (Konsistenz)

Alle Knoten sehen immer exakt dieselben, konsistenten Daten. Bei replizierten Datenbeständen werden die Änderungen daher erst sichtbar, wenn sie in allen Repliken nachgezogen wurden.

Availability (Verfügbarkeit)

Das System ist jederzeit erreichbar und überschreitet niemals die maximal zulässige Antwortzeit.

Partition Tolerance (Partitionstoleranz)

Die Anwendung funktioniert auch dann noch, wenn einzelne Teile ausgefallen sind.

Eine verteilte Anwendung kann immer nur zwei dieser Anforderungen gänzlich erfüllen!

Moderne Anwendungen sind deshalb oft nur „eventuell-konsistent”. Beispielsweise kann es in Facebook vorkommen, dass ein Like in den ersten Sekunden nicht für alle Profilbesucher sichtbar wird, da nicht alle auf derselben Datenreplik arbeiten.

eBay hingegen würde bei der Gebotsabgabe sicher lieber eine etwas längere Antwortzeit in Kauf nehmen, anstatt sich überschreibende Gebote zu riskieren.

Aufgabe 1: Ein kleines Verteilte-Systeme-Quiz

Der nachfolgende Lückentext soll die Definition eines verteilten Systems und einer verteilten Anwendung wiedergeben. Bediene dich daher aus folgendem Wortvorrat, um die Definition zu vervollständigen.

Nachrichten System Austausch Komponenten
Klassen Problem kommunizieren Aufruf
Softwarekomponenten Schnittstellen Interfaces Lösung
Methoden verteiltes Kollektion Computer
unabhängiger Anwendung System schicken
kommunizieren System Komponenten Netzwerk

Verteiltes System

Ein ist ein , in dem sich Hardware- und auf mehreren Computern befinden und diese nur über den von , um ihre Aktionen zu koordinieren.

Verteilte Anwendung

Eine verteilte Anwendung ist eine , die ein verteiltes System zur des Anwendungsproblems nutzt und aus mehreren besteht, die über wohl-definierte mit anderen Komponenten des Systems und dem Anwender .


Lösung:
verteiltes, System, System, Softwarekomponenten, Austausch, Nachrichten, kommunizieren
Anwendung, Lösung, Komponenten, Schnittstellen, kommunizieren

a) Nur eine der folgenden Aussagen ist richtig. Welche?

  1. Heutige Computer sind eigentlich immer verteilte Systeme, da jeder Computer heutzutage über mehr als einen Rechenkern verfügt.
  2. Eine der Hauptaufgaben verteilter Systeme ist die Parallelisierung komplexer Berechnungen, für die ein einzelner Computer zu langsam wäre.
  3. Auch wenn man in der Regel von kooperierenden Programmen auf mehreren Rechnern ausgeht, können ganz kleine, verteilte System nur aus einem Programm auf einem Rechner bestehen.

b) Welches ist keine verteilte Anwendung im Sinne dieser Vorlesung?

  1. Ein zu Forschungszwecken eingesetzter Supercomputer besteht in Wirklichkeit aus vielen kleinen Computern, auf die sich die Rechenlast verteilt.
  2. Eine in den 1980ern entwickelte Auftragsverwaltung einer kleinen Fabrik legt einmal am Tag eine Datei mit Produktionsaufträgen auf einem Fileserver ab. Dort wird sie dann von einem anderen Programm ausgelesen, das damit die Fertigungsanlagen steuert.
  3. Um die Rechenleistung moderner Prozessoren besser ausnutzen zu können, startet sich ein Programm gleich mehrfach. Die unabhängig voneinander laufenden Instanzen können deshalb nur über Nachrichten miteinander kommunizieren (Interprozesskommunikation).
  4. In einem Rennspiel können mehrere Spieler gegeneinander antreten. Ein Spieler muss jedoch die Leitung übernehmen, was bedeutet, dass sich alle anderen Spieler mit seinem Rechner verbinden müssen.

c) Welches ist kein verteiltes System?

  1. Hunderte von Computern nutzen die inaktive Zeit, während der Bildschirm gesperrt ist, um komplizierte Berechnungen durchzuführen. Dabei werden die Rechner über das Internet koordiniert, so dass eine möglichst optimale Aufgabenverteilung entsteht.
  2. Das Internet, welches aus einer unüberschaubar großen Anzahl lose gekoppelter Einzelsysteme und Netzwerke besteht, die alle über dieselbe Protokollfamilie miteinander kommunizieren.
  3. Cloud Computing: Durch einen Kurzschluss im Netzwerkkabel geht einer deiner Computer in Rauch auf. Vor lauter Nebel kannst du aber nicht sagen welcher.

d) Welches sind die richtigen Definitionen von Vertraulichkeit und Datenintegrität?

  1. Vertraulichkeit bedeutet, dass nur berechtigte Personen auf sensible Daten zugreifen können.
    Datenintegrität bedeutet, dass die Daten nicht unbemerkt verfälscht werden können.
  2. Vertraulichkeit bedeutet, dass die Herkunft fremder Daten zweifelsfrei festgestellt werden kann.
    Datenintegrität bedeutet, dass die Daten nicht verfälscht werden können.
  3. Vertraulichkeit bedeutet, dass die Daten einer Anwendung nicht verfälscht werden können.
    Datenintegrität bedeutet, dass die Herkunft der Daten zweifelsfrei festgestellt werden kann.

Lösung: 2, 3, 3, 1

Ordne die nachfolgenden Begriffe den untenstehenden Definitionen zu.

Fehler maskieren Authentizität Erweiterbarkeit Zugriffstransparenz
Ortstransparenz Horizontale Skalierung CAP-Theorem Fehler vermeiden

a)
Um die Leistung eines verteilten Systems zu steigern, werden einfach weitere Computer hinzugefügt. An den bereits vorhandenen Computern sowie den darauf laufenden Programmen müssen hierfür keine nennenswerten Änderungen vorgenommen werden.

b)
Egal ob man als Anwender oder als Entwickler auf eine Ressource zugreift, es sollte keinen Unterschied machen, ob diese sich auf dem eigenen oder einem anderen Computer befindet. Der Zugriff erfolgt immer auf dieselbe Weise.

c)
Sowohl die Systemarchitektur als auch die Softwarearchitektur sind flexibel genug, um jederzeit weitere Funktionen hinzufügen zu können, ohne gleich alles auseinander nehmen zu müssen. Denn nichts ist so beständig wie der Wandel.

d)
Beim Programmieren darf man auf keinen Fall am falschen Ende sparen. Lieber investiert man etwas mehr Arbeit und bietet dafür zum Beispiel eine komfortable, selbsterklärende Benutzeroberfläche oder achtet darauf, selbst die eher unwahrscheinlichen Ausnahmen sauber zu behandeln als einen Programmabsturz zu riskieren.

e)
Durch asymmetrische Verschlüsselungsverfahren und darauf aufbauende Public-Key/Private-Key-Verfahren kann ein Anwender sicher sein, sich nicht mit einem kompromittierten Server zu verbinden. Idealerweise kann auf dieselbe Weise auch die Identität des Benutzers überprüft werden.

f)
Wie schön wäre eine Welt, in der jede verteilte Anwendung stets mit konsistenten Daten arbeiten könnte, hochverfügbar wäre und selbst der Ausfall einzelner Komponenten keine wirkliche Störung wäre. Doch leider ist das nur ein schöner Traum, der nie wahr werden kann. Eine Anwendung kann immer nur zwei, niemals aber alle drei Kriterien erfüllen.

g)
Heute hier, morgen dort, bin kaum da, muss ich fort. So vergeht Jahr um Jahr, und es ist mir längst klar, dass nichts bleibt wie es war. Dieser Songtext von Hannes Wader beschreibt auch eine wichtige Anforderung an verteilte Anwendungen.

h)
Geht mal was schief ist das oft eigentlich gar nicht so schlimm. Nicht jeder Fehler erfordert gleich die volle Aufmerksamkeit des Anwenders. Oft kann das System die fehlgeschlagene Aktion einfach nochmal versuchen oder sonst wie um das Problem herum arbeiten.


Lösung: Horizontale Skalierung, Zugriffstransparenz, Erweiterbarkeit,
Fehler vermeiden, Authentizität, CAP-Theorem, Ortstransparenz, Fehler maskieren

Middleware

Bildnachweis: Pixabay: rawpixel

Von Clients, Servern und Peers

💿 Server Langlaufendes Programm, das einen Dienst zur Verfügung stellt. Wartet darauf, bis sich ein Client mit ihm verbindet.
💿 Client Kurzlebiges Programm, das den Dienst nutzt. Stellt hierfür eine Verbindung zum Server her.
💿 Peer Spezielles Programm, das sowohl Client als auch Server ist.
🖥 Host Der Rechner, auf dem die Software läuft. Oft sagen die Leute „Server” und meinen damit den „Host”.

Client/Server-Architektur

Skizze mit vielen Clients und einem Server in der Mitte

Peer-To-Peer-Architektur

Skizze mit vielen untereinander verbundenen Peers

Serverless Computing

⛱️ Kunstwort der Cloudanbieter.
⛱️ Besagt lediglich, dass alle Dienste in der Cloud laufen.
⛱️ Aber natürlich gibt es dort weiterhin Server und (virtuelle) Hosts.

Aufgaben einer Middleware

Schematische Skizze einer verteilten Anwendung mit Middleware
🗸 Eine Middleware vereinfacht die Programmierung verteilter Anwendungen.
🗸 Hauptsächlich versteckt sie die Einzelheiten der Netzwerkprogrammierung.
🗸 Manche Middlewarearten bieten jedoch auch weitere nützliche Funktionen.
🗸 Dadurch können wir uns ausschließlich auf das Anwendungsproblem konzentrieren.

Kommunikationsorientiert

🗸 Besteht aus einer einfachen Klassenbibliothek
🗸 Kann daher in jedes Javaprogramm eingebaut werden
🗸 Kümmert sich nur um den Datenaustausch
🗸 Beinhaltet häufig auch Funktionen zum Auffinden der Anwendungskomponenten und zur Lastverteilung

Anwendungsorientiert

🗸 Besteht meistens aus einem ausgewachsenen Applikationsserver
🗸 Bietet alle Funktionen einer kommunikationsorientierten Middleware
🗸 Bietet darüber hinaus aber auch viele Zusatzfunktionen wie eine Benutzerverwaltung oder Datenbankfunktionen
🗸 Beinhaltet bereits ein Rahmenprogramm und eine Laufzeitumgebung für die Klassen mit den Anwendungsfunktionen
🗸 Bietet umfangreiche Schnittstellen zum Aufruf der Klassen durch verschiedene Arten von Clients
🗸 Dient oft auch als Anwendungsserver für Webanwendungen

Wobei uns eine Middleware oft hilft

Nebenläufigkeitstransparenz

Manche Middlewarearten lassen den Client warten, während der Server eine Anfrage bearbeitet. Andere gehen von vornherein davon aus, dass Antworten gar nicht oder nur zeitversetzt kommen.

Leistungs- / Skalierbarkeitstransparenz

Oft hat die Middleware bereits Funktionen zur Lastverteilung eingebaut. Meistens reicht es dann, einfach eine weitere Serverinstanz zu starten, um die Leistung zu erhöhen.

Zugriffstransparenz

Bestimmte Middlewares erlauben den Aufruf von Methoden entfernter Objekte, genau so als wären es lokale Objekte innerhalb des eigenen Javaprogramms.

Orts- / Mobiltitätstransparenz

Die meisten Middlewares haben einen Namensdienst zum Nachschlagen entfernter Ressourcen eingebaut. Die Zugriffspfade müssen somit nicht hartcodiert werden.

Wo eine Middleware meistens nicht hilft

Replikationstransparenz

Die Replikation der Daten wird oft außerhalb der Anwendung zum Beispiel auf Datenbankebene gelöst. Nur wenige Middlewares bieten deshalb Funktionen hierfür.

Fehlertransparenz

Eine Middleware vereinfacht zwar die Programmierung, es können aber immer noch dieselben technischen Fehler auftreten, um die wir uns kümmern müssen.

Netzwerkprogrammierung im Laufe der Zeit

Host-To-Host

🔌 Direkte Kabelverbindung zwischen zwei Rechnern
🔌 Keine Unterstützung durch das Betriebssystem
Zwei VS-Knoten mit direkter Kabelverbindung

Packet Switching

📦 NCP und später TCP als Vorläufer von TCP/IP
📦 Weltweiter Datenaustausch zwischen allen Hosts
📦 Anschluss des Computers hierfür an einen IMP
Zwei VS-Knoten mit Socketverbindung

Sockets und Middleware

📃 Erste Middlewares bereits in den 1970ern
📃 RPC anstelle direkter Socketprogrammierung
📃 Moderne TCP/IP-Sockets ab 1983 in BSD Unix
Zwei VS-Knoten mit Middleware

Applikationsserver

🚢 Applikationsserver ab den 1990ern
🚢 Zunächst weiterhin RPC-basiert
🚢 Später auch für Webanwendungen
Drei VS-Knoten von denen einer ein Applikationsserver ist

Heutzutage übliche Middlewarearten

Applikationsserver

🎙️ Beinhalten sehr viele Grundfunktionen
🎙️ Bieten verschiedene Schnittstellen nach außen
🎙️ Beinhalten oft auch einen Webserver

Entfernte Methodenaufrufe

🎙️ Direkter Aufruf von Objektmethoden des Servers
🎙️ Programmiersprachen müssen nicht identisch sein
🎙️ Jedoch kennt nicht jede Middleware alle Sprachen

Webservices

🎙️ Selbe Idee wie bei entfernten Aufrufen
🎙️ Jedoch auf Basis offener Webstandards
🎙️ SOAP und REST als relevante Standards

Message Broker

🎙️ Asynchrone Kommuniktion ohne Wartezeiten
🎙️ Nachrichten werden in FIFO-Queues gesammelt
🎙️ Beliebig viele Empfänger für eine Nachricht

Aufgabe 2: Ein kleines Middleware-Quiz

Aufgabe 2.1: Grundlegende Definitionen

a) Welche der folgenden Definitionen beschreibt einen Server?

  1. Ein Programm, das einen Dienst anbietet und sich hierfür mit anderen, gleichartigen Programmen verbindet.
  2. Ein Programm, das einen Dienst anbietet und hierfür wartet, bis sich ein Nutzer mit ihm verbindet.
  3. Ein Programm, das temporär gestartet wird, um einen Dienst zu nutzen.

b) Welche der folgenden Eigenschaften treffen nicht auf kommunikationsorienterte Middlewares zu?

  1. Vereinfacht die Programmierung verteilter Anwendungen.
  2. Steuert die Kommunikation innerhalb einer verteilten Anwendung.
  3. Bietet oft eine Benutzer- und Rechteverwaltung.
  4. Bietet oftmals einen Namensdienst zum Auffinden entfernter Ressourcen.
  5. Setzt direkt auf den Socketfunktionen des Betriebssystems auf.
  6. Beinhaltet eine Laufzeitumgebung für die Klassen einer Anwendung.

c) Eine Middleware beinhaltet einen Namensdienst zum Auffinden fremder Ressourcen. Welche Transparenzarten werden dadurch realisiert?

  1. Ortstransparenz
  2. Nebenläufigkeitstransparenz
  3. Mobilitätstransparenz
  4. Fehlertransparenz
  5. Skalierungstransparenz

Aufgabe 2.2: Middlewarearten

a) Welche der folgenden Middlewarearten wurde bereits in den 1970ern erfunden?

  1. Webservices
  2. Applikationsserver
  3. Message Broker
  4. Entfernte Prozedur-/Methodenaufrufe

b) Welche Middlewareart erlaubt eine durch Queues entkoppelte, asynchrone Kommunikation?

  1. Entfernte Prozedur-/Methodenaufrufe
  2. Webservices
  3. Message Broker
  4. Applikationsserver

c) Welche Aussage beschreibt am besten die Grundidee hinter Webservices?

  1. Im Gegensatz zu RPC sollen auch Features wie die Vererbung von Objekten unterstützt werden.
  2. Die Programmierung großer Informationssysteme mit vielen Benutzern soll vereinfacht werden.
  3. Im Prinzip sind Webservices dasselbe wie RPC nur auf Basis offener Webstandards.
  4. Kein Kommunikationsteilnehmer soll gezwungen werden, auf die anderen zu warten.

d) Welches ist keine Grundfunktion eines typischen Applikationsservers?

  1. Vereinheitlichung der Programmierung von Clients für mobile Betriebssysteme
  2. Datenbankfunktionen zum Zugriff auf relationale Datenbanken
  3. Funktionen zur serverseitigen Webentwicklung
  4. Möglichst viele Schnittstellen für unterschiedliche Clients

Lösung: Aufgabe 2.1: 2, 3+6, 1+3; Aufgabe 2.2: 4, 3, 3, 1

Architekturmuster

Bildnachweis: Pixabay: rawpixel

Einfache Client/Server-Anwendungen

Beschreibung

Dies ist die einfachste Architektur von allen. Sie besteht lediglich aus einem Server, der einen Dienst anbietet und den Clients, welche den Dienst aufrufen. Meistens kommt dabei ein synchrones, den Client blockierendes Request/Reply-Verfahren zum Einsatz, weil besonders einfach zu programmieren ist. Ohne Middleware mit direkter Socketprogrammierung kann aber jeder beliebige Kommunikationsstrategie umgesetzt werden.

Skizze eines Servers und dreier Clients

Fallbeispiele

✔️ Browser und Webserver im World Wide Web
✔️ Browser App mit Zugriff auf den Server via Websockets
✔️ Wartungszugang auf einen Rechner per Secure Shell
✔️ Zugriff auf ein E-Mailpostfach mit IMAP
✔️ Zentrale Quellcodeverwaltung mit einem Git-Server
✔️ WebDAV-Zugriff auf einen geteilten Onlineordner

Vorgeschalteter Proxyserver

Beschreibung

Ein clientseitiger Proxy bildet die Schnittstelle eines entfernten Servers innerhalb des lokalen Netzwerks ab. Die Anfragen der Clients werden nicht direkt an den Server sondern an den lokalen Proxy gesendet, der daraufhin entscheiden kann, ob er die Anfragen weiterleitet oder selbst beantwortet.

Architekturskizze mit clientseitigem Proxy

Anwendungsbeispiele

✔️ Steigerung der Performance durch Cachen häufig angefragter Daten
✔️ Implementierung von Zugangsbeschränkungen und Content Filtern
✔️ Clientseitige Lastverteilung durch Weiterleitung an unterschiedliche Server

Beschreibung

Serverseitig kann ebenfalls ein Proxy eingesetzt werden, um die eingehenden Anfragen zu bündeln. Dadurch wird es möglich, zusätzliche Sicherheitsprüfungen zu implementieren, häufig angefragte Inhalte zu cachen oder eine transparente Lastverteilung vorzunehmen.

Architekturskizze mit serverseitigem Proxy

Anwendungsbeispiele

✔️ Steigerung der Performance durch Cachen häufig angefragter Daten
✔️ Implementierung von Zugangsbeschränkungen und Upload Filtern
✔️ Realisierung von Paywalls zum Ausfiltern kostenpflichtiger Inhalte
✔️ Sicherstellen einer vorgelagerten, zentralen Authentifizierung
✔️ Serverseitige Lastverteilung durch Weiterleitung an unterschiedliche Server

Schichtenarchitektur mit Datenhaltung

Beschreibung

Hierbei handelt es sich ebenfalls um eine Client-/Server-Architektur, jedoch greift der Server im auf eine Datenbank zu. Client, Server und Datenbank werden daher den drei Schichten Darstellung, Anwendungslogik und Datenhaltung zugeordnet. Für die Darstellung wurden früher ausschließlich native Clients verwendet, die heute zunehmend von Weboberflächen verdrängt werden. Die Schichten für die Anwendungslogik und Datenhaltung können durchaus auch mehrere Server umfassen.

Skizze einer 3-Schichtenarchitektur

Fallbeispiele

✔️ Jede Webanwendung mit einer Datenbank im Hintergrund
✔️ Einfache Informationssysteme ohne eigenständigen Präsentationsserver
✔️ Die meisten ERP- und CRM-Systeme (unter anderem SAP und Navision)
✔️ Per Webservice erreichbare Microservices

Beschreibung

Hierbei handelt es sich um eine Variation der 3-Schichtenarchitektur, bei der die mittlere Sicht in eine Präsentations- und eine Anwendungsschicht aufgeteilt wurde. Dieses Modell findet man häufig bei ERP-Systemen, die nachträglich um weiter Clienttechnologien erweitert wurden.

Skizze einer 3-Schichtenarchitektur

Fallbeispiele

✔️ ERP- und CRM-Systeme mit einem eigenständigen Präsentationsserver
✔️ Java-Webanwendung mit getrenntem Deployment von Servlets und EJBs

Getrennt entwickelte Microservices

Beschreibung

Microservices zerlegen eine große, monolithische Anwendung in viele kleine Teilanwendungen. Jeder Microservice hat ein klar umrissenes Aufgabengebiet, besitzt eine gut dokumentierte und versionierte Schnittstelle und wird von einem eigenen Team entwickelt und betrieben. Entwicklung, Test und Betrieb sind sehr stark automatisiert. Microservices eignen sich daher nur für große Firmen mit kleinen, unabhängigen Entwicklungsmannschaften.

Skizze einer Microservicearchitektur

Fallbeispiele

✔️ Amazon gilt allgemein als Vorreiter, obwohl sie den Begriff selbst nicht verwenden
✔️ Große Internetplattformen wie eBay, Netflix, SoundCloud, Spotify, …

Aufgabe 3: Ein kleines Architekturmuster-Quiz

Aufgabe 3.1: Proxyserver

a) Welche der folgenden Definition entspricht der eines Proxyservers?

  1. Ein Proxyserver verbindet sich mit vielen anderen Proxyservern zu einem virtuellen Gesamtsystem.
  2. Ein Proxyserver dient der Zusammenführung mehrerer Microservices in einer Weboberfläche.
  3. Ein Proxyserver kopiert die Schnittstelle eines anderen Servers, und vertritt diesen gegenüber seiner Clients.

b) Welche der folgenden Aufgaben gehören nicht zu denen eines Proxyservers?

  1. Chachen häufig angefragter Inhalte
  2. Vereinheitlichung unterschiedlicher Serverprotokolle
  3. Content Filter, Upload Filter, Paywalls
  4. Lastverteilung über mehrere Serverinstanzen
  5. Sicherstellen einer zentralen Authentifizierung

Aufgabe 3.2: 3-Schichtenarchitektur

a) Welche der folgenden Schichten gehören zur 3-Schichtenarchitektur?

  1. Datenhaltungsschicht
  2. Präsentationsschicht
  3. Darstellungsschicht
  4. Clientschicht
  5. Spätschicht
  6. Anwendungsschicht

b) Welche der folgenden Schichten gehören zur 4-Schichtenarchitektur?

  1. Mittelschicht
  2. Anwendungsschicht
  3. Präsentationsschicht
  4. Peer-To-Peer-Schicht
  5. Darstellungsschicht
  6. Datenhaltungsschicht

Aufgabe 3.3: Microservices

a) Jeder Microservice entspricht einer 3-Schichtenarchitektur?

  1. Wahr
  2. Falsch

b) Microservices lohnen sich in der Regel eher für …

  1. Große Anwendungen in großen Unternehmen mit vielen Entwicklern
  2. Große Anwendungen in kleinen Unternehmen mit wenigen Entwicklern
  3. Kleine Anwendungen in großen Unternehmen mit wenigen Entwicklern

c) Welche der folgenden Techniken können die Schnittstelle eines Microservices bilden?

  1. Entfernte Prozedur-/Methodenaufrufe
  2. Webservices
  3. Weboberflächen im Browser
  4. Message Broker
  5. Mobile Apps

d) Die Microservices einer großen Anwendung besitzen alle dieselbe Versionsnummer?

  1. Wahr
  2. Falsch

Lösung: Aufgabe 3.1: 3, 2; Aufgabe 3.2: 1 + 3 + 6, 2 + 3 + 5 + 6; Aufgabe 3.3: 2, 1, 1 + 2 + 4, 2

Rechtshinweise

Creative Commons Namensnennung 4.0 International

§