Close

Was ist ein verteiltes System?

Ein Überblick über verteilte Systeme und Microservice-Architekturen

Kev Zettler Porträtfoto
Kev Zettler

Full Stack Web Developer


Ein verteiltes System ist eine Sammlung aus Computerprogrammen, die Rechenressourcen über mehrere getrennte Rechenknoten hinweg nutzen, um ein gemeinsames Ziel zu erreichen. Mithilfe von verteilten Systemen sollen Engpässe oder zentrale Schwachstellen im System vermieden werden.

Was passiert, wenn du eine Anwendung als einzelne bereitstellbare Einheit erstellst, die gut funktioniert, aber im Laufe der Zeit immer größer und komplexer wird? Ihre Wartung wird häufig schwieriger, die Entwicklungsgeschwindigkeit wird verlangsamt und das Ausfallrisiko steigt. In diesem Fall muss sich die monolithische Struktur zu einem verteilten System weiterentwickeln, das typischerweise eine Microservices-Architektur ist.

Was ist ein verteiltes System?


Ein verteiltes System ist eine Sammlung aus Computerprogrammen, die Rechenressourcen über mehrere getrennte Rechenknoten hinweg nutzen, um ein gemeinsames Ziel zu erreichen. Es wird auch als verteiltes Computing oder verteilte Datenbanken bezeichnet und stützt sich auf separate Knoten, um über ein gemeinsames Netzwerk zu kommunizieren und zu synchronisieren. Diese Knoten sind typischerweise separate physische Hardwaregeräte, sie können aber auch separate Softwareprozesse oder andere rekursive gekapselte Systeme darstellen. Mithilfe von verteilten Systemen sollen Engpässe oder zentrale Schwachstellen im System vermieden werden.

Verteilte Rechensysteme weisen die folgenden Eigenschaften auf:

Nutzung gemeinsamer Ressourcen – Ein verteiltes System kann Hardware, Software oder Daten gemeinsam nutzen.

Simultane Verarbeitung – Mehrere Rechner können dieselbe Funktion simultan verarbeiten.

Skalierbarkeit – Die Rechen- und Verarbeitungskapazität kann bei Bedarf skaliert werden, wenn sie auf weitere Rechner ausgeweitet wird.

Fehlererkennung – Fehler werden einfacher erkannt.

Transparenz – Ein Knoten kann auf andere Knoten im System zugreifen und mit diesen kommunizieren.

Symbol: Codespeicher
Zugehöriges Material

Microservices vs. monolithic architecture

Symbol: drei Ringe
Lösung anzeigen

Verwalte deine Komponenten mit Compass

Worin unterscheiden sich ein zentralisiertes und ein verteiltes System?


Bild: Vergleich zentralisierter und verteilter Systeme

Bei einem zentralisierten Rechensystem werden sämtliche Rechenoperationen von einem Computer an einem Standort durchgeführt. Der Hauptunterschied zwischen zentralisierten und verteilten Systemen besteht im Kommunikationsmuster zwischen den Knoten des Systems. Der Status eines zentralisierten Systems ist in einem zentralen Knoten gespeichert, auf den Clients auf eine bestimmte Weise zugreifen. Die Knoten eines zentralisierten Systems greifen alle auf den zentralen Knoten zu, was zu einer Überlastung und Verlangsamung des Netzwerks führen kann. Ein zentralisiertes System hat einen Single Point of Failure, das verteilte System hingegen keinen.

Sind verteilte Systeme dasselbe wie Microservices?


Eine Microservices-Architektur ist eine Form des verteilten Systems, weil sie eine Anwendung in separate Komponenten oder "Services" zerlegt. Eine Microservice-Architektur kann beispielsweise Services enthalten, die Unternehmensfunktionen (Zahlungen, Benutzer, Produkte usw.) entsprechen, deren jeweiligen Komponenten die Geschäftslogik für diese Aufgabe handhaben. Das System verfügt dann über mehrere redundante Kopien der Services, sodass es keine zentrale Schwachstelle für einen Service gibt.

Was ist verteilte Ablaufverfolgung?


Die verteilte Ablaufverfolgung ist eine Methode, mit der das Ergebnis einer Anfrage, die in einem verteilten System ausgeführt wird, überwacht und ein Profil davon erstellt werden kann. Die Überwachung eines verteilten Systems kann eine Herausforderung darstellen, weil jeder einzelne Knoten über seine eigenen vielfältigen Protokolle und Metriken verfügt. Um eine korrekte Ansicht eines verteilten Systems zu erhalten, müssen diese gesonderten Knotenmetriken in einer ganzheitlichen Ansicht zusammengeführt werden.

