Ein skalierbares IT-System zeichnet sich dadurch aus, dass es schnelle Veränderungen bei Workloads und Benutzeranforderungen bewältigen kann. Die Skalierbarkeit ist das Maß dafür, wie gut das System auf Veränderungen reagiert, indem es Ressourcen hinzufügt oder entfernt, um den Anforderungen gerecht zu werden. Die Architektur setzt sich aus Hardware, Software, Technologie und den Best Practices zusammen, die zum Aufbau der Netzwerke, Anwendungen, Prozesse und Dienste verwendet werden, aus denen Ihr gesamtes System besteht.
Ihr System aus Architektur, Diensten, Produkten und allem, was Ihre Marke definiert, gilt als skalierbar, wenn:
- es Ressourcen hinzufügen und seine Leistung steigern kann, um eine gestiegene Kundennachfrage und größere Workloads nahtlos zu bewältigen;
- es einfach und nahtlos Ressourcen entfernen kann, wenn die Nachfrage und die Workloads zurückgehen.
Grundsätzlich geht es darum, ein System zu entwickeln, das die Kapazität an ständig wechselnde Anforderungen anpassen kann. Das System muss in hohem Maße zugänglich sein und allen Ihren Kunden zur Verfügung stehen, wann und wo immer sie es brauchen.
Eine gut gestaltete, skalierbare Website beispielsweise funktioniert immer gleich gut, egal, ob ein oder mehrere Tausend Benutzer gleichzeitig darauf zugreifen. Die Funktionalität sollte nicht spürbar abnehmen, je mehr Benutzer sich anmelden.
Was ist ein Skalierbarkeitsmuster?
Haben Sie jemals mit LEGO®-Steinen gespielt? Vielleicht haben Sie versucht, etwas zu bauen, ohne sich dabei an die Anweisungen zu halten, und deshalb ist es eingestürzt? Wenn Sie sich aber an die sorgfältig illustrierten Anweisungen gehalten haben, war das Ergebnis ein stabiles Bauwerk, das nur dann zusammenbricht, wenn man die Steine absichtlich auseinandernimmt. Die in den Anweisungen dargestellten Bautechniken wurden getestet und haben sich als Lösungen für strukturelle Probleme erwiesen, auf die Bauingenieure immer wieder stoßen.
Architekturmuster in der Computerentwicklung ähneln den LEGO®-Bautechniken in den Anweisungen. Es handelt sich dabei um eine Reihe von Entwicklungs- und Programmiertechniken, die sich für die Lösung häufig auftretender Probleme bei der Entwicklung von Computersystemen bewährt haben. Diese Muster verfügen über gute Entwurfsstrukturen und sorgfältig definierte Eigenschaften und haben in der Vergangenheit erfolgreich Probleme gelöst.
Das heißt aber nicht, dass jedes Skalierbarkeitsmuster gleich gut für Sie geeignet ist. Ihre Herausforderung besteht darin, geeignete Muster auszuwählen und diese so anzupassen, dass sie die für Ihr System einzigartigen Probleme lösen können. Mit Skalierbarkeitsmustern sparen Sie viel Zeit, da Ihnen ein Großteil der Arbeit abgenommen wird.
Wie sehen einige gängige Skalierbarkeitsmuster aus?
Es gibt mehrere verschiedene skalierbare Architekturmuster, zwischen denen Sie wählen können. Im Folgenden werden wir einige der gängigsten Muster zur Lösung von Skalierungsproblemen in der Architektur erörtern.
AKF-Skalierwürfel
Dabei handelt es sich um ein dreidimensionales Modell, das drei Ansätze für die Skalierung entlang, der X-, Y- und Z-Achse definiert.
Skalierung entlang der X-Achse
Die X-Achse beschreibt die Skalierung durch mehrere Instanzen der gleichen Komponente. Dies geschieht durch Klonen oder Replizieren eines Dienstes, einer Anwendung oder eines Datensatzes hinter einem Load Balancer. Wenn also N Klone einer Anwendung ausgeführt werden, verarbeitet jede Instanz 1/N der Last.
Skalierungsmuster entlang der X-Achse sind einfach zu implementieren und erhöhen die Skalierbarkeit von Transaktionen. Allerdings kann ihre Wartung kostspielig sein, da ganze Datensätze über mehrere Server repliziert werden und die Datencaches exponentiell anwachsen.
Skalierung entlang der Y-Achse
Die Skalierung entlang der Y-Achse wird durch die Aufteilung oder Segmentierung unähnlicher Komponenten in mehrere Makro- oder Mikroservices entlang von Verb- oder Substantivgrenzen definiert. So kann ein verbbasiertes Segment beispielsweise einen Dienst wie „Checkout“ definieren. Ein substantivbasiertes Segment kann dagegen den Einkaufswagen beschreiben.
Jeder Dienst kann unabhängig skaliert werden, sodass Sie mehr Ressourcen ausschließlich für die Dienste einsetzen können, für die sie gerade benötigt werden. Um eine hohe Verfügbarkeit zu gewährleisten, sollte jeder Dienst seinen eigenen, nicht gemeinsam genutzten Datensatz haben.
Die nicht gemeinsam genutzten Datensätze helfen Ihnen bei der Fehlerisolierung, sodass Sie Probleme schnell und einfach diagnostizieren und beheben können, ohne das gesamte System zu scannen. Allerdings braucht die Einrichtung der Y-Achse viel Zeit und die Implementierung ist nicht gerade einfach.
Skalierung entlang der Z-Achse
Während die Y-Achse unähnliche Komponenten aufteilt, wird die Z-Achse zur Segmentierung ähnlicher Komponenten in Ihrem System verwendet. Jeder Server führt eine identische Kopie des Codes aus, allerdings nur für eine Teilmenge (oder Shard) dieser Daten.
Eine gängige Verwendung einer Aufteilung entlang der Z-Achse ist „Kunde nach Standort“ oder „Kunde nach Typ“. So hätten zahlende Kunden einer Seite für Abo-News unbegrenzten Zugriff auf alle Inhalte der Seite. Nicht zahlende Kunden derselben Seite hätten zwar Zugriff auf dieselben Daten, dürften jedoch möglicherweise nur drei oder vier Artikel pro Monat öffnen und lesen.
Mit diesem Setup können Betriebskosten gesenkt werden, da die Datensegmente kleiner sind und weniger Speicherressourcen benötigen. Allerdings ist die Erstellung und Implementierung der Z-Achse sehr zeitaufwändig und erfordert ein hohes Maß an Automatisierung, um den Systemaufwand zu verringern.
Vertikale und horizontale Skalierbarkeitsmuster
Sie können nach oben (vertikal) oder nach außen (horizontal) skalieren.
Vertikale Skalierung
Bei der vertikalen Skalierung erhöhen Sie die Fähigkeit einer Komponente, z. B. eines Servers, um die Leistung zu verbessern. Wenn beispielsweise mehr Datenverkehr auf Ihren Server gelangt, sinkt seine Leistung. Wenn Sie mehr RAM und Speicherlaufwerke hinzufügen, erhöht sich die Leistung des Servers, sodass der erhöhte Datenverkehr einfacher bewältigt werden kann.
Die vertikale Skalierung ist einfach zu implementieren und zu warten und spart Geld, da Sie keine neuen Ressourcen kaufen müssen. Allerdings stellt sie eine potenzielle einzige Fehlerquelle dar, die zu erheblichen Ausfallzeiten führen kann.
Ein Unternehmen, das gerade am Anfang steht, kann mithilfe der vertikalen Skalierung Kosten gering halten. Allerdings werden mit diesem Ansatz schnell die Grenzen von RAM und Speicherplatz erreicht, und Sie müssen weitere Ressourcen hinzufügen, um mit der Nachfrage Schritt zu halten.
Horizontale Skalierung
Bei der horizontalen Skalierung erhöhen Sie die Leistungskapazität, indem Sie mehr Ressourcen desselben Typs zu Ihrem System hinzufügen. Anstatt beispielsweise die Kapazität eines Servers zu erhöhen, um dessen Leistung zu verbessern, fügen Sie weitere Server zum System hinzu. Ein Load Balancer hilft, die Arbeitslast je nach deren Verfügbarkeit auf die verschiedenen Server zu verteilen. Dadurch wird die Gesamtleistung des System erhöht.
Mehr Rechenressourcen bedeuten mehr Fehlertoleranz und weniger Ausfallrisiken. Allerdings kann das Hinzufügen von Servern und Load Balancern teuer sein. Sie sollten daher eine Kombination aus lokalen und Cloud-Ressourcen in Betracht ziehen, um den erhöhten Datenverkehr zu bewältigen.
Lastenausgleich
Load Balancer verteilen Benutzeranfragen und Workloads effizient auf eine Gruppe von Backend-Servern. Dabei geht es darum, die Arbeit auf verschiedene Ressourcen zu verteilen, damit keine einzelne Ressource überlastet wird. Mithilfe des Load Balancing kann Ihre IT-Abteilung die Verfügbarkeit und Skalierbarkeit Ihrer Dienste gewährleisten.
Zu den Aufgaben eines Load Balancers gehören:
- Ermittlung der im System verfügbaren Ressourcen.
- Überprüfung des Ressourcenstatus, um zu bestimmen, welche Ressourcen verfügbar sind und ob diese für die Verarbeitung des Workloads ordnungsgemäß funktionieren. Wenn ein verfügbarer Server beschädigt ist, sollte der Load Balancer den Pfad zu diesem Server abschalten und auf einen anderen Server wechseln, ohne dass der Benutzer eine Verzögerung oder Ausfallzeit bemerkt.
- Bestimmung eines Algorithmus, der für die Verteilung der Arbeit auf mehrere funktionstüchtige Backend-Server verwendet werden soll.
Zu den gängigen Methoden (Algorithmen) des Load Balancing gehören:
- Least-Connection-Methode: Der Datenverkehr wird zu dem Server geleitet, der die wenigsten aktiven Verbindungen hat.
- Least-Response-Time-Methode: Der Load Balancer misst die Zeit, die der Server benötigt, um auf eine Anfrage zur Statusüberwachung zu antworten. Der Datenverkehr wird dann zu dem Server geleitet, der am besten funktioniert und die kürzeste Antwortzeit hat. Einige Load Balancer berücksichtigen bei diesem Algorithmus auch die aktiven Verbindungen.
- Round-Robin-Methode: Der Datenverkehr wird zum ersten verfügbaren Server geleitet, unabhängig von dessen aktuellem Workload und aktiven Verbindungen. Nachdem der Server die Anfrage erhalten hat und sie bearbeitet, verschiebt der Load Balancer ihn ans Ende der Warteschlange. Das Risiko besteht darin, dass ein Server, der Anfragen erhält, die eine hohe Prozessorkapazität erfordern, noch mit der Bearbeitung früherer Anfragen beschäftigt ist, wenn er wieder an der Spitze der Warteschlange steht.
- Hashing-Methoden: Die Entscheidung, an welchen Server die Daten geleitet werden, hängt von einem Hash der Daten des eingehenden Pakets ab. Diese Daten können Informationen wie die IP-Adresse, die Portnummer oder den Domänennamen enthalten.
Caching – Content Delivery Networks (CDN)
Ein CDN ist ein globales Netzwerk von Servern, die zur Optimierung und Beschleunigung des Zugriffs auf und der Verteilung von statischen Webinhalten dienen. Statische Webinhalte sind beispielsweise Javascript, CSS, Bilder und andere Mediendateien, die sich nicht oft ändern.
Bis zu 80 % einer Website können aus statischen Inhalten bestehen. Die Videos, die bei einem Streaming-Dienst verfügbar sind, ändern sich zum Beispiel nicht sehr oft. Einige dieser Videos werden sehr beliebt und können jeden Tag Millionen von Aufrufen verzeichnen. Das Auslagern dieser statischen Inhalte in ein CDN verringert die Belastung des ursprünglichen Servers, verbessert die Inhalte auf globaler Ebene und bringt die Daten näher an die Kunden, sodass sie leicht zugänglich und in hohem Maße verfügbar sind.
Microservices
Microservices sind im Wesentlichen ein Bündel verschiedener kleiner Anwendungen, die alle zusammenarbeiten können. Jeder Microservice hat seinen eigenen Zweck und seine eigene Verantwortung. Mehrere verschiedene Teams können sie außerdem unabhängig von anderen Microservices entwickeln. Microservices sind nicht aufeinander angewiesen, um funktionieren zu können, aber sie müssen in der Lage sein, miteinander zu kommunizieren.
Microservices sind einfach zu skalieren, da nur die Dienste skaliert werden müssen, für die dies aktuell erforderlich ist. Sie können unabhängig und ohne Abstimmung mit verschiedenen Entwicklungsteams eingesetzt werden. Microservices eignen sich gut für Webanwendungen, schnelle Entwicklung und Bereitstellung sowie für Teams, die über den ganzen Globus verteilt sind.
Microservices sorgen für eine effiziente Skalierung von Transaktionen und großen Datensätzen und helfen Ihnen dabei, eine Fehlerisolierung zu erstellen, mit der Ihre Systeme in hohem Maße verfügbar bleiben. Da große, getrennte Funktionen in kleinere Dienste unterteilt werden können, wird die Komplexität Ihrer Codebasis zusätzlich reduziert.
Sharding
Sharding bezeichnet im Grunde die Unterteilung einer großen Datenbank in kleinere, besser zu verwaltende und skalierbare Komponenten. Wenn eine Datenbank größer wird, werden dort auch mehr Anfragen und Transaktionen durchgeführt. Dies verlangsamt die Antwortzeit bei Datenbankanfragen. Außerdem kann die Verwaltung einer großen Datenbank sehr kostspielig sein.
Ein Shard ist eine einzelne Datenbankpartition. Um den Workload zu verteilen, können diese Partitionen auf mehreren dezentralisierten Datenbankservern existieren und auf diese aufgeteilt werden.
Wenn Ihre Datenbank zu groß wird, kann Sharding eine Option für Sie sein, denn:
- Kleinere Datenbanken sind einfacher zu verwalten.
- Kleinere Datenbanken sind schneller, und jeder einzelne Shard kann eine einzelne große Datenbank übertreffen.
- Kleinere Datenbanken lassen sich leichter skalieren, da neue Shards erstellt und auf mehrere Server verteilt werden können.
- Durch Sharding können die Kosten gesenkt werden, da Sie keine großen und teuren Server für den Betrieb benötigen.
Die Implementierung von skalierbaren Architekturmustern in Ihrem IT-System sollte dazu beitragen, dass Ihr System seine Leistung auch bei steigender Eingangslast beibehalten kann.
Entwerfen Sie Ihr individuelles Anwendungsarchitekturdiagramm.
Jetzt loslegenÜber Lucidchart
Lucidchart, eine Cloud-basierte Anwendung für intelligente Diagrammerstellung, ist eine Kernkomponente der visuellen Kollaborationssuite von Lucid Software. Mit dieser intuitiven, Cloud-basierten Lösung können Teams in Echtzeit zusammenarbeiten, um Flussdiagramme, Mockups, UML-Diagramme, Customer Journey Maps und mehr zu erstellen. Lucidchart unterstützt Teams dabei, die Zukunft schneller zu gestalten. Lucid ist stolz darauf, dass Spitzenunternehmen auf der ganzen Welt seine Produkte nutzen, darunter Kunden wie Google, GE und NBC Universal sowie 99 % der Fortune 500. Lucid arbeitet mit branchenführenden Partnern wie Google, Atlassian und Microsoft zusammen. Seit seiner Gründung wurde Lucid mit zahlreichen Preisen für seine Produkte, Geschäftspraktiken und Unternehmenskultur gewürdigt. Weitere Informationen finden Sie unter lucidchart.com.