Horizontales vs. vertikales Skalieren. Was ist der Unterschied?
Bei steigenden Anforderungen an die Leistung und Verfügbarkeit von Anwendungen und Systemen stellt sich die Frage, wie diese Anforderungen erfüllt werden können. Eine Möglichkeit besteht darin, die bestehende Infrastruktur zu skalieren, um die Leistung und Verfügbarkeit zu verbessern. Dabei wird zwischen horizontalem und vertikalem Skalieren unterschieden. Doch was ist der Unterschied zwischen den beiden Ansätzen und für welche sollten Sie sich entscheiden?
Anforderungen an den Programmiercode
Neben der Anforderung an die Skalierbarkeit der Infrastruktur spielt auch der Programmiercode eine wichtige Rolle. Ein gut strukturierter und modularer Code erleichtert das horizontale Skalieren, da die Anwendung in mehrere Instanzen aufgeteilt werden kann. Dadurch können die Anforderungen an die Leistung und Verfügbarkeit besser erfüllt werden. Bei vertikalem Skalieren hingegen ist es schwieriger, die Anwendung in mehrere Instanzen aufzuteilen, da die Ressourcen auf einer Instanz begrenzt sind. Daher ist es wichtig im Vorfeld zu klären, welche Anforderungen an den Programmiercode gestellt werden und wie dieser strukturiert werden sollte.
Beispiel anhand einer Mobilen App
Angenommen Sie haben die Idee eine Mobile App zu entwickeln. Dann sollten Sie sich zu Beginn überlegen, in welcher Programmiersprache die App entwickelt werden soll. Wenn Sie über ausreichend kapazitäten für Entwickler verfügen die Mobile App separat für Android und iOS zu entwickeln, empfiehlt es sich die App in den nativen Programmiersprachen Kotlin und Swift zu entwickeln. Dadurch können Sie die App besser an die jeweiligen Betriebssysteme anpassen und die Leistung und Verfügbarkeit verbessern. Wenn Sie hingegen nur über begrenzte Kapazitäten verfügen und die App schnell entwickeln wollen, empfiehlt es sich die App in einer plattformübergreifenden Programmiersprache wie Flutter oder React Native zu entwickeln. Dadurch können Sie die App schneller entwickeln und profitieren von dem Vorteil nur eine Codebasis zu haben, statt zwei separate Codebasen für Android und iOS. Beachten Sie bevor Sie sich für eine Programmiersprache entscheiden, welche Anforderungen Ihr Projekt hat und welche Nativen Funktionen Sie benötigen.
Angenommen, Sie haben sich für Flutter entschieden, müssen Sie jetzt die geeignete Datenbank für die App auswählen und festlegen, in welcher Programmiersprache Sie das Backend entwickeln wollen.
On-Premise vs. Cloud Hosting
Ein weiterer wichtiger Aspekt bei der Skalierung von Anwendungen und Systemen ist die Wahl zwischen On-Premise und Cloud. On-Premise bedeutet, dass die Infrastruktur in einem eigenen Rechenzentrum betrieben wird, während Cloud bedeutet, dass die Infrastruktur in einem externen Rechenzentrum betrieben wird. Beide Ansätze haben ihre Vor- und Nachteile, die es zu berücksichtigen gilt. Bei On-Premise haben Sie die volle Kontrolle über die Infrastruktur, während bei Cloud die Infrastruktur flexibel und skalierbar ist. Bevor Sie sich für einen der beiden Ansätze entscheiden, sollten Sie die Anforderungen an die Leistung und Verfügbarkeit sowie die Kosten und den Aufwand für den Betrieb der Infrastruktur berücksichtigen.
Vertikales Skalieren
Um es hier einfach zu halten, haben wir uns für eine grundlegende Serverinfrastruktur entschieden, bei der ein Nginx-Proxy die eingehenden Anfragen an die verschiedenen Services weiterleitet. In der Praxis wird die Architektur jedoch komplexer, da zusätzliche Komponenten wie Load Balancer und Cloudflare zum Einsatz kommen können.
Wenn jetzt die ersten Benutzer Ihre App verwenden und die Anfragen zunehmen, ist es wichtig anhand der Auslastung der Server über das Monitoring Tool zu erkennen, wann Sie die Serverkapazität erhöhen müssen.
Nun sind Sie an dem Punkt angekommen, das Ihre App größer wird und damit auch die Anfragen zunehmen. In dem Beispiel lässt sich gut erkennen, wie die Auslastung der Server gestiegen ist und Sie die Serverkapazität erhöhen müssen.
Bei der vertikalen Skalierung wird die Leistung und Verfügbarkeit eines Servers durch das Hinzufügen von Ressourcen wie CPU, RAM und Festplattenspeicher verbessert. Dieser Ansatz hat den Vorteil, dass die Anwendung auf einem einzigen Server ausgeführt wird und die Ressourcen einfach hinzugefügt werden können. Allerdings gibt es auch Nachteile, wie z.B. die begrenzte Skalierbarkeit und die höheren Kosten im Vergleich zum horizontalen Skalieren. Hier wurde z. B. von einem 1-Core, 8 GB RAM und 1 TB SSD auf einen 4-Core, 32 GB RAM und 4 TB SSD Server skaliert.
Steigt Ihre App weiter an, kommen Sie irgendwann an den Punkt, an dem Sie die Serverkapazität vertikal nicht mehr erhöhen können. Dann ist es an der Zeit, über horizontales Skalieren nachzudenken.
Horizontales Skalieren
Eben haben Sie gesehen, dass die vertikale Skalierung an ihre Grenzen stößt. Jetzt ist es an der Zeit, über horizontales Skalieren nachzudenken. Beim horizontalen Skalieren wird die Leistung und Verfügbarkeit einer Anwendung durch das Hinzufügen von weiteren Serverinstanzen verbessert. Dieser Ansatz hat den Vorteil, dass die Anwendung auf mehreren Servern ausgeführt wird und die Last gleichmäßig verteilt wird. Dadurch können die Anforderungen an die Leistung und Verfügbarkeit besser erfüllt werden. Allerdings gibt es auch Nachteile, wie z.B. die Komplexität der Infrastruktur und die höheren Kosten im Vergleich zum vertikalen Skalieren.
Fazit
Insgesamt ist es wichtig, die Anforderungen an die Leistung und Verfügbarkeit einer Anwendung oder eines Systems zu kennen, um die richtige Skalierungsstrategie zu wählen. Beide Ansätze, horizontales und vertikales Skalieren, haben ihre Vor- und Nachteile, die es zu berücksichtigen gilt. Daher ist es wichtig, im Vorfeld zu klären, welche Anforderungen an die Leistung und Verfügbarkeit gestellt werden und wie diese am besten erfüllt werden können.