Build Predictive Machine Learning with Flink | Workshop on Dec 18 | Register Now

Was ist ein verteiltes System?

Verteilte Systeme sind eine Sammlung unabhängiger Komponenten und Maschinen, die sich auf verschiedenen Systemen befinden und miteinander kommunizieren, um als eine Einheit zu funktionieren.

In dieser umfassenden Einführung zeigen wir, wie verteilte Systeme funktionieren, Beispiele aus der Praxis, grundlegende Architekturen, die Vor- und Nachteile sowie gängige Lösungen für verteiltes Streaming in Echtzeit.

Confluent ist ein umfassende Daten-Streaming-Plattform für Echtzeit-Datenintegration, Verarbeitung und Analysen, die von den ursprünglichen Entwicklern von Apache Kafka ins Leben gerufen wurde. Confluent kann heute mehr als 120 Datenquellen miteinander verbinden.

So funktionieren verteilte Systeme

Verteiltes System – Definition

Ein verteiltes System, auch bekannt als verteiltes Computing und verteilte Datenbanken, ist eine Reihe unabhängiger Komponenten, die sich auf verschiedenen Rechnern befinden und Messages miteinander austauschen, um gemeinsame Aufgaben zu erfüllen.

Auf diese Weise erscheint das verteilte System dem Endbenutzer wie eine einzige Schnittstelle oder ein einziger Computer. Das Ziel ist, dass das Gesamtsystem Ressourcen und Informationen maximieren und gleichzeitig Ausfälle verhindern kann. Wenn ein System ausfällt, hat dies keine Auswirkungen auf die allgemeine Verfügbarkeit des Services.

Heutzutage sind die Daten stärker verteilt als je zuvor, und moderne Anwendungen laufen nicht länger in Isolation. Die große Mehrheit der Produkte und Anwendungen basiert auf verteilten Systemen.

Elemente eines verteilten Systems

Die wichtigsten Funktionen des verteilten Computings sind:

  • Ressource Sharing - ob für Hardware, Software oder Daten, die gemeinsam genutzt werden können
  • Offenheit - wie offen ist die Software für die Entwicklung und den Austausch untereinander
  • Gleichzeitigkeit - mehrere Rechner können dieselbe Funktion zur gleichen Zeit verarbeiten
  • Skalierbarkeit - wie vervielfachen sich die Rechen- und Verarbeitungsfähigkeiten, wenn sie auf viele Rechner ausgedehnt werden
  • Fehlertoleranz - wie einfach und schnell können Ausfälle in Teilbereichen des Systems erkannt und behoben werden
  • Transparenz - wie viel Zugriff hat ein Knoten, um andere Knoten im System zu lokalisieren und mit ihnen zu kommunizieren.

Moderne verteilte Systeme haben sich zu autonomen Prozessen entwickelt, die zwar auf demselben physischen Rechner laufen, aber durch den Austausch von Nachrichten miteinander interagieren.

Beispiele für verteilte Systeme

Netzwerke

Das früheste Beispiel für ein verteiltes System entstand in den 1970er Jahren, als das Ethernet erfunden und LAN (Local Area Networks) eingerichtet wurden. Zum ersten Mal waren Computer in der Lage, Nachrichten an andere Systeme mit einer lokalen IP-Adresse zu senden. Peer-to-Peer-Netzwerke entwickelten sich, und E-Mail und dann das Internet, wie wir es kennen, sind nach wie vor das größte, ständig wachsende Beispiel für verteilte Systeme. Im Zuge der Umstellung des Internets von IPv4 auf IPv6 haben sich die verteilten Systeme von „LAN“-basierten zu „Internet“-basierten Systemen entwickelt.

Telekommunikationsnetze

Telefon- und Mobilfunknetze sind ebenfalls Beispiele für verteilte Netzwerke. Telefonnetzwerke gibt es schon seit über einem Jahrhundert und waren ein frühes Beispiel für ein Peer-to-Peer-Netzwerk. Zellulare Netzwerke sind verteilte Netzwerke mit Basisstationen, die physisch in Bereichen verteilt sind, die Zellen genannt werden. Mit der Weiterentwicklung der Telefonnetzwerke zu VOIP (Voice over IP) nimmt die Komplexität des verteilten Netzwerks weiter zu.