Anfragen an verteilte Systeme greifen in der Regel nicht auf alle vorhandenen Knoten innerhalb des Systems zu, sondern nur auf einen Teil oder einen Pfad durch die Knoten. Die verteilte Ablaufverfolgung beleuchtet Pfade, auf die häufig über ein verteiltes System zugegriffen wird, und ermöglicht es Teams, diese Pfade zu analysieren und zu überwachen. Die verteilte Ablaufverfolgung ist auf jedem Knoten des Systems installiert, sodass Teams das System nach Informationen zum Knotenzustand und zur Anforderungsleistung abfragen können.

Vorteile, Nachteile und Risiken verteilter Systeme


Verteilte Systeme sind häufig ein gutes Mittel, um die Zuverlässigkeit und Leistung des Systems zu verbessern. Die Zuverlässigkeit lässt sich verbessern, indem zentrale Schwachstellen und Engpässe beseitigt werden. Die Knoten eines verteilten Systems bieten Redundanz, d. h., dass bei einem Ausfall eines Knotens andere Knoten als Ersatz bereitstehen. Die Leistung wird verbessert, weil Knoten problemlos horizontal und vertikal skaliert werden können. Wenn ein System aktuell extrem ausgelastet ist, können weitere Knoten hinzugefügt werden, um die Last auf diese zu verteilen. Außerdem kann die Kapazität eines einzelnen Knotens erhöht werden, um eine hohe Last zu bewältigen.

Diese Vorteile können jedoch eine unkontrollierte Entwicklung begünstigen, die das System allzu komplex und damit dessen Wartung zur Herausforderung macht. Wenn Systeme immer komplexer werden, könnten Teams Schwierigkeiten damit haben, diese effektiv zu organisieren, zu verwalten und zu verbessern. Ein Teil des Problems kann darin bestehen, dass nicht verstanden wird, welchen Bezug verschiedene Komponenten zueinander haben oder wer eine bestimmte Softwarekomponente besitzt. So lässt sich schwer nachvollziehen, wie Änderungen an den Komponenten vorgenommen werden können, um ihren Betriebszustand zu optimieren und negative Auswirkungen nicht nur auf abhängige Komponenten, sondern auch auf Kunden zu vermeiden. Wenn ein System über mehrere Repositorys verfügt, sind eventuell spezielle Tools wie Compass von Atlassian erforderlich, um den Code eines verteilten Systems zu verwalten und zu organisieren.

Architekturen verteilter Systeme


Es gibt zahlreiche Arten von verteilten Systemen. Am gängigsten sind die folgenden:

Client-Server

Eine Client-Server-Architektur hat zwei Hauptaufgaben. Der Client übernimmt die Darstellung der Benutzerschnittstelle, die dann über das Netzwerk eine Verbindung zum Server herstellt. Der Server kümmert sich um die Geschäftslogik und die Zustandsverwaltung. Eine Client-Server-Architektur kann einfach zu einer zentralisierten Architektur herabgestuft werden, wenn der Server nicht redundant gemacht wird. Eine echte verteilte Client-Server-Einrichtung verfügt über mehrere Serverknoten zur Verteilung von Clientverbindungen. Die meisten modernen Client-Server-Architekturen sind Clients, die eine Verbindung zu einem gekapselten verteilten System auf dem Server herstellen.

Mehrstufige Systeme

Eine mehrstufige Architektur ist eine weitere Ausführung der Client-Server-Architektur. Der Server ist in einer mehrstufigen Architektur in weitere granulare Knoten zerlegt, die zusätzliche Backend-Server-Aufgaben wie die Datenverarbeitung und -verwaltung voneinander entkoppeln. Diese zusätzlichen Knoten werden verwendet, um Aufträge mit langer Laufzeit asynchron zu verarbeiten, damit die verbleibenden Backend-Knoten auf Clientanforderungen reagieren und als Schnittstelle zum Datenspeicher verwendet werden können.

Peer-to-Peer-Systeme

In einem verteilten Peer-to-Peer-System enthält jeder Knoten die vollständige Instanz einer Anwendung. Aufgaben wie Präsentation und Datenverarbeitung werden von allen Knoten übernommen. Ein Knoten enthält die Darstellungsebene und die Datenverarbeitungsebenen. In Peer-Knoten können alle Zustandsdaten des gesamten Systems gespeichert sein.

Peer-to-Peer-Systeme haben den Vorteil, dass sie eine enorme Redundanz bieten. Wenn ein Peer-to-Peer-Knoten initialisiert und online geschaltet wird, erkennt er andere Peers und synchronisiert seinen lokalen Status entsprechend dem Status des weiteren Systems. Dies bedeutet, dass der Ausfall eines Knotens in einem Peer-to-Peer-System keine Auswirkungen auf die anderen Knoten hat. Es bedeutet auch, dass ein Peer-to-Peer-System fortbesteht.

