Veröffentlichungsdatum: 1. Februar 2021
Ein verteiltes System ist eine Datenverarbeitungsumgebung, in der sich zahlreiche Komponenten auf mehrere Computer (oder andere Computing-Geräte) in einem Netzwerk verteilen. Diese Geräte teilen die Arbeit auf, indem sie ihre Kapazitäten koordinieren, um Aufgaben effizienter zu erledigen als ein einzelnes Gerät.
Verteilte Systeme sind eine wichtige Errungenschaft der IT- und Computerwissenschaft, da immer mehr miteinander verbundene Aufgaben so umfangreich und komplex sind, dass es für einen einzelnen Computer unmöglich wäre, sie alleine zu bewältigen. Distributed Computing bietet jedoch auch noch weitere Vorteile gegenüber herkömmlichen Computerumgebungen. Verteilte Systeme mindern die Risiken, die eine einzelne Fehlerquelle mit sich bringt, und optimieren sowohl die Zuverlässigkeit als auch die Fehlertoleranz. Moderne verteilte Systeme sind in der Regel so konzipiert, dass sie nahezu in Echtzeit skalierbar sind. Außerdem können Sie im laufenden Betrieb zusätzliche Computing-Ressourcen aufrufen und so die Leistung steigern und die Durchführungsdauer weiter reduzieren.
Früher war verteiltes Computing kostenintensiv, komplex in der Konfiguration und schwer zu verwalten. Dank der Software-as-a-Service-Plattformen (Saas), die erweiterte Funktionen bieten, ist verteiltes Computing heutzutage weniger aufwändig und für große und kleine Unternehmen erschwinglich. Folglich wird Distributed Computing für alle Arten von Computing-Aufgaben eingesetzt, vom Datenbankmanagement bis hin zu Videospielen. Tatsächlich wären viele Arten von Software, wie z.B. Kryptowährungssysteme, wissenschaftliche Simulationen, Blockchain-Technologien und KI-Plattformen ohne diese SaaS-Plattformen überhaupt nicht denkbar.
In diesem Artikel beschäftigen wir uns mit dem Betrieb dieser Systeme, den Herausforderungen und Risiken der Plattformen und den unzähligen Vorteilen, die Distributed Computing bietet.
Wie funktioniert ein verteiltes System?
Verteilte Systeme haben sich im Laufe der Zeit weiterentwickelt, aber die heute gebräuchlichsten Implementierungen sind größtenteils für den Betrieb im Internet und speziell in der Cloud vorgesehen. Ein verteiltes System beginnt mit einer Aufgabe, wie z. B. dem Rendern eines Videos, um ein Produkt herzustellen, das veröffentlicht werden kann. Die Webanwendung oder die verteilten Anwendungen, denen diese Aufgabe zufällt – wie z.B. ein Video-Editor auf einem Client-Computer – teilt die Aufgabe auf. In diesem einfachen Beispiel weist der Algorithmus jeden Frame des Videos einem der dutzend verschiedenen Computer (oder Knoten) zu, um den Vorgang abzuschließen. Sobald der Frame fertig ist, weist die Anwendung dem Knoten einen neuen Frame zum Bearbeiten zu. Dieser Vorgang wird so lange fortgesetzt, bis das Video fertig ist und alle Einzelteile wieder zusammengefügt sind. Ein System wie dieses muss sich nicht mit nur 12 Knoten begnügen. Die Aufgabe kann auf Hunderte oder sogar Tausende von Knoten verteilt werden, sodass eine Aufgabe, für die ein einzelner Computer unter Umständen Tage brauchen würde, innerhalb weniger Minuten fertiggestellt werden kann.
Heutzutage sind viele Modelle und Architekturen von verteilten Systemen im Einsatz. An einem Client-Server-System, dem seit langem bekanntesten und einfachsten verteilten System, sind zahlreiche vernetzte Computer beteiligt, die mit einem zentralen Server zur Datenspeicherung, Verarbeitung oder anderen gebräuchlichen Anwendungsmöglichkeiten interagieren. Mobilfunknetze sind fortschrittliche verteilte Systeme, bei denen sich die Arbeitslast auf Handgeräte, Umschaltsysteme und internetbasierte Geräte aufteilt. Peer-to-Peer-Netzwerke, in denen sich die Arbeitslast auf Hunderte oder Tausende von Computern mit derselben Software verteilt, sind ein weiteres Beispiel der verteilten Systemarchitektur. Die heute in Unternehmen am weitesten verbreiteten verteilten Systeme sind diejenigen, die über das Internet betrieben werden, indem Workloads auf Dutzende von cloud-basierten virtuellen Serverinstanzen verteilt werden, die nach Bedarf erstellt und nach Erledigung der Arbeit wieder beendet werden.
Was sind die Haupteigenschaften von verteilten Systemen?
Verteilte Systeme werden in der Regel durch die folgenden Haupteigenschaften und -features definiert:
- Skalierbarkeit: Die Fähigkeit, mit zunehmendem Workload zu wachsen, ist ein essenzielles Feature verteilter Systeme, das erreicht wird, indem dem Netzwerk nach Bedarf zusätzliche Verarbeitungseinheiten oder -knoten hinzugefügt werden.
- Gleichzeitigkeit: Die Komponenten verteilter Systeme werden gleichzeitig ausgeführt. Ferner zeichnen sie sich dadurch aus, dass sie keine "globale Uhr" haben, wenn Aufgaben außer der Reihe und mit unterschiedlichen Geschwindigkeiten anfallen.
- Verfügbarkeit/Fehlertoleranz: Wenn ein Knoten ausfällt, können die übrigen Knoten weiter betrieben werden, ohne dass der Prozess insgesamt unterbrochen wird.
- Transparenz: Ein externer Programmierer oder Endbenutzer sieht in einem verteilten System eine einzige Computing-Einheit und nicht die ihr zugrunde liegenden Komponenten, sodass die Benutzer mit einem einzigen logischen Gerät interagieren und sich keine Gedanken über die Architektur des Systems machen müssen.
- Heterogenität: In den meisten verteilten Systemen sind die Knoten und Komponenten oftmals asynchron und verfügen über unterschiedliche Hardware, Middleware und Software sowie unterschiedliche Betriebssysteme. Dadurch können verteilte Systeme durch das Hinzufügen neuer Komponenten erweitert werden.
- Replikation: Verteilte Systeme sind in der Lage, Informationen und Nachrichten gemeinsam zu nutzen, während die Konsistenz zwischen redundanten Ressourcen, wie z. B. Software- und Hardwarekomponenten sichergestellt ist, sodass sie fehlertoleranter, zuverlässiger und zugänglicher werden.
Was ist Distributed Tracing?
Distributed Tracing, das zuweilen auch als Distributed Request Tracing bezeichnet wird, ist eine Methode für das Monitoring von Anwendungen – insbesondere von denjenigen, die auf einer Microservice-Architektur basieren –, die häufig auf verteilten Systemen bereitgestellt werden. Distributed Tracing ist insofern eine Art Distributed Computing, als dass es häufig zur Überwachung des Betriebs von Anwendungen eingesetzt wird, die auf verteilten Systemen ausgeführt werden.
In der Softwareentwicklung und -ausführung wird Tracing eingesetzt, um den Weg einer Transaktion durch eine Anwendung hindurch zu verfolgen, wie z. B. den Weg einer Online-Kreditkartentransaktion vom ursprünglichen Kauf eines Kunden über den Verifizierungs- und Genehmigungsprozess bis hin zum Abschluss der Transaktion. Ein Tracing-System überwacht diesen Prozess Schritt für Schritt und hilft so dem Entwickler, Fehler, Engpässe, Latenzen oder andere Probleme der Anwendung aufzudecken.
Distributed Tracing ist aufgrund der erheblichen Komplexität moderner Softwarearchitekturen unerlässlich. Distributed Tracing-Systeme sind so konzipiert, dass sie auf einer Infrastruktur mit verteilten Services betrieben werden, wo sie in zahlreichen gleichzeitig genutzten Knoten und Computing-Umgebungen mehrere Anwendungen und Prozesse gleichzeitig nachverfolgen können. Ohne verteiltes Tracing könnte eine auf einer Microservice-Architektur basierende Anwendung, die auf einem System ausgeführt wird, das so groß und komplex ist wie eine global verteilte Systemumgebung, nicht effektiv überwacht werden.
Welche Muster gibt es in einem verteilten System?
Ein Softwareentwurfsmuster ist eine Programmiersprache, die als ideale Lösung für ein kontextualisiertes Programmierproblem definiert ist. Muster sind wiederverwendbare Lösungen für häufig auftretende Probleme, die sich als Best Practices zu dem jeweiligen Zeitpunkt bewährt haben. Sie stellen zwar keinen fertigen Code bereit, aber sie bieten Replikationsfunktionen und Anleitungen zur Lösung bestimmter Probleme oder zur Implementierung benötigter Features.
Bei den Überlegungen zu den Herausforderungen verteilter Computing-Plattformen sollten diese in eine Reihe von miteinander verbundenen Mustern aufgeschlüsselt werden. Indem das System in kleinere, besser zu verwaltende und leichter zu verstehende Komponenten aufgeteilt wird, lässt sich eine komplizierte Architektur besser abstrahieren. Muster werden in der Regel zur Beschreibung verteilter Systeme eingesetzt, wie z. B. CQRS (Command and Query Responsibility Segregation, Trennung von Befehls- und Abfrageaufgaben) und 2PC (Two-Phase Commit, Zwei-Phasen-Zustimmung). Zur Entwicklung verteilter Systeme werden unterschiedliche Musterkombinationen verwendet, und jeder Ansatz hat seine eigenen Vor- und Nachteile.
Welche Vorteile bieten verteilte Systeme?
Verteilte Systeme bieten gegenüber monolithischen oder einzelnen Systemen zahlreiche Vorteile, wie z. B.:
- Mehr Flexibilität: Bei zunehmendem Bedarf an Services lässt sich die Rechenleistung leichter aufstocken. In den meisten Fällen können Sie einem verteilten System heutzutage spontan Server hinzufügen.
- Zuverlässigkeit: Ein gut konzipiertes verteiltes System kann Fehlern in einem oder mehreren seiner Knoten standhalten, ohne dass seine Leistung nachhaltig beeinträchtigt wird. In einem monolithischen System stürzt die komplette Anwendung ab, wenn der Server ausfällt.
- Höhere Geschwindigkeit: Starker Datenverkehr kann einzelne Server in die Knie zwingen, sodass die Leistung für alle beeinträchtigt wird. Die Skalierbarkeit verteilter Datenbanken und anderer verteilter Systeme führt dazu, dass sie leichter zu verwalten sind und zudem ein hohes Leistungsniveau beibehalten.
- Geografische Verteilung: Distributed-Content-Delivery ist für jeden Internetbenutzer eine Selbstverständlichkeit und für weltweit agierende Unternehmen unerlässlich.
Welche Herausforderungen bringen verteilte Systeme mit sich?
Verteilte Systeme sind erheblich komplexer als monolithische Computing-Umgebungen und ziehen eine Reihe von Problemen in puncto Design, Betrieb und Wartung nach sich. Hierzu zählen:
- Mehr Fehlerquellen: Je mehr Systeme einer Computing-Umgebung hinzugefügt werden, umso mehr Fehlerquellen gibt es. Ist ein System nicht sorgfältig konzipiert und ein Knoten fällt aus, kann das komplette System abstürzen. Auch wenn verteilte Systeme so konzipiert sind, dass sie grundsätzlich fehlertolerant sind, ist diese Fehlertoleranz weder automatisch vorhanden noch leicht zu erzielen.
- Herausforderungen des Synchronisierungsprozesses: Verteilte Systeme funktionieren ohne globale Uhr und müssen sorgfältig programmiert werden, damit sichergestellt ist, dass Prozesse ordnungsgemäß synchronisiert werden, sodass Verzögerungen in der Übertragung, die zu Fehlern und Datenkorruption führen, vermieden werden. In einem komplexen System – wie z. B. einem Videospiel mit mehreren Spielern – kann die Synchronisation zur Herausforderung werden, besonders in einem öffentlichen Netzwerk mit Datenverkehr.
- Unvollkommene Skalierbarkeit: Die Verdopplung der Anzahl an Knoten in einem verteilten System führt nicht automatisch zur doppelten Leistung. Die Erstellung eines effektiven verteilten Systems mit maximaler Skalierbarkeit ist ein komplexes Unterfangen, bei dem der Lastenausgleich, die Verwaltung der Bandbreite und andere Probleme zu berücksichtigen sind.
- Komplexere Sicherheit: Die Verwaltung einer großen Zahl von Knoten in einer heterogenen oder global verteilten Umgebung schafft zahlreiche Sicherheitsherausforderungen. Ein einzelner schwacher Link in einem Dateisystem oder größeren Netzwerk verteilter Systeme kann dazu führen, dass das gesamte System Angriffen ausgesetzt ist.
- Gesteigerte Komplexität: Verteilte Systeme sind komplexer und schwerer zu konzipieren, zu verwalten und zu verstehen als herkömmliche Computing-Umgebungen.
Was sind die Risiken verteilter Systeme?
Die oben beschriebenen Herausforderungen verteilter Systeme führen zu einer Reihe korrelierender Risiken. Hierzu zählen folgende Aspekte:
- Sicherheit: Verteilte Systeme sind genauso anfällig für Angriffe wie jedes andere System. Allerdings bieten sie aufgrund ihrer verteilten Struktur eine weitaus größere Angriffsfläche, die eine Bedrohung für Unternehmen darstellt.
- Risiko durch Netzwerkfehler: Verteilte Systeme sind auf öffentliche Netzwerke angewiesen, um Daten übertragen und empfangen zu können. Wenn ein Bereich des Internets nicht verfügbar oder überlastet ist, kann die Leistung verteilter Systeme nachlassen.
- Steuerungs- und Kontrollprobleme: Verteilten Systemen fehlt die Steuerungsfähigkeit monolithischer, auf einem einzelnen Server basierender Systeme, was zu Problemen mit der Überprüfung und Einhaltung globaler Datenschutzgesetze wie z. B. der DSG-VO führen kann. Global verteilte Umgebungen können dem Erreichen bestimmter Sicherheitsstufen im Wege stehen. Außerdem lässt sich schwerer erkennen, wo Daten gespeichert sind.
- Kostenkontrolle: Anders als bei zentralisierten Systemen ermöglicht es die Skalierbarkeit verteilter Systeme den Administratoren, nach Bedarf zusätzliche Kapazitäten bereitzustellen, durch die auch die Kosten steigen. Die Preise cloud-basierter verteilter Computing-Systeme basieren auf der Nutzung (wie z. B. der Anzahl der im Laufe der Zeit verbrauchten Speicherressourcen und CPU-Leistung). Wenn der Bedarf plötzlich in die Höhe schnellt, sehen Unternehmen sich unter Umständen mit enormen Rechnungen konfrontiert.
Wie wird die Zugriffssteuerung in verteilten Systemen geregelt?
Administratoren verwenden verschiedene Ansätze zur Verwaltung der Zugriffssteuerung bei verteilten Computing-Umgebungen, von herkömmlichen ACLs (Access Control Lists, Zugriffssteuerungslisten) bis hin zur RAC (Role-Based Access Control, rollenbasierte Zugriffssteuerung), bei der der Zugriff auf Objekte und Prozesse mithilfe von Regeln gesteuert wird, die Informationen über den Benutzer, die angeforderte Aktion und die Umgebung der betreffenden Anforderung beinhalten. Administratoren können diese Rollentypen außerdem verfeinern, um den Zugriff zu bestimmten Tageszeiten oder an bestimmten Orten zu beschränken.
Wie werden verteilte Systeme verwendet?
Verteilte Systeme werden verwendet, wenn ein Workload zu groß ist, sodass ein einzelnes Gerät ihn nicht bewältigen kann. Ferner sind sie hilfreich, wenn der Workload Änderungen unterliegt, wie z. B. beim E-Commerce-Datenverkehr am Cyber-Montag. Heutzutage basiert so gut wie jede mit dem Internet verbundene Webanwendung auf irgendeiner verteilten Systemform.
Hier einige der häufigsten Beispiele für verteilte Systeme:
- Telekommunikationsnetze (wie z. B. Mobilfunknetze und die Struktur des Internets)
- Grafiksysteme und Systeme zum Rendern von Videos
- Wissenschaftliche Berechnungen, wie z. B. zur Proteinfaltung und Genforschung
- Flug- und Hotelreservierungssysteme
- Videokonferenzsysteme
- Systeme zur Verarbeitung von Kryptowährungen (z. B. Bitcoin)
- Peer-to-Peer-File-Sharing-Systeme (z. B. BitTorrent)
- Verteilte Community-Computing-Systeme (z. B. Folding@Home)
- Multiplayer-Videospiele
- Weltweit agierende Händler und Supply Chain Management (z. B. Amazon)
Welche unterschiedlichen Arten von verteilten Bereitstellungen gibt es?
Verteilte Bereitstellungen reichen von kleinen Bereitstellungen für einzelne Abteilungen auf LANs bis hin zu riesigen weltweiten Bereitstellungen. Neben der Größe und der Komplexität insgesamt können Organisationen sich aufgrund der Größe und Kapazität ihres Computernetzwerks, der Datenmenge, um die es geht, der Häufigkeit ihrer Prozesse, ob sie geplant ausgeführt werden sollen oder ad hoc, der Anzahl der Benutzer, die auf das System zugreifen, der Kapazität ihres Rechenzentrums, der erforderlichen Datenintegrität und ihrer Verfügbarkeitsanforderungen für die für sie geeignete Bereitstellung entscheiden.
Auf der Grundlage dieser Überlegungen werden verteilte Bereitstellungen als Bereitstellungen für Abteilungen, kleine Unternehmen, mittelständische Unternehmen oder große Unternehmen kategorisiert. Auch wenn es keine offiziellen Taxonomien gibt, durch die sich abgrenzen lässt, was ein mittelständisches Unternehmen von einem großen Unternehmen trennt, so stellen diese Kategorien einen Ausgangspunkt für die Planung der benötigten Ressourcen für ein Distributed Computing-System dar. Verteilte Systeme lassen sich im Laufe der Zeit weiterentwickeln, wenn sie mit zunehmender Erweiterung des Unternehmens den Sprung auf das nächste Level schaffen.
Warum brauchen wir heutzutage verteilte Systeme?
Modernes Computing wäre ohne verteilte Systeme nicht möglich. Sie sind unverzichtbar für die Prozesse kabelloser Netzwerke, für Cloud-Computing-Dienste und für das Internet. Wenn es keine verteilten Systeme gäbe, würden auch diese Technologien nicht existieren.
Aber brauchen wir auch verteilte Systeme für unternehmensinterne Aufgaben, die nicht die Komplexität eines kompletten Telekommunikationsnetzwerks haben? In den meisten Fällen lautet die Antwort: ja. Verteilte Systeme bieten eine Skalierbarkeit und bessere Leistung, an die monolithische Systeme nicht heranreichen. Und da sie sich die Funktionen anderer Datenverarbeitungsgeräte und Prozesse zunutze machen, bieten verteilte Systeme Funktionen, die auf einem einzelnen System nicht oder nur schwer entwickelt werden könnten.
Dazu gehören Dinge wie z. B. eine externe Server- und Anwendungssicherung. Wenn der Master-Katalog die Segmente, die für eine Wiederherstellung benötigt werden, nicht sieht, kann er die anderen externen Knoten bitten, ihm die Segmente zu schicken. So gut wie alles, was Sie jetzt mit einem Computing-Gerät tun, profitiert von verteilten Systemen, ganz gleich, ob es darum geht, eine E-Mail zu versenden, ein Spiel zu spielen oder diesen Artikel im Internet zu lesen.
Verteilte Systeme sind so aufgestellt, dass sie die Computing-Umgebung in absehbarer Zukunft dominieren werden, und nahezu alle Arten von Anwendungen oder Diensten werden sich Distributed Computing in der ein oder anderen Form zunutze machen. Der Bedarf an Computing, das immer und überall verfügbar ist, verstärkt diesen Trend, und das ganz besonders, da die Benutzer zur Erledigung ihrer tagtäglichen Aufgaben mehr und mehr mobile Geräte nutzen. Verteilte Systeme werden ihre Bedeutung im globalen Computing in Zukunft ganz sicher weiter festigen, da die Entwickler in Unternehmen immer mehr auf verteilte Tools setzen, um die Entwicklung zu rationalisieren, Systeme und Infrastrukturen bereitzustellen, Vorgänge zu vereinfachen und Anwendungen zu verwalten.
Die 5 grundlegenden DevOps-Praktiken
Was unterscheidet erfolgreiche DevOps-Teams von denen, die scheitern? Ganz einfach: Diese 5 grundlegenden Praktiken.