Verteilte Echtzeitsysteme

Viele Branchen verwenden Echtzeitsysteme, die lokal und global verteilt sind. Fluggesellschaften verwenden Flugkontrollsysteme, Uber und Lyft verwenden Abfertigungssysteme, Fertigungsanlagen verwenden Automatisierungskontrollsysteme, Logistik- und E-Commerce-Unternehmen verwenden Echtzeit-Tracking-Systeme.

Parallelverarbeitung

Früher gab es eine Unterscheidung zwischen parallelem Computing und verteilten Systemen. Das parallele Computing konzentrierte sich auf die gleichzeitige Ausführung von Software auf mehreren Threads oder Prozessoren, die auf dieselben Daten und denselben Speicher zugreifen. Verteilte Systeme bedeuteten separate Maschinen mit eigenen Prozessoren und eigenem Speicher. Mit dem Aufkommen moderner Betriebssysteme, Prozessoren und Cloud-Services umfasst das verteilte Computing heutzutage auch die Parallelverarbeitung.

Verteilte künstliche Intelligenz

Die verteilte künstliche Intelligenz ist eine Möglichkeit, große Rechenleistung und Parallelverarbeitung zu nutzen, um mit Hilfe von Multiagentensystemen sehr große Datensätze zu lernen und zu verarbeiten.

Verteilte Datenbanksysteme

Eine verteilte Datenbank ist eine Datenbank, die über mehrere Server und/oder physische Standorte verteilt ist. Die Daten können entweder systemübergreifend repliziert oder dupliziert werden.

Die meisten gängigen Anwendungen verwenden eine verteilte Datenbank und erfordern die Kenntnis der homogenen oder heterogenen Beschaffenheit des verteilten Datenbanksystems.

Eine homogene verteilte Datenbank bedeutet, dass jedes System über dasselbe Datenbankmanagementsystem und Datenmodell verfügt. Sie sind einfacher zu verwalten und skalieren durch Hinzufügen neuer Knoten und Standorte.

Heterogene verteilte Datenbanken ermöglichen unterschiedliche Datenmodelle und Datenbankverwaltungssysteme. Gateways werden verwendet, um die Daten zwischen den Knotenpunkten zu übersetzen. Sie entstehen in der Regel durch die Zusammenlegung von Anwendungen und Systemen.

Verteilte Systemarchitektur

Verteilte Systeme müssen über ein Netzwerk verfügen, das alle Komponenten (Maschinen, Hardware oder Software) miteinander verbindet, damit sie Nachrichten übertragen und miteinander kommunizieren können.

  • Dieses Netzwerk kann über eine IP-Adresse oder über Kabel oder sogar über eine Platine verbunden sein.
  • Die Nachrichten, die zwischen den Rechnern ausgetauscht werden, enthalten Daten, die die Systeme gemeinsam nutzen möchten, wie Datenbanken, Objekte und Dateien.
  • Ein wichtiges Merkmal eines verteilten Systems ist die Art und Weise, wie die Nachrichten zuverlässig übermittelt werden, ob sie nun gesendet, empfangen und bestätigt werden oder wie ein Knoten bei einem Ausfall erneut versucht, sie zu senden.
  • Verteilte Systeme sind aus der Notwendigkeit heraus entstanden, da Dienste und Anwendungen skaliert und neue Rechner hinzugefügt und verwaltet werden mussten. Bei der Entwicklung verteilter Systeme ist die wichtigste Abwägung die zwischen Komplexität und Leistung.

Um dies zu verstehen, betrachten wir die Vor- und Nachteile verschiedener Arten von verteilten Architekturen.

Arten verteilter Systemarchitekturen:

Verteilte Anwendungen und Prozesse verwenden in der Regel eine der folgenden vier Architekturen:

Client-Server:

In den Anfängen bestand die Architektur verteilter Systeme aus einem Server als gemeinsam genutzte Ressource wie einem Drucker, einer Datenbank oder einem Webserver. Das System verfügte über mehrere Clients (z. B. Benutzer hinter Computern), die entscheiden, wann sie die gemeinsame Ressource nutzen, wie sie sie nutzen und anzeigen, Daten ändern und an den Server zurücksenden. Code-Repositories wie git sind ein gutes Beispiel dafür, wie die Entwickler in die Lage versetzt werden, die Änderungen am Code vorzunehmen.

Heute hat sich die Architektur verteilter Systeme mit Webanwendungen weiterentwickelt zu:

  • Three-Tier-Architektur: Bei dieser Architektur müssen die Clients nicht mehr intelligent sein und können sich auf eine mittlere Ebene stützen, die die Verarbeitung und Entscheidungsfindung übernimmt. Die meisten der frühen Webanwendungen fallen unter diese Kategorie. Die mittlere Ebene könnte als Agent bezeichnet werden, der Anfragen von Clients entgegennimmt (die auch zustandslos sein können), die Daten verarbeitet und sie dann an die Server weiterleitet.
  • Multi-Tier-Architektur: Mit Enterprise Web Services wurden zunächst n-Tier- oder Multi-Tier-Systemarchitekturen geschaffen. Dadurch wurden die Anwendungsserver populär, die die Business Logic enthalten und sowohl mit den Daten- als auch mit den Präsentationsebenen interagieren.
  • Peer-to-Peer: Bei dieser Architektur gibt es keine zentralisierten oder speziellen Rechner, die die schwierige und intelligente Arbeit übernehmen. Alle Entscheidungen und Verantwortlichkeiten werden auf die beteiligten Rechner aufgeteilt, die jeweils eine Client- oder eine Serverrolle übernehmen können. Blockchain ist ein gutes Beispiel hierfür.

Vor- und Nachteile von verteilten Systemen

Vorteile verteilter Systeme:

Das ultimative Ziel eines verteilten Systems ist es, Skalierbarkeit, Leistung und hohe Verfügbarkeit von Anwendungen zu ermöglichen.

Zu den größten Vorteilen gehören:

  • Unbegrenzte horizontale Skalierung (Neue Maschinen können jederzeit nach Bedarf hinzugefügt werden).
  • Geringe Latenz (Rechner, die geografisch näher an den Nutzern stehen, ermöglichen eine schnellere Versorgung der Nutzer).
  • Fehlertoleranz (Wenn ein Server oder Data Center ausfällt, können andere die Nutzer weiterhin versorgen).
  • Vorteile von verteilten Systemen:

Nachteile verteilter Systeme:

Jede technische Entscheidung ist mit Abstrichen verbunden. Der größte Nachteil von verteilten Systemen ist ihre Komplexität. Es gibt mehr Rechner, mehr Messages und mehr Daten, die zwischen mehreren Parteien ausgetauscht werden, was zu Problemen führen kann mit:

  • Datenintegration & Konsistenz - Die Reihenfolge von Datenänderungen mit dem Application State in einem verteilten System zu synchronisieren, ist eine Herausforderung, insbesondere wenn Nodes starten, stoppen oder ausfallen.
  • Netzwerk- und Kommunikationsfehler - Messages werden möglicherweise nicht an die richtigen Nodes oder in der falschen Reihenfolge zugestellt, was zu einem Zusammenbruch der Kommunikation und Funktionalität führt.
  • Management-Overhead - mehr Intelligenz, Monitoring, Protokollierung und Load-Balancing-Funktionen müssen hinzugefügt werden, um den Betrieb und die Ausfälle der verteilten Systeme sichtbar und nachvollziehbar zu machen

Das sind die Vorteile von verteilten Streaming-Plattformen

Confluent ist die einzige Daten-Streaming-Plattform, die für jede Cloud-, On-Premise- oder Hybrid-Cloud-Umgebung verfügbar ist. Jetzt mehr als 120 Datenquellen verbinden, mit Skalierbarkeit, Sicherheit und Integrationen auf Enterprise-Niveau, um Echtzeit-Einblicke in alle verteilten Systeme zu ermöglichen.

Der Einstieg mit einer kostenlosen 30-Tage-Testversion gelingt in nur wenigen Minuten.