Serviceorientierte Architektur

Die serviceorientierte Architektur (SOA) ist der Vorläufer der Microservices. Der Hauptunterschied zwischen SOA und Microservices besteht im Knotenumfang, also der Anzahl der Microservice-Knoten auf Funktionsebene. In Microservices kapselt ein Knoten die Geschäftslogik, um eine bestimmte Funktion wie die Zahlungsabwicklung zu handhaben. Microservices enthalten mehrere unterschiedliche Geschäftslogikknoten, die als Schnittstellen zu unabhängigen Datenbankknoten dienen. Im Vergleich dazu kapseln SOA-Knoten den gesamten Anwendungs- oder Unternehmensbereich. Die Servicegrenze für SOA-Knoten schließt normalerweise ein ganzes Datenbanksystem innerhalb des Knotens ein.

Aufgrund ihrer Vorteile haben sich Microservices als beliebtere Alternative zur SOA erwiesen. Sie bieten mehr Zusammenstellungsmöglichkeiten und erlauben es Teams, die von den kleinen Serviceknoten bereitgestellten Funktionen wiederzuverwenden. Microservices sind robuster und ermöglichen eine dynamischere vertikale und horizontale Skalierung.

Anwendungsfälle für verteilte Systeme

Viele moderne Anwendungen nutzen verteilte Systeme. Web- und Mobilanwendungen mit hohem Datenverkehr sind verteilte Systeme. Benutzer verbinden sich mit einer Methode, die der des Client-Servers ähnelt, wobei der Client ein Webbrowser oder eine mobile Anwendung ist. Der Server ist in diesem Fall sein eigenes verteiltes System. Moderne Webserver folgen einem mehrstufigen Systemmuster. Um Anforderungen an viele Serverlogikknoten zu delegieren, die über Nachrichtenwarteschlangensysteme kommunizieren, wird ein Load Balancer verwendet.

Kubernetes ist ein beliebtes Tool für verteilte Systeme, da es aus mehreren Containern ein verteiltes System erstellen kann. Die Container erstellen Knoten des verteilten Systems und Kubernetes orchestriert dann die Netzwerkkommunikation zwischen den Knoten und übernimmt auch die dynamische horizontale und vertikale Skalierung der Knoten im System.

Ein weiteres gutes Beispiel für verteilte Systeme sind Kryptowährungen wie Bitcoin und Ethereum, bei denen es sich um verteilte Peer-to-Peer-Systeme handelt. Jeder Knoten in einem Kryptowährungsnetzwerk ist eine eigenständige Replikation des gesamten Währungsverlaufs. Wenn ein Währungsknoten online geschaltet wird, startet dieser, indem er eine Verbindung zu anderen Knoten herstellt und seine vollständige Kopie des Hauptbuchs herunterlädt. Darüber hinaus haben Kryptowährungen Clients oder sogenannte Wallets, die über das JSON-RPC-Protokoll eine Verbindung zu den Hauptbuchknoten herstellen.

Fazit


Verteilte Systeme sind stark verbreitet und werden in den meisten modernen Softwareumgebungen verwendet. Social-Media-Apps, Video-Streaming-Services oder E-Commerce-Websites werden alle durch verteilte Systeme unterstützt. Zentralisierte Systeme entwickeln sich ganz natürlich zu verteilten Systemen weiter, um eine Skalierung zu ermöglichen. Die Verwendung von Microservices ist eine beliebte und weit verbreitete Methode, um ein verteiltes System zu erstellen.

Die Erstellung und Wartung von verteilten Systemen ist zwar komplexer, diese Herausforderung ist aber mit Compass von Atlassian zu meistern. Dabei handelt es sich um eine Developer-Experience-Plattform, die dich bei der Navigation deiner verteilten Architektur unterstützt, indem sie unzusammenhängende Informationen über die Entwicklungsergebnisse und die daran zusammenarbeitenden Teams an einem zentralen, durchsuchbaren Ort zusammenführt.

Kev Zettler
Kev Zettler

Kev ist ein führender Full-Stack-Webentwickler und Serienunternehmer mit über zehn Jahren Erfahrung beim Aufbau von Produkten und Teams mit agilen Methoden. Aufstrebende Open-Source-Technologien wie DevOps, Kryptowährung und Virtual/Augmented Reality sind seine große Leidenschaft – ob als Mitwirkender, Autor oder Lehrer. In seiner Freizeit nimmt er an Sessions zur Entwicklung von Indie-Games teil.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

Compass-Community

Illustration: Überwindung von Hindernissen

Tutorial: Erstellen einer Komponente

Abbildung: Karte

Erste Schritte mit Compass (kostenlos)

